blob: a975e9c806fb0d42f8df2fcdba80c04d56a91e99 [file] [log] [blame]
/*
* 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);
}
}