Snap for 4546953 from 68172702c9d5d871aeffb67a65dd955dc20d35cf to pi-release
Change-Id: I947068c7b55ca1fae9a6d958010700e3e5406e26
diff --git a/Android.mk b/Android.mk
index 46ae47c..817bb53 100644
--- a/Android.mk
+++ b/Android.mk
@@ -33,6 +33,12 @@
vogar-jsr305 \
vogar-kxml-libcore-20110123
+LOCAL_ADDITIONAL_DEPENDENCIES := \
+ $(HOST_OUT_EXECUTABLES)/dx \
+ $(HOST_OUT_EXECUTABLES)/d8-compat-dx \
+ $(HOST_OUT_EXECUTABLES)/adb \
+ $(HOST_OUT_JAVA_LIBRARIES)/desugar.jar
+
# Vogar uses android.jar.
LOCAL_CLASSPATH := prebuilts/sdk/9/android.jar
LOCAL_JAVA_LANGUAGE_VERSION := 1.7
diff --git a/src/vogar/android/AndroidSdk.java b/src/vogar/android/AndroidSdk.java
index 14e3377..01c4e07 100644
--- a/src/vogar/android/AndroidSdk.java
+++ b/src/vogar/android/AndroidSdk.java
@@ -46,6 +46,10 @@
*/
public class AndroidSdk {
+ private static final String D8_COMMAND_NAME = "d8-compat-dx";
+ private static final String DX_COMMAND_NAME = "dx";
+ private static final String ARBITRARY_BUILD_TOOL_NAME = D8_COMMAND_NAME;
+
private final Log log;
private final Mkdir mkdir;
private final File[] compilationClasspath;
@@ -66,14 +70,14 @@
*/
public static AndroidSdk createAndroidSdk(
Log log, Mkdir mkdir, ModeId modeId, Language language) {
- List<String> path = new Command.Builder(log).args("which", "dx")
+ List<String> path = new Command.Builder(log).args("which", ARBITRARY_BUILD_TOOL_NAME)
.permitNonZeroExitStatus(true)
.execute();
if (path.isEmpty()) {
- throw new RuntimeException("dx not found");
+ throw new RuntimeException(ARBITRARY_BUILD_TOOL_NAME + " not found");
}
- File dx = new File(path.get(0)).getAbsoluteFile();
- String parentFileName = getParentFileNOrLast(dx, 1).getName();
+ File buildTool = new File(path.get(0)).getAbsoluteFile();
+ String buildToolDirString = getParentFileNOrLast(buildTool, 1).getName();
List<String> adbPath = new Command.Builder(log)
.args("which", "adb")
@@ -90,12 +94,6 @@
/*
* Determine if we are running with a provided SDK or in the AOSP source tree.
*
- * On Android SDK v23 (Marshmallow) the structure looks like:
- * <sdk>/build-tools/23.0.1/aapt
- * <sdk>/platform-tools/adb
- * <sdk>/build-tools/23.0.1/dx
- * <sdk>/platforms/android-23/android.jar
- *
* Android build tree (target):
* ${ANDROID_BUILD_TOP}/out/host/linux-x86/bin/aapt
* ${ANDROID_BUILD_TOP}/out/host/linux-x86/bin/adb
@@ -111,12 +109,14 @@
// Accept that we are running in an SDK if the user has added the build-tools or
// platform-tools to their path.
- boolean dxSdkPathValid = "build-tools".equals(getParentFileNOrLast(dx, 2).getName());
+ boolean buildToolsPathValid = "build-tools".equals(getParentFileNOrLast(buildTool, 2)
+ .getName());
boolean isAdbPathValid = (adb != null) &&
"platform-tools".equals(getParentFileNOrLast(adb, 1).getName());
- if (dxSdkPathValid || isAdbPathValid) {
- File sdkRoot = dxSdkPathValid ? getParentFileNOrLast(dx, 3) // if dx path invalid then
- : getParentFileNOrLast(adb, 2); // adb must be valid.
+ if (buildToolsPathValid || isAdbPathValid) {
+ File sdkRoot = buildToolsPathValid
+ ? getParentFileNOrLast(buildTool, 3) // if build tool path invalid then
+ : getParentFileNOrLast(adb, 2); // adb must be valid.
File newestPlatform = getNewestPlatform(sdkRoot);
log.verbose("Using android platform: " + newestPlatform);
compilationClasspath = new File[] { new File(newestPlatform, "android.jar") };
@@ -124,14 +124,13 @@
.getAbsolutePath();
log.verbose("using android sdk: " + sdkRoot);
- // There must be a desugar.jar in the same directory as dx.
- String dxParentFileName = getParentFileNOrLast(dx, 1).getName();
- desugarJarPath = dxParentFileName + "/desugar.jar";
+ // There must be a desugar.jar in the build tool directory.
+ desugarJarPath = buildToolDirString + "/desugar.jar";
File desugarJarFile = new File(desugarJarPath);
if (!desugarJarFile.exists()) {
throw new RuntimeException("Could not find " + desugarJarPath);
}
- } else if ("bin".equals(parentFileName)) {
+ } else if ("bin".equals(buildToolDirString)) {
log.verbose("Using android source build mode to find dependencies.");
String tmpJarPath = "prebuilts/sdk/current/android.jar";
String androidBuildTop = System.getenv("ANDROID_BUILD_TOP");
@@ -188,7 +187,8 @@
compilationClasspath[i] = new File(String.format(pattern, jar));
}
} else {
- throw new RuntimeException("Couldn't derive Android home from " + dx);
+ throw new RuntimeException("Couldn't derive Android home from "
+ + ARBITRARY_BUILD_TOOL_NAME);
}
return new AndroidSdk(log, mkdir, compilationClasspath, androidJarPath, desugarJarPath,
@@ -319,10 +319,10 @@
Command.Builder builder = new Command.Builder(log);
switch (dexer) {
case DX:
- builder.args("dx");
+ builder.args(DX_COMMAND_NAME);
break;
case D8:
- builder.args("d8-compat-dx");
+ builder.args(D8_COMMAND_NAME);
break;
}
builder.args("-JXms16M")