Loading android/module.go +4 −0 Original line number Diff line number Diff line Loading @@ -492,6 +492,10 @@ type commonProperties struct { // vintf_fragment Modules required from this module. Vintf_fragment_modules proptools.Configurable[[]string] `android:"path"` // List of module names that are prevented from being installed when this module gets // installed. Overrides []string } type distProperties struct { Loading android/module_context.go +9 −0 Original line number Diff line number Diff line Loading @@ -543,6 +543,7 @@ func (m *moduleContext) setAconfigPaths(paths Paths) { func (m *moduleContext) packageFile(fullInstallPath InstallPath, srcPath Path, executable bool) PackagingSpec { licenseFiles := m.Module().EffectiveLicenseFiles() overrides := CopyOf(m.Module().base().commonProperties.Overrides) spec := PackagingSpec{ relPathInPackage: Rel(m, fullInstallPath.PartitionDir(), fullInstallPath.String()), srcPath: srcPath, Loading @@ -553,6 +554,8 @@ func (m *moduleContext) packageFile(fullInstallPath InstallPath, srcPath Path, e skipInstall: m.skipInstall(), aconfigPaths: m.getAconfigPaths(), archType: m.target.Arch.ArchType, overrides: &overrides, owner: m.ModuleName(), } m.packagingSpecs = append(m.packagingSpecs, spec) return spec Loading Loading @@ -670,6 +673,7 @@ func (m *moduleContext) InstallSymlink(installPath InstallPath, name string, src m.checkbuildFiles = append(m.checkbuildFiles, srcPath) } overrides := CopyOf(m.Module().base().commonProperties.Overrides) m.packagingSpecs = append(m.packagingSpecs, PackagingSpec{ relPathInPackage: Rel(m, fullInstallPath.PartitionDir(), fullInstallPath.String()), srcPath: nil, Loading @@ -679,6 +683,8 @@ func (m *moduleContext) InstallSymlink(installPath InstallPath, name string, src skipInstall: m.skipInstall(), aconfigPaths: m.getAconfigPaths(), archType: m.target.Arch.ArchType, overrides: &overrides, owner: m.ModuleName(), }) return fullInstallPath Loading Loading @@ -714,6 +720,7 @@ func (m *moduleContext) InstallAbsoluteSymlink(installPath InstallPath, name str m.installFiles = append(m.installFiles, fullInstallPath) } overrides := CopyOf(m.Module().base().commonProperties.Overrides) m.packagingSpecs = append(m.packagingSpecs, PackagingSpec{ relPathInPackage: Rel(m, fullInstallPath.PartitionDir(), fullInstallPath.String()), srcPath: nil, Loading @@ -723,6 +730,8 @@ func (m *moduleContext) InstallAbsoluteSymlink(installPath InstallPath, name str skipInstall: m.skipInstall(), aconfigPaths: m.getAconfigPaths(), archType: m.target.Arch.ArchType, overrides: &overrides, owner: m.ModuleName(), }) return fullInstallPath Loading android/neverallow.go +1 −0 Original line number Diff line number Diff line Loading @@ -182,6 +182,7 @@ func createCcSdkVariantRules() []Rule { "packages/modules/SdkExtensions/derive_sdk", // These are for apps and shouldn't be used by non-SDK variant modules. "prebuilts/ndk", "frameworks/native/libs/binder/ndk", "tools/test/graphicsbenchmark/apps/sample_app", "tools/test/graphicsbenchmark/functional_tests/java", "vendor/xts/gts-tests/hostsidetests/gamedevicecert/apps/javatests", Loading android/packaging.go +34 −9 Original line number Diff line number Diff line Loading @@ -56,6 +56,12 @@ type PackagingSpec struct { // ArchType of the module which produced this packaging spec archType ArchType // List of module names that this packaging spec overrides overrides *[]string // Name of the module where this packaging spec is output of owner string } func (p *PackagingSpec) Equals(other *PackagingSpec) bool { Loading Loading @@ -325,7 +331,10 @@ func (p *PackagingBase) AddDeps(ctx BottomUpMutatorContext, depTag blueprint.Dep } func (p *PackagingBase) GatherPackagingSpecsWithFilter(ctx ModuleContext, filter func(PackagingSpec) bool) map[string]PackagingSpec { m := make(map[string]PackagingSpec) // all packaging specs gathered from the dep. var all []PackagingSpec // list of module names overridden var overridden []string var arches []ArchType for _, target := range getSupportedTargets(ctx) { Loading Loading @@ -357,6 +366,24 @@ func (p *PackagingBase) GatherPackagingSpecsWithFilter(ctx ModuleContext, filter continue } } all = append(all, ps) if ps.overrides != nil { overridden = append(overridden, *ps.overrides...) } } }) // all minus packaging specs that are overridden var filtered []PackagingSpec for _, ps := range all { if ps.owner != "" && InList(ps.owner, overridden) { continue } filtered = append(filtered, ps) } m := make(map[string]PackagingSpec) for _, ps := range filtered { dstPath := ps.relPathInPackage if existingPs, ok := m[dstPath]; ok { if !existingPs.Equals(&ps) { Loading @@ -364,10 +391,8 @@ func (p *PackagingBase) GatherPackagingSpecsWithFilter(ctx ModuleContext, filter } continue } m[dstPath] = ps } }) return m } Loading android/packaging_test.go +62 −0 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ type componentTestModule struct { props struct { Deps []string Skip_install *bool Overrides []string } } Loading Loading @@ -650,3 +651,64 @@ func TestPrefer32Deps(t *testing.T) { runPackagingTest(t, config, bp, tc.expected) } } func TestOverrides(t *testing.T) { bpTemplate := ` component { name: "foo", deps: ["bar"], } component { name: "bar", } component { name: "bar_override", overrides: ["bar"], } component { name: "baz", deps: ["bar_override"], } package_module { name: "package", deps: %DEPS%, } ` testcases := []struct { deps []string expected []string }{ { deps: []string{"foo"}, expected: []string{"lib64/foo", "lib64/bar"}, }, { deps: []string{"foo", "bar_override"}, expected: []string{"lib64/foo", "lib64/bar_override"}, }, { deps: []string{"foo", "bar", "bar_override"}, expected: []string{"lib64/foo", "lib64/bar_override"}, }, { deps: []string{"bar", "bar_override"}, expected: []string{"lib64/bar_override"}, }, { deps: []string{"foo", "baz"}, expected: []string{"lib64/foo", "lib64/baz", "lib64/bar_override"}, }, } for _, tc := range testcases { config := testConfig{ multiTarget: true, depsCollectFirstTargetOnly: false, } bp := strings.Replace(bpTemplate, "%DEPS%", `["`+strings.Join(tc.deps, `", "`)+`"]`, -1) runPackagingTest(t, config, bp, tc.expected) } } Loading
android/module.go +4 −0 Original line number Diff line number Diff line Loading @@ -492,6 +492,10 @@ type commonProperties struct { // vintf_fragment Modules required from this module. Vintf_fragment_modules proptools.Configurable[[]string] `android:"path"` // List of module names that are prevented from being installed when this module gets // installed. Overrides []string } type distProperties struct { Loading
android/module_context.go +9 −0 Original line number Diff line number Diff line Loading @@ -543,6 +543,7 @@ func (m *moduleContext) setAconfigPaths(paths Paths) { func (m *moduleContext) packageFile(fullInstallPath InstallPath, srcPath Path, executable bool) PackagingSpec { licenseFiles := m.Module().EffectiveLicenseFiles() overrides := CopyOf(m.Module().base().commonProperties.Overrides) spec := PackagingSpec{ relPathInPackage: Rel(m, fullInstallPath.PartitionDir(), fullInstallPath.String()), srcPath: srcPath, Loading @@ -553,6 +554,8 @@ func (m *moduleContext) packageFile(fullInstallPath InstallPath, srcPath Path, e skipInstall: m.skipInstall(), aconfigPaths: m.getAconfigPaths(), archType: m.target.Arch.ArchType, overrides: &overrides, owner: m.ModuleName(), } m.packagingSpecs = append(m.packagingSpecs, spec) return spec Loading Loading @@ -670,6 +673,7 @@ func (m *moduleContext) InstallSymlink(installPath InstallPath, name string, src m.checkbuildFiles = append(m.checkbuildFiles, srcPath) } overrides := CopyOf(m.Module().base().commonProperties.Overrides) m.packagingSpecs = append(m.packagingSpecs, PackagingSpec{ relPathInPackage: Rel(m, fullInstallPath.PartitionDir(), fullInstallPath.String()), srcPath: nil, Loading @@ -679,6 +683,8 @@ func (m *moduleContext) InstallSymlink(installPath InstallPath, name string, src skipInstall: m.skipInstall(), aconfigPaths: m.getAconfigPaths(), archType: m.target.Arch.ArchType, overrides: &overrides, owner: m.ModuleName(), }) return fullInstallPath Loading Loading @@ -714,6 +720,7 @@ func (m *moduleContext) InstallAbsoluteSymlink(installPath InstallPath, name str m.installFiles = append(m.installFiles, fullInstallPath) } overrides := CopyOf(m.Module().base().commonProperties.Overrides) m.packagingSpecs = append(m.packagingSpecs, PackagingSpec{ relPathInPackage: Rel(m, fullInstallPath.PartitionDir(), fullInstallPath.String()), srcPath: nil, Loading @@ -723,6 +730,8 @@ func (m *moduleContext) InstallAbsoluteSymlink(installPath InstallPath, name str skipInstall: m.skipInstall(), aconfigPaths: m.getAconfigPaths(), archType: m.target.Arch.ArchType, overrides: &overrides, owner: m.ModuleName(), }) return fullInstallPath Loading
android/neverallow.go +1 −0 Original line number Diff line number Diff line Loading @@ -182,6 +182,7 @@ func createCcSdkVariantRules() []Rule { "packages/modules/SdkExtensions/derive_sdk", // These are for apps and shouldn't be used by non-SDK variant modules. "prebuilts/ndk", "frameworks/native/libs/binder/ndk", "tools/test/graphicsbenchmark/apps/sample_app", "tools/test/graphicsbenchmark/functional_tests/java", "vendor/xts/gts-tests/hostsidetests/gamedevicecert/apps/javatests", Loading
android/packaging.go +34 −9 Original line number Diff line number Diff line Loading @@ -56,6 +56,12 @@ type PackagingSpec struct { // ArchType of the module which produced this packaging spec archType ArchType // List of module names that this packaging spec overrides overrides *[]string // Name of the module where this packaging spec is output of owner string } func (p *PackagingSpec) Equals(other *PackagingSpec) bool { Loading Loading @@ -325,7 +331,10 @@ func (p *PackagingBase) AddDeps(ctx BottomUpMutatorContext, depTag blueprint.Dep } func (p *PackagingBase) GatherPackagingSpecsWithFilter(ctx ModuleContext, filter func(PackagingSpec) bool) map[string]PackagingSpec { m := make(map[string]PackagingSpec) // all packaging specs gathered from the dep. var all []PackagingSpec // list of module names overridden var overridden []string var arches []ArchType for _, target := range getSupportedTargets(ctx) { Loading Loading @@ -357,6 +366,24 @@ func (p *PackagingBase) GatherPackagingSpecsWithFilter(ctx ModuleContext, filter continue } } all = append(all, ps) if ps.overrides != nil { overridden = append(overridden, *ps.overrides...) } } }) // all minus packaging specs that are overridden var filtered []PackagingSpec for _, ps := range all { if ps.owner != "" && InList(ps.owner, overridden) { continue } filtered = append(filtered, ps) } m := make(map[string]PackagingSpec) for _, ps := range filtered { dstPath := ps.relPathInPackage if existingPs, ok := m[dstPath]; ok { if !existingPs.Equals(&ps) { Loading @@ -364,10 +391,8 @@ func (p *PackagingBase) GatherPackagingSpecsWithFilter(ctx ModuleContext, filter } continue } m[dstPath] = ps } }) return m } Loading
android/packaging_test.go +62 −0 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ type componentTestModule struct { props struct { Deps []string Skip_install *bool Overrides []string } } Loading Loading @@ -650,3 +651,64 @@ func TestPrefer32Deps(t *testing.T) { runPackagingTest(t, config, bp, tc.expected) } } func TestOverrides(t *testing.T) { bpTemplate := ` component { name: "foo", deps: ["bar"], } component { name: "bar", } component { name: "bar_override", overrides: ["bar"], } component { name: "baz", deps: ["bar_override"], } package_module { name: "package", deps: %DEPS%, } ` testcases := []struct { deps []string expected []string }{ { deps: []string{"foo"}, expected: []string{"lib64/foo", "lib64/bar"}, }, { deps: []string{"foo", "bar_override"}, expected: []string{"lib64/foo", "lib64/bar_override"}, }, { deps: []string{"foo", "bar", "bar_override"}, expected: []string{"lib64/foo", "lib64/bar_override"}, }, { deps: []string{"bar", "bar_override"}, expected: []string{"lib64/bar_override"}, }, { deps: []string{"foo", "baz"}, expected: []string{"lib64/foo", "lib64/baz", "lib64/bar_override"}, }, } for _, tc := range testcases { config := testConfig{ multiTarget: true, depsCollectFirstTargetOnly: false, } bp := strings.Replace(bpTemplate, "%DEPS%", `["`+strings.Join(tc.deps, `", "`)+`"]`, -1) runPackagingTest(t, config, bp, tc.expected) } }