Loading java/aar.go +7 −1 Original line number Diff line number Diff line Loading @@ -134,6 +134,10 @@ type aapt struct { resourcesNodesDepSet *android.DepSet[*resourcesNode] rroDirsDepSet *android.DepSet[rroDir] manifestsDepSet *android.DepSet[android.Path] manifestValues struct { applicationId string } } type split struct { Loading Loading @@ -380,7 +384,9 @@ func (a *aapt) buildActions(ctx android.ModuleContext, opts aaptBuildActionOptio if len(transitiveManifestPaths) > 1 && !Bool(a.aaptProperties.Dont_merge_manifests) { manifestMergerParams := ManifestMergerParams{ staticLibManifests: transitiveManifestPaths[1:], isLibrary: a.isLibrary} isLibrary: a.isLibrary, packageName: a.manifestValues.applicationId, } a.mergedManifestFile = manifestMerger(ctx, transitiveManifestPaths[0], manifestMergerParams) if !a.isLibrary { // Only use the merged manifest for applications. For libraries, the transitive closure of manifests Loading java/android_manifest.go +9 −3 Original line number Diff line number Diff line Loading @@ -203,15 +203,21 @@ func ManifestFixer(ctx android.ModuleContext, manifest android.Path, type ManifestMergerParams struct { staticLibManifests android.Paths isLibrary bool packageName string } func manifestMerger(ctx android.ModuleContext, manifest android.Path, params ManifestMergerParams) android.Path { var args string var args []string if !params.isLibrary { // Follow Gradle's behavior, only pass --remove-tools-declarations when merging app manifests. args = "--remove-tools-declarations" args = append(args, "--remove-tools-declarations") } packageName := params.packageName if packageName != "" { args = append(args, "--property PACKAGE="+packageName) } mergedManifest := android.PathForModuleOut(ctx, "manifest_merger", "AndroidManifest.xml") Loading @@ -223,7 +229,7 @@ func manifestMerger(ctx android.ModuleContext, manifest android.Path, Output: mergedManifest, Args: map[string]string{ "libs": android.JoinWithPrefix(params.staticLibManifests.Strings(), "--libs "), "args": args, "args": strings.Join(args, " "), }, }) Loading java/android_manifest_test.go +40 −1 Original line number Diff line number Diff line Loading @@ -15,8 +15,9 @@ package java import ( "android/soong/android" "testing" "android/soong/android" ) func TestManifestMerger(t *testing.T) { Loading Loading @@ -101,3 +102,41 @@ func TestManifestMerger(t *testing.T) { }, manifestMergerRule.Implicits) } func TestManifestValuesApplicationIdSetsPackageName(t *testing.T) { bp := ` android_test { name: "test", sdk_version: "current", srcs: ["app/app.java"], manifest: "test/AndroidManifest.xml", additional_manifests: ["test/AndroidManifest2.xml"], static_libs: ["direct"], test_suites: ["device-tests"], manifest_values: { applicationId: "new_package_name" }, } android_library { name: "direct", sdk_version: "current", srcs: ["direct/direct.java"], resource_dirs: ["direct/res"], manifest: "direct/AndroidManifest.xml", additional_manifests: ["direct/AndroidManifest2.xml"], } ` result := android.GroupFixturePreparers( PrepareForTestWithJavaDefaultModules, PrepareForTestWithOverlayBuildComponents, ).RunTestWithBp(t, bp) manifestMergerRule := result.ModuleForTests("test", "android_common").Rule("manifestMerger") android.AssertStringMatches(t, "manifest merger args", manifestMergerRule.Args["args"], "--property PACKAGE=new_package_name") } java/app.go +24 −0 Original line number Diff line number Diff line Loading @@ -308,6 +308,13 @@ func (a *AndroidApp) OverridablePropertiesDepsMutator(ctx android.BottomUpMutato } func (a *AndroidTestHelperApp) GenerateAndroidBuildActions(ctx android.ModuleContext) { applicationId := a.appTestHelperAppProperties.Manifest_values.ApplicationId if applicationId != nil { if a.overridableAppProperties.Package_name != nil { ctx.PropertyErrorf("manifest_values.applicationId", "property is not supported when property package_name is set.") } a.aapt.manifestValues.applicationId = *applicationId } a.generateAndroidBuildActions(ctx) } Loading Loading @@ -1107,6 +1114,12 @@ func AndroidAppFactory() android.Module { return module } // A dictionary of values to be overridden in the manifest. type Manifest_values struct { // Overrides the value of package_name in the manifest ApplicationId *string } type appTestProperties struct { // The name of the android_app module that the tests will run against. Instrumentation_for *string Loading @@ -1116,6 +1129,8 @@ type appTestProperties struct { // If specified, the mainline module package name in the test config is overwritten by it. Mainline_package_name *string Manifest_values Manifest_values } type AndroidTest struct { Loading Loading @@ -1160,6 +1175,13 @@ func (a *AndroidTest) GenerateAndroidBuildActions(ctx android.ModuleContext) { a.additionalAaptFlags = append(a.additionalAaptFlags, "--rename-instrumentation-target-package "+manifestPackageName) } } applicationId := a.appTestProperties.Manifest_values.ApplicationId if applicationId != nil { if a.overridableAppProperties.Package_name != nil { ctx.PropertyErrorf("manifest_values.applicationId", "property is not supported when property package_name is set.") } a.aapt.manifestValues.applicationId = *applicationId } a.generateAndroidBuildActions(ctx) for _, module := range a.testProperties.Test_mainline_modules { Loading Loading @@ -1264,6 +1286,8 @@ type appTestHelperAppProperties struct { // Install the test into a folder named for the module in all test suites. Per_testcase_directory *bool Manifest_values Manifest_values } type AndroidTestHelperApp struct { Loading Loading
java/aar.go +7 −1 Original line number Diff line number Diff line Loading @@ -134,6 +134,10 @@ type aapt struct { resourcesNodesDepSet *android.DepSet[*resourcesNode] rroDirsDepSet *android.DepSet[rroDir] manifestsDepSet *android.DepSet[android.Path] manifestValues struct { applicationId string } } type split struct { Loading Loading @@ -380,7 +384,9 @@ func (a *aapt) buildActions(ctx android.ModuleContext, opts aaptBuildActionOptio if len(transitiveManifestPaths) > 1 && !Bool(a.aaptProperties.Dont_merge_manifests) { manifestMergerParams := ManifestMergerParams{ staticLibManifests: transitiveManifestPaths[1:], isLibrary: a.isLibrary} isLibrary: a.isLibrary, packageName: a.manifestValues.applicationId, } a.mergedManifestFile = manifestMerger(ctx, transitiveManifestPaths[0], manifestMergerParams) if !a.isLibrary { // Only use the merged manifest for applications. For libraries, the transitive closure of manifests Loading
java/android_manifest.go +9 −3 Original line number Diff line number Diff line Loading @@ -203,15 +203,21 @@ func ManifestFixer(ctx android.ModuleContext, manifest android.Path, type ManifestMergerParams struct { staticLibManifests android.Paths isLibrary bool packageName string } func manifestMerger(ctx android.ModuleContext, manifest android.Path, params ManifestMergerParams) android.Path { var args string var args []string if !params.isLibrary { // Follow Gradle's behavior, only pass --remove-tools-declarations when merging app manifests. args = "--remove-tools-declarations" args = append(args, "--remove-tools-declarations") } packageName := params.packageName if packageName != "" { args = append(args, "--property PACKAGE="+packageName) } mergedManifest := android.PathForModuleOut(ctx, "manifest_merger", "AndroidManifest.xml") Loading @@ -223,7 +229,7 @@ func manifestMerger(ctx android.ModuleContext, manifest android.Path, Output: mergedManifest, Args: map[string]string{ "libs": android.JoinWithPrefix(params.staticLibManifests.Strings(), "--libs "), "args": args, "args": strings.Join(args, " "), }, }) Loading
java/android_manifest_test.go +40 −1 Original line number Diff line number Diff line Loading @@ -15,8 +15,9 @@ package java import ( "android/soong/android" "testing" "android/soong/android" ) func TestManifestMerger(t *testing.T) { Loading Loading @@ -101,3 +102,41 @@ func TestManifestMerger(t *testing.T) { }, manifestMergerRule.Implicits) } func TestManifestValuesApplicationIdSetsPackageName(t *testing.T) { bp := ` android_test { name: "test", sdk_version: "current", srcs: ["app/app.java"], manifest: "test/AndroidManifest.xml", additional_manifests: ["test/AndroidManifest2.xml"], static_libs: ["direct"], test_suites: ["device-tests"], manifest_values: { applicationId: "new_package_name" }, } android_library { name: "direct", sdk_version: "current", srcs: ["direct/direct.java"], resource_dirs: ["direct/res"], manifest: "direct/AndroidManifest.xml", additional_manifests: ["direct/AndroidManifest2.xml"], } ` result := android.GroupFixturePreparers( PrepareForTestWithJavaDefaultModules, PrepareForTestWithOverlayBuildComponents, ).RunTestWithBp(t, bp) manifestMergerRule := result.ModuleForTests("test", "android_common").Rule("manifestMerger") android.AssertStringMatches(t, "manifest merger args", manifestMergerRule.Args["args"], "--property PACKAGE=new_package_name") }
java/app.go +24 −0 Original line number Diff line number Diff line Loading @@ -308,6 +308,13 @@ func (a *AndroidApp) OverridablePropertiesDepsMutator(ctx android.BottomUpMutato } func (a *AndroidTestHelperApp) GenerateAndroidBuildActions(ctx android.ModuleContext) { applicationId := a.appTestHelperAppProperties.Manifest_values.ApplicationId if applicationId != nil { if a.overridableAppProperties.Package_name != nil { ctx.PropertyErrorf("manifest_values.applicationId", "property is not supported when property package_name is set.") } a.aapt.manifestValues.applicationId = *applicationId } a.generateAndroidBuildActions(ctx) } Loading Loading @@ -1107,6 +1114,12 @@ func AndroidAppFactory() android.Module { return module } // A dictionary of values to be overridden in the manifest. type Manifest_values struct { // Overrides the value of package_name in the manifest ApplicationId *string } type appTestProperties struct { // The name of the android_app module that the tests will run against. Instrumentation_for *string Loading @@ -1116,6 +1129,8 @@ type appTestProperties struct { // If specified, the mainline module package name in the test config is overwritten by it. Mainline_package_name *string Manifest_values Manifest_values } type AndroidTest struct { Loading Loading @@ -1160,6 +1175,13 @@ func (a *AndroidTest) GenerateAndroidBuildActions(ctx android.ModuleContext) { a.additionalAaptFlags = append(a.additionalAaptFlags, "--rename-instrumentation-target-package "+manifestPackageName) } } applicationId := a.appTestProperties.Manifest_values.ApplicationId if applicationId != nil { if a.overridableAppProperties.Package_name != nil { ctx.PropertyErrorf("manifest_values.applicationId", "property is not supported when property package_name is set.") } a.aapt.manifestValues.applicationId = *applicationId } a.generateAndroidBuildActions(ctx) for _, module := range a.testProperties.Test_mainline_modules { Loading Loading @@ -1264,6 +1286,8 @@ type appTestHelperAppProperties struct { // Install the test into a folder named for the module in all test suites. Per_testcase_directory *bool Manifest_values Manifest_values } type AndroidTestHelperApp struct { Loading