/* * Copyright (C) 2013 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.tools.idea.gradle.util; import com.android.SdkConstants; import com.google.common.base.Strings; import com.google.common.io.Closeables; import com.intellij.openapi.diagnostic.Logger; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.util.Properties; /** * Utility methods related to Gradle-specific Android settings. */ public final class AndroidGradleSettings { private static final Logger LOG = Logger.getInstance(AndroidGradleSettings.class); @NonNls private static final String JVM_ARG_FORMAT = "-D%1$s=%2$s"; @NonNls private static final String PROJECT_PROPERTY_FORMAT = "-P%1$s=%2$s"; @NonNls public static final String ANDROID_HOME_JVM_ARG = "android.home"; private AndroidGradleSettings() { } /** * Indicates whether the path of the Android SDK home directory is specified in a local.properties file. * * @param projectDir the project directory. * @return {@code true} if the Android SDK home directory is specified in the project's local.properties. */ public static boolean isAndroidSdkDirInLocalPropertiesFile(@NotNull File projectDir) { String androidHome = getAndroidHomeFromLocalPropertiesFile(projectDir); if (!Strings.isNullOrEmpty(androidHome)) { String msg = String.format("Found Android SDK home at '%1$s' (from local.properties file)", androidHome); LOG.info(msg); return true; } return false; } @Nullable public static String getAndroidHomeFromLocalPropertiesFile(@NotNull File projectDir) { File filePath = new File(projectDir, SdkConstants.FN_LOCAL_PROPERTIES); if (!filePath.isFile()) { return null; } Properties properties = new Properties(); FileInputStream fileInputStream = null; try { //noinspection IOResourceOpenedButNotSafelyClosed fileInputStream = new FileInputStream(filePath); properties.load(fileInputStream); } catch (FileNotFoundException e) { return null; } catch (IOException e) { String msg = String.format("Failed to read file '%1$s'", filePath.getPath()); LOG.error(msg, e); return null; } finally { try { Closeables.close(fileInputStream, true); } catch (IOException e) { LOG.debug(e); } } return properties.getProperty(SdkConstants.SDK_DIR_PROPERTY); } @NotNull public static String createAndroidHomeJvmArg(@NotNull String androidHome) { return createJvmArg(ANDROID_HOME_JVM_ARG, androidHome); } @NotNull public static String createJvmArg(@NotNull String name, int value) { return createJvmArg(name, String.valueOf(value)); } @NotNull public static String createJvmArg(@NotNull String name, boolean value) { return createJvmArg(name, String.valueOf(value)); } @NotNull public static String createJvmArg(@NotNull String name, @NotNull String value) { return String.format(JVM_ARG_FORMAT, name, value); } @NotNull public static String createProjectProperty(@NotNull String name, @NotNull boolean value) { return createProjectProperty(name, String.valueOf(value)); } @NotNull public static String createProjectProperty(@NotNull String name, @NotNull String value) { return String.format(PROJECT_PROPERTY_FORMAT, name, value); } }