From e5788617934ee28ce1cdcd096e620ab9e7c2f37f Mon Sep 17 00:00:00 2001 From: Adam Michael Date: Thu, 27 Oct 2016 19:41:26 +0000 Subject: Singlejar apkbuilder now puts resources in the correct location in APK. This was a bug that only affected builds with a single classes.dex. -- MOS_MIGRATED_REVID=137427786 --- .../build/lib/rules/android/ApkActionsBuilder.java | 37 +++++++++++++++++----- 1 file changed, 29 insertions(+), 8 deletions(-) (limited to 'src/main/java/com/google/devtools/build/lib') diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/ApkActionsBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/android/ApkActionsBuilder.java index a3b6710f9b..0471854f9f 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/ApkActionsBuilder.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/ApkActionsBuilder.java @@ -268,15 +268,23 @@ public class ApkActionsBuilder { .addInputArgument(classesDex); } else { compressedApkActionBuilder + .addInput(classesDex) .addArgument("--resources") - .addInputArgument(classesDex); + .addArgument( + singleJarResourcesArgument( + classesDex.getExecPathString(), + classesDex.getFilename())); } } if (javaResourceFile != null) { compressedApkActionBuilder + .addInput(javaResourceFile) .addArgument("--resources") - .addInputArgument(javaResourceFile); + .addArgument( + singleJarResourcesArgument( + javaResourceFile.getExecPathString(), + javaResourceFile.getFilename())); } for (String architecture : nativeLibs.getMap().keySet()) { @@ -284,11 +292,9 @@ public class ApkActionsBuilder { compressedApkActionBuilder .addArgument("--resources") .addArgument( - nativeLib.getExecPathString() - + ":lib/" - + architecture - + "/" - + nativeLib.getFilename()) + singleJarResourcesArgument( + nativeLib.getExecPathString(), + "lib/" + architecture + "/" + nativeLib.getFilename())) .addInput(nativeLib); } } @@ -328,7 +334,9 @@ public class ApkActionsBuilder { singleJarActionBuilder .addArgument("--resources") .addArgument( - nativeLibs.getName().getExecPathString() + ":" + nativeLibs.getName().getFilename()) + singleJarResourcesArgument( + nativeLibs.getName().getExecPathString(), + nativeLibs.getName().getFilename())) .addInput(nativeLibs.getName()); } @@ -349,6 +357,19 @@ public class ApkActionsBuilder { ruleContext.registerAction(singleJarActionBuilder.build(ruleContext)); } + /** + * The --resources flag to singlejar can have either of the following forms: + * + * This method creates the syntax for the second form. + */ + private static String singleJarResourcesArgument(String from, String to) { + return from + ":" + to; + } + /** Uses the zipalign tool to align the zip boundaries for uncompressed resources by 4 bytes. */ private void zipalignApk(RuleContext ruleContext, Artifact inputApk, Artifact zipAlignedApk) { ruleContext.registerAction(new SpawnAction.Builder() -- cgit v1.2.3