diff options
7 files changed, 54 insertions, 19 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 194c9245b2..dd650e04a6 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 @@ -176,14 +176,14 @@ public abstract class AndroidBinary implements RuleConfiguredTargetFactory { resourceContainers, tools, null, /* Artifact rTxt */ + null, /* Artifact symbolsTxt */ ruleContext.getTokenizedStringListAttr("resource_configuration_filters"), ruleContext.getTokenizedStringListAttr("nocompress_extensions"), ruleContext.getTokenizedStringListAttr("densities"), ruleContext.attributes().get("application_id", Type.STRING), getExpandedMakeVarsForAttr(ruleContext, "version_code"), getExpandedMakeVarsForAttr(ruleContext, "version_name"), - false, - getProguardConfigArtifact(ruleContext, "")); + false, getProguardConfigArtifact(ruleContext, "")); incrementalResourceApk = applicationManifest.addStubApplication(ruleContext) .packWithDataAndResources(ruleContext .getImplicitOutputArtifact(AndroidRuleClasses.ANDROID_INCREMENTAL_RESOURCES_APK), @@ -191,14 +191,14 @@ public abstract class AndroidBinary implements RuleConfiguredTargetFactory { resourceContainers, tools, null, /* Artifact rTxt */ + null, /* Artifact symbolsTxt */ ruleContext.getTokenizedStringListAttr("resource_configuration_filters"), ruleContext.getTokenizedStringListAttr("nocompress_extensions"), ruleContext.getTokenizedStringListAttr("densities"), ruleContext.attributes().get("application_id", Type.STRING), getExpandedMakeVarsForAttr(ruleContext, "version_code"), getExpandedMakeVarsForAttr(ruleContext, "version_name"), - true, - getProguardConfigArtifact(ruleContext, "incremental")); + true, getProguardConfigArtifact(ruleContext, "incremental")); splitResourceApk = applicationManifest .createSplitManifest(ruleContext, "android_resources", false) .packWithDataAndResources(getDxArtifact(ruleContext, "android_resources.ap_"), @@ -206,14 +206,14 @@ public abstract class AndroidBinary implements RuleConfiguredTargetFactory { resourceContainers, tools, null, /* Artifact rTxt */ + null, /* Artifact symbolsTxt */ ruleContext.getTokenizedStringListAttr("resource_configuration_filters"), ruleContext.getTokenizedStringListAttr("nocompress_extensions"), ruleContext.getTokenizedStringListAttr("densities"), ruleContext.attributes().get("application_id", Type.STRING), getExpandedMakeVarsForAttr(ruleContext, "version_code"), getExpandedMakeVarsForAttr(ruleContext, "version_name"), - true, - getProguardConfigArtifact(ruleContext, "incremental_split")); + true, getProguardConfigArtifact(ruleContext, "incremental_split")); } else { // Retrieve the resources from the resources attribute on the android_binary rule // and recompile them if necessary. diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibrary.java index 1f921f41b8..9e5559b78b 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibrary.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibrary.java @@ -87,6 +87,7 @@ public abstract class AndroidLibrary implements RuleConfiguredTargetFactory { ruleContext.getImplicitOutputArtifact(AndroidRuleClasses.ANDROID_RESOURCES_APK), ruleContext, transitiveResources, tools, ruleContext.getImplicitOutputArtifact(AndroidRuleClasses.ANDROID_R_TXT), + ruleContext.getImplicitOutputArtifact(AndroidRuleClasses.ANDROID_SYMBOLS_TXT), ImmutableList.<String>of(), /* configurationFilters */ ImmutableList.<String>of(), /* uncompressedExtensions */ ImmutableList.<String>of(), /* densities */ @@ -205,7 +206,7 @@ public abstract class AndroidLibrary implements RuleConfiguredTargetFactory { ImmutableList.<Artifact>of(), ImmutableList.<Artifact>of(), ImmutableList.<PathFragment>of(), ImmutableList.<PathFragment>of(), ruleContext.attributes().get("exports_manifest", Type.BOOLEAN), - ruleContext.getImplicitOutputArtifact(AndroidRuleClasses.ANDROID_R_TXT)); + ruleContext.getImplicitOutputArtifact(AndroidRuleClasses.ANDROID_R_TXT), null); primaryResources = new AndroidResourcesProcessorBuilder(tools, ruleContext) .setApkOut(apk) diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourceContainerBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourceContainerBuilder.java index 0a83753ded..338e424703 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourceContainerBuilder.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourceContainerBuilder.java @@ -30,6 +30,7 @@ public final class AndroidResourceContainerBuilder { private Artifact manifest; private Artifact rOutput; private boolean inlineConstants = false; + private Artifact symbolsFile; /** Provides the resources and assets for the ResourceContainer. */ public AndroidResourceContainerBuilder withData(LocalResourceContainer data) { @@ -70,7 +71,8 @@ public final class AndroidResourceContainerBuilder { data.getAssetRoots(), data.getResourceRoots(), ruleContext.attributes().get("exports_manifest", Type.BOOLEAN), - rOutput); + rOutput, + symbolsFile); } private String getJavaPackage(RuleContext ruleContext, Artifact apk) { @@ -97,4 +99,9 @@ public final class AndroidResourceContainerBuilder { ? ruleContext.attributes().get("rename_manifest_package", Type.STRING) : null; } + + public AndroidResourceContainerBuilder withSymbolsFile(Artifact symbolsFile) { + this.symbolsFile = symbolsFile; + return this; + } }
\ No newline at end of file diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourcesProcessorBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourcesProcessorBuilder.java index a7928042aa..f873e2b2d4 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourcesProcessorBuilder.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourcesProcessorBuilder.java @@ -56,6 +56,7 @@ public class AndroidResourcesProcessorBuilder { private String versionCode; private String applicationId; private String versionName; + private Artifact symbolsTxt; /** * @param androidTools A configured AndroidTools for the AndroidResourcesProcessor action. @@ -112,6 +113,11 @@ public class AndroidResourcesProcessorBuilder { return this; } + public AndroidResourcesProcessorBuilder setSymbolsTxt(Artifact symbolsTxt) { + this.symbolsTxt = symbolsTxt; + return this; + } + public AndroidResourcesProcessorBuilder setApkOut(Artifact apkOut) { this.apkOut = apkOut; return this; @@ -138,11 +144,12 @@ public class AndroidResourcesProcessorBuilder { inputs.add(container.getManifest()); inputs.add(container.getRTxt()); - args.add(String.format("%s:%s:%s:%s", + args.add(String.format("%s:%s:%s:%s:%s", convertRoots(container, ResourceType.RESOURCES), convertRoots(container, ResourceType.ASSETS), container.getManifest().getExecPathString(), - container.getRTxt() == null ? "" : container.getRTxt().getExecPath() + container.getRTxt() == null ? "" : container.getRTxt().getExecPath(), + container.getSymbolsTxt() == null ? "" : container.getSymbolsTxt().getExecPath() )); } @@ -210,6 +217,11 @@ public class AndroidResourcesProcessorBuilder { args.add("--packageType"); args.add("LIBRARY"); } + if (symbolsTxt != null) { + args.add("--symbolsTxtOut"); + args.add(symbolsTxt.getExecPathString()); + outs.add(symbolsTxt); + } if (sourceJarOut != null) { args.add("--srcJarOutput"); args.add(sourceJarOut.getExecPathString()); @@ -297,7 +309,8 @@ public class AndroidResourcesProcessorBuilder { primary.getRoots(ResourceType.ASSETS), primary.getRoots(ResourceType.RESOURCES), primary.isManifestExported(), - rTxtOut); + rTxtOut, + symbolsTxt); } public AndroidResourcesProcessorBuilder setJavaPackage(String newManifestPackage) { diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourcesProvider.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourcesProvider.java index c0e788e3b9..e3f8f23bd0 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourcesProvider.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourcesProvider.java @@ -97,6 +97,7 @@ public final class AndroidResourcesProvider implements TransitiveInfoProvider { private final boolean manifestExported; private final Artifact javaSourceJar; private final Artifact rTxt; + private Artifact symbolsTxt; public ResourceContainer(Label label, String javaPackage, @@ -110,7 +111,8 @@ public final class AndroidResourcesProvider implements TransitiveInfoProvider { ImmutableList<PathFragment> assetsRoots, ImmutableList<PathFragment> resourcesRoots, boolean manifestExported, - Artifact rTxt) { + Artifact rTxt, + Artifact symbolsTxt) { this.javaSourceJar = javaSourceJar; this.manifestExported = manifestExported; this.label = Preconditions.checkNotNull(label); @@ -124,6 +126,7 @@ public final class AndroidResourcesProvider implements TransitiveInfoProvider { this.assetsRoots = Preconditions.checkNotNull(assetsRoots); this.resourcesRoots = Preconditions.checkNotNull(resourcesRoots); this.rTxt = rTxt; + this.symbolsTxt = symbolsTxt; } public Label getLabel() { @@ -170,6 +173,11 @@ public final class AndroidResourcesProvider implements TransitiveInfoProvider { return rTxt; } + + public Artifact getSymbolsTxt() { + return symbolsTxt; + } + public ImmutableList<PathFragment> getRoots(ResourceType resourceType) { return resourceType == ResourceType.ASSETS ? assetsRoots : resourcesRoots; } diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java index f139a45097..6c72ab8b87 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java @@ -95,6 +95,8 @@ public final class AndroidRuleClasses { fromTemplates("%{name}_filtered.jar"); public static final SafeImplicitOutputsFunction ANDROID_R_TXT = fromTemplates("%{name}_symbols/R.txt"); + public static final SafeImplicitOutputsFunction ANDROID_SYMBOLS_TXT = + fromTemplates("%{name}_symbols/local-R.txt"); public static final SafeImplicitOutputsFunction STUB_APPLICATON_MANIFEST = fromTemplates("%{name}_files/stub/AndroidManifest.xml"); public static final SafeImplicitOutputsFunction FULL_DEPLOY_MARKER = diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/ApplicationManifest.java b/src/main/java/com/google/devtools/build/lib/rules/android/ApplicationManifest.java index c5aae12d47..b79f54937a 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/ApplicationManifest.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/ApplicationManifest.java @@ -222,12 +222,13 @@ public final class ApplicationManifest { resourceContainers, tools, rTxt, - ImmutableList.<String>of(), /* configurationFilters */ + null, /* configurationFilters */ ImmutableList.<String>of(), /* uncompressedExtensions */ ImmutableList.<String>of(), /* densities */ - null, /* String applicationId */ + ImmutableList.<String>of(), /* String applicationId */ null, /* String versionCode */ null, /* String versionName */ + null, /* Artifact symbolsTxt */ incremental, data, proguardCfg); @@ -244,14 +245,14 @@ public final class ApplicationManifest { NestedSet<ResourceContainer> resourceContainers, AndroidTools tools, Artifact rTxt, + Artifact symbolsTxt, List<String> configurationFilters, List<String> uncompressedExtensions, List<String> densities, String applicationId, String versionCode, String versionName, - boolean incremental, - Artifact proguardCfg) { + boolean incremental, Artifact proguardCfg) { try { LocalResourceContainer data = new LocalResourceContainer.Builder() .withAssets( @@ -272,6 +273,7 @@ public final class ApplicationManifest { resourceContainers, tools, rTxt, + symbolsTxt, configurationFilters, uncompressedExtensions, densities, @@ -295,6 +297,7 @@ public final class ApplicationManifest { NestedSet<ResourceContainer> resourceContainers, AndroidTools tools, Artifact rTxt, + Artifact symbolsTxt, List<String> configurationFilters, List<String> uncompressedExtensions, List<String> densities, @@ -302,13 +305,13 @@ public final class ApplicationManifest { String versionCode, String versionName, boolean incremental, - LocalResourceContainer data, - Artifact proguardCfg) { + LocalResourceContainer data, Artifact proguardCfg) { ResourceContainer resourceContainer = checkForInlinedResources( new AndroidResourceContainerBuilder() .withData(data) .withManifest(getManifest()) .withROutput(rTxt) + .withSymbolsFile(symbolsTxt) .buildFromRule(ruleContext, resourceApk), resourceContainers, ruleContext); @@ -332,6 +335,7 @@ public final class ApplicationManifest { if (!incremental) { builder .setRTxtOut(resourceContainer.getRTxt()) + .setSymbolsTxt(resourceContainer.getSymbolsTxt()) .setSourceJarOut(resourceContainer.getJavaSourceJar()); } @@ -472,7 +476,7 @@ public final class ApplicationManifest { resourceContainer.getRoots(ResourceType.ASSETS), resourceContainer.getRoots(ResourceType.RESOURCES), resourceContainer.isManifestExported(), - resourceContainer.getRTxt()); + resourceContainer.getRTxt(), null); aaptActionHelper.createGenerateProguardAction(proguardCfg); |