package org.smoothbuild.builtin.android; import static java.nio.file.Files.isDirectory; import static java.nio.file.Files.isRegularFile; import static org.smoothbuild.builtin.android.EnvironmentVariable.environmentVariable; import java.nio.file.Path; import java.nio.file.Paths; import org.smoothbuild.lang.message.ErrorMessage; public class AndroidSdk { private static final EnvironmentVariable ANDROID_SDK_ROOT = environmentVariable("ANDROID_SDK"); private static final String BUILD_TOOLS = "build-tools"; private static final String PLATFORMS = "platforms"; public static final String AIDL_BINARY = "aidl"; private static final String FRAMEWORK_AIDL = "framework.aidl"; public static Path getFrameworkAidl(String apiLevel) { String androidApiLevel = "android-" + apiLevel; Path fileSubPath = Paths.get(PLATFORMS, androidApiLevel, FRAMEWORK_AIDL); return getFullPath(fileSubPath); } public static Path getAidlBinaryPath(String buildToolsVersion) { Path fileSubPath = Paths.get(BUILD_TOOLS, buildToolsVersion, AIDL_BINARY); return getFullPath(fileSubPath); } private static Path getFullPath(Path fileSubPath) { Path fullPath = getSdkDir().resolve(fileSubPath); if (!isRegularFile(fullPath)) { throw new ErrorMessage(fileNotFoundMessage(ANDROID_SDK_ROOT, fileSubPath)); } return fullPath; } private static String fileNotFoundMessage(EnvironmentVariable androidSdkVar, Path requiredSdkFile) { StringBuilder builder = new StringBuilder(); builder.append("Can't find " + requiredSdkFile + " file in android sdk.\n"); builder.append("Path to Android SDK was set by the following environment variable:\n"); builder.append(androidSdkVar.toString() + "\n"); return builder.toString(); } public static Path getSdkDir() { if (!ANDROID_SDK_ROOT.isSet()) { throw new ErrorMessage("Environment variable " + ANDROID_SDK_ROOT.name() + " is not set.\n" + "It should contain absolute path to android SDK."); } Path sdkRoot = Paths.get(ANDROID_SDK_ROOT.value()); if (!isDirectory(sdkRoot)) { throw new ErrorMessage( "Environment variable " + ANDROID_SDK_ROOT.name() + "should contain absolute path to android SDK dir.\n" + "It is set to '" + ANDROID_SDK_ROOT.value() + "'\n" + "but such dir doesn't exist.\n"); } return sdkRoot; } }