aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSkylarkData.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/android/AndroidSkylarkData.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidSkylarkData.java55
1 files changed, 48 insertions, 7 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSkylarkData.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSkylarkData.java
index d0c3819e41..3566594fa1 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSkylarkData.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSkylarkData.java
@@ -24,6 +24,7 @@ import com.google.devtools.build.lib.events.Location;
import com.google.devtools.build.lib.packages.NativeInfo;
import com.google.devtools.build.lib.packages.NativeProvider;
import com.google.devtools.build.lib.packages.RuleClass.ConfiguredTargetFactory.RuleErrorException;
+import com.google.devtools.build.lib.rules.android.AndroidConfiguration.AndroidAaptVersion;
import com.google.devtools.build.lib.rules.android.AndroidLibraryAarInfo.Aar;
import com.google.devtools.build.lib.rules.java.JavaCompilationInfoProvider;
import com.google.devtools.build.lib.rules.java.JavaInfo;
@@ -116,7 +117,19 @@ public class AndroidSkylarkData {
named = true,
doc =
"Defaults to False. If true, resources will not be exposed to targets that depend"
- + " on them.")
+ + " on them."),
+ @Param(
+ name = "custom_package",
+ positional = false,
+ defaultValue = "None",
+ type = String.class,
+ noneable = true,
+ named = true,
+ doc =
+ "The Android application package to stamp the manifest with. If not provided, the"
+ + " current Java package, derived from the location of this target's BUILD"
+ + " file, will be used. For example, given a BUILD file in"
+ + " 'java/com/foo/bar/BUILD', the package would be 'com.foo.bar'."),
},
doc =
"Creates an AndroidResourcesInfo from this target's resource dependencies, ignoring local"
@@ -125,13 +138,20 @@ public class AndroidSkylarkData {
+ " manifest will be generated and included in the provider - this path should not"
+ " be used when an explicit manifest is specified.")
public static AndroidResourcesInfo resourcesFromDeps(
- SkylarkRuleContext ctx, SkylarkList<AndroidResourcesInfo> deps, boolean neverlink)
+ SkylarkRuleContext ctx,
+ SkylarkList<AndroidResourcesInfo> deps,
+ boolean neverlink,
+ Object customPackage)
throws EvalException, InterruptedException {
+ String pkg = fromNoneable(customPackage, String.class);
+ if (pkg == null) {
+ pkg = AndroidManifest.getDefaultPackage(ctx.getRuleContext());
+ }
return ResourceApk.processFromTransitiveLibraryData(
ctx.getRuleContext(),
ResourceDependencies.fromProviders(deps, /* neverlink = */ neverlink),
AssetDependencies.empty(),
- StampedAndroidManifest.createEmpty(ctx.getRuleContext(), /* exported = */ false))
+ StampedAndroidManifest.createEmpty(ctx.getRuleContext(), pkg, /* exported = */ false))
.toResourceInfo(ctx.getLabel());
}
@@ -315,6 +335,15 @@ public class AndroidSkylarkData {
doc =
"Defaults to False. If passed as True, these resources will not be inherited by"
+ " targets that depend on this one."),
+ @Param(
+ name = "enable_data_binding",
+ positional = false,
+ defaultValue = "False",
+ type = Boolean.class,
+ named = true,
+ doc =
+ "Defaults to False. If True, processes data binding expressions in layout"
+ + " resources."),
},
doc =
"Merges this target's resources together with resources inherited from dependencies."
@@ -330,7 +359,8 @@ public class AndroidSkylarkData {
AndroidManifestInfo manifest,
SkylarkList<ConfiguredTarget> resources,
SkylarkList<AndroidResourcesInfo> deps,
- boolean neverlink)
+ boolean neverlink,
+ boolean enableDataBinding)
throws EvalException, InterruptedException {
ImmutableList<FileProvider> fileProviders =
@@ -341,11 +371,22 @@ public class AndroidSkylarkData {
.collect(ImmutableList.toImmutableList());
try {
+ AndroidAaptVersion aaptVersion =
+ AndroidCommon.getAndroidConfig(ctx.getRuleContext()).getAndroidAaptVersion();
+
ValidatedAndroidResources validated =
AndroidResources.from(ctx.getRuleContext(), fileProviders, "resources")
- .parse(ctx.getRuleContext(), manifest.asStampedManifest())
- .merge(ctx.getRuleContext(), ResourceDependencies.fromProviders(deps, neverlink))
- .validate(ctx.getRuleContext());
+ .parse(
+ ctx.getRuleContext(),
+ manifest.asStampedManifest(),
+ enableDataBinding,
+ aaptVersion)
+ .merge(
+ ctx.getRuleContext(),
+ ResourceDependencies.fromProviders(deps, neverlink),
+ enableDataBinding,
+ aaptVersion)
+ .validate(ctx.getRuleContext(), aaptVersion);
JavaInfo javaInfo =
JavaInfo.Builder.create()