diff options
author | Lukacs Berki <lberki@google.com> | 2015-07-27 13:43:08 +0000 |
---|---|---|
committer | Damien Martin-Guillerez <dmarting@google.com> | 2015-07-27 16:34:03 +0000 |
commit | 5ed29b66cf0ba9204882c094e664119d5f1d06c2 (patch) | |
tree | 2b3effa8a95054fadebe7a911e5c55dba4746c0f /src/main/java/com/google/devtools | |
parent | 01c1dea09c8508d900fa43b6472260bc3f56897b (diff) |
Add a command line option to enable incremental installation for Android native libraries.
This requires changes to the stub application and the installer script, which are a-coming.
--
MOS_MIGRATED_REVID=99174902
Diffstat (limited to 'src/main/java/com/google/devtools')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java | 31 | ||||
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/android/AndroidConfiguration.java | 14 |
2 files changed, 39 insertions, 6 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java index e617bca52d..e7c2fa501a 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java @@ -383,15 +383,20 @@ public abstract class AndroidBinary implements RuleConfiguredTargetFactory { if (ruleContext.hasErrors()) { return null; } - ruleContext.registerAction(new ApkActionBuilder(ruleContext, androidSemantics) + + ApkActionBuilder incrementalActionBuilder = new ApkActionBuilder(ruleContext, androidSemantics) .classesDex(stubDex) .resourceApk(incrementalResourceApk.getArtifact()) .javaResourceZip(dexingOutput.javaResourceJar) - .nativeLibs(nativeLibs) .sign(true) .javaResourceFile(stubData) - .message("Generating incremental apk") - .build(incrementalApk)); + .message("Generating incremental apk"); + + if (!ruleContext.getFragment(AndroidConfiguration.class).useIncrementalNativeLibs()) { + incrementalActionBuilder.nativeLibs(nativeLibs); + } + + ruleContext.registerAction(incrementalActionBuilder.build(incrementalApk)); Artifact argsArtifact = ruleContext.getImplicitOutputArtifact(AndroidRuleClasses.MOBILE_INSTALL_ARGS); @@ -399,13 +404,15 @@ public abstract class AndroidBinary implements RuleConfiguredTargetFactory { new WriteAdbArgsAction(ruleContext.getActionOwner(), argsArtifact)); createInstallAction(ruleContext, false, fullDeployMarker, argsArtifact, - incrementalDexManifest, incrementalResourceApk.getArtifact(), incrementalApk, stubData); + incrementalDexManifest, incrementalResourceApk.getArtifact(), incrementalApk, nativeLibs, + stubData); createInstallAction(ruleContext, true, incrementalDeployMarker, argsArtifact, incrementalDexManifest, incrementalResourceApk.getArtifact(), incrementalApk, + nativeLibs, stubData); NestedSetBuilder<Artifact> splitApkSetBuilder = NestedSetBuilder.stableOrder(); @@ -546,7 +553,8 @@ public abstract class AndroidBinary implements RuleConfiguredTargetFactory { private static void createInstallAction(RuleContext ruleContext, boolean incremental, Artifact marker, Artifact argsArtifact, - Artifact dexmanifest, Artifact resourceApk, Artifact apk, Artifact stubDataFile) { + Artifact dexmanifest, Artifact resourceApk, Artifact apk, NativeLibs nativeLibs, + Artifact stubDataFile) { FilesToRunProvider adb = AndroidSdkProvider.fromRuleContext(ruleContext).getAdb(); SpawnAction.Builder builder = new SpawnAction.Builder() .setExecutable(ruleContext.getExecutablePrerequisite("$incremental_install", Mode.HOST)) @@ -577,6 +585,17 @@ public abstract class AndroidBinary implements RuleConfiguredTargetFactory { .addInputArgument(apk); } + if (ruleContext.getFragment(AndroidConfiguration.class).useIncrementalNativeLibs()) { + for (Map.Entry<String, Iterable<Artifact>> arch : nativeLibs.getMap().entrySet()) { + for (Artifact lib : arch.getValue()) { + builder + .addArgument("--native_lib") + .addArgument(arch.getKey() + ":" + lib.getExecPathString()) + .addInput(lib); + } + } + } + ruleContext.registerAction(builder.build(ruleContext)); } diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidConfiguration.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidConfiguration.java index 0383f03191..5373533105 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidConfiguration.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidConfiguration.java @@ -83,6 +83,14 @@ public class AndroidConfiguration extends BuildConfiguration.Fragment { category = "undocumented") public ConfigurationDistinguisher configurationDistinguisher; + // For deploying incremental installation of native libraries. Do not use on the command line. + // The idea is that once this option works, we'll flip the default value in a config file, then + // once it is proven that it works, remove it from Bazel and said config file. + @Option(name = "android_incremental_native_libs", + defaultValue = "false", + category = "undocumented") + public boolean incrementalNativeLibs; + @Option(name = "android_crosstool_top", defaultValue = "null", category = "semantics", @@ -227,6 +235,7 @@ public class AndroidConfiguration extends BuildConfiguration.Fragment { private final StrictDepsMode strictDeps; private final boolean legacyNativeSupport; private final String cpu; + private final boolean incrementalNativeLibs; private final boolean fatApk; private final ConfigurationDistinguisher configurationDistinguisher; private final Label proguard; @@ -235,6 +244,7 @@ public class AndroidConfiguration extends BuildConfiguration.Fragment { AndroidConfiguration(Options options) { this.sdk = options.realSdk(); + this.incrementalNativeLibs = options.incrementalNativeLibs; this.strictDeps = options.strictDeps; this.legacyNativeSupport = options.legacyNativeSupport; this.cpu = options.cpu; @@ -280,6 +290,10 @@ public class AndroidConfiguration extends BuildConfiguration.Fragment { return jackSanityChecks; } + public boolean useIncrementalNativeLibs() { + return incrementalNativeLibs; + } + @Override public void addGlobalMakeVariables(ImmutableMap.Builder<String, String> globalMakeEnvBuilder) { globalMakeEnvBuilder.put("ANDROID_CPU", cpu); |