bp2build support for framework-res
Change-Id: I5b32a702e02b5f1ec08d5608d766a8a0c08d845c
Bug: 276928228
Bug: 297356405
diff --git a/bp2build/android_app_conversion_test.go b/bp2build/android_app_conversion_test.go
index 8ec4b35..afe6dcd 100644
--- a/bp2build/android_app_conversion_test.go
+++ b/bp2build/android_app_conversion_test.go
@@ -478,3 +478,41 @@
}),
}})
}
+
+func TestFrameworkResConversion(t *testing.T) {
+ runAndroidAppTestCase(t, Bp2buildTestCase{
+ Description: "Framework Res custom conversion",
+ ModuleTypeUnderTest: "android_app",
+ ModuleTypeUnderTestFactory: java.AndroidAppFactory,
+ Filesystem: map[string]string{
+ "res/values/attrs.xml": "",
+ "resource_zip.zip": "",
+ },
+ Blueprint: `
+android_app {
+ name: "framework-res",
+ resource_zips: [
+ "resource_zip.zip",
+ ],
+ certificate: "platform",
+}
+
+filegroup {
+ name: "framework-res-package-jar",
+ srcs: [":framework-res{.export-package.apk}"],
+}
+`,
+ ExpectedBazelTargets: []string{
+ MakeBazelTarget("framework_resources", "framework-res", AttrNameToString{
+ "certificate_name": `"platform"`,
+ "manifest": `"AndroidManifest.xml"`,
+ "resource_files": `["res/values/attrs.xml"]`,
+ "resource_zips": `["resource_zip.zip"]`,
+ "target_compatible_with": `["//build/bazel/platforms/os:android"]`,
+ }),
+ MakeBazelTargetNoRestrictions("filegroup", "framework-res-package-jar", AttrNameToString{
+ "srcs": `[":framework-res.export-package.apk"]`,
+ }),
+ }})
+
+}
diff --git a/bp2build/bp2build_product_config.go b/bp2build/bp2build_product_config.go
index b724f57..091a5f3 100644
--- a/bp2build/bp2build_product_config.go
+++ b/bp2build/bp2build_product_config.go
@@ -267,11 +267,22 @@
defaultAppCertificateFilegroup = "@//" + filepath.Dir(proptools.String(productVariables.DefaultAppCertificate)) + ":generated_android_certificate_directory"
}
+ // TODO: b/301598690 - commas can't be escaped in a string-list passed in a platform mapping,
+ // so commas are switched for ":" here, and must be back-substituted into commas
+ // wherever the AAPTCharacteristics product config variable is used.
+ AAPTConfig := []string{}
+ for _, conf := range productVariables.AAPTConfig {
+ AAPTConfig = append(AAPTConfig, strings.Replace(conf, ",", ":", -1))
+ }
+
for _, suffix := range bazelPlatformSuffixes {
result.WriteString(" ")
result.WriteString(label.String())
result.WriteString(suffix)
result.WriteString("\n")
+ result.WriteString(fmt.Sprintf(" --//build/bazel/product_config:aapt_characteristics=%s\n", proptools.String(productVariables.AAPTCharacteristics)))
+ result.WriteString(fmt.Sprintf(" --//build/bazel/product_config:aapt_config=%s\n", strings.Join(AAPTConfig, ",")))
+ result.WriteString(fmt.Sprintf(" --//build/bazel/product_config:aapt_preferred_config=%s\n", proptools.String(productVariables.AAPTPreferredConfig)))
result.WriteString(fmt.Sprintf(" --//build/bazel/product_config:always_use_prebuilt_sdks=%t\n", proptools.Bool(productVariables.Always_use_prebuilt_sdks)))
result.WriteString(fmt.Sprintf(" --//build/bazel/product_config:arc=%t\n", proptools.Bool(productVariables.Arc)))
result.WriteString(fmt.Sprintf(" --//build/bazel/product_config:apex_global_min_sdk_version_override=%s\n", proptools.String(productVariables.ApexGlobalMinSdkVersionOverride)))