diff options
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.java | 55 |
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() |