Loading apex/androidmk.go +19 −6 Original line number Diff line number Diff line Loading @@ -42,7 +42,11 @@ func (a *apexBundle) AndroidMk() android.AndroidMkData { }} } func (a *apexBundle) androidMkForFiles(w io.Writer, apexName, moduleDir string) []string { func (a *apexBundle) androidMkForFiles(w io.Writer, apexBundleName, apexName, moduleDir string) []string { // apexBundleName comes from the 'name' property; apexName comes from 'apex_name' property. // An apex is installed to /system/apex/<apexBundleName> and is activated at /apex/<apexName> // In many cases, the two names are the same, but could be different in general. moduleNames := []string{} apexType := a.properties.ApexType // To avoid creating duplicate build rules, run this function only when primaryApexType is true Loading @@ -52,12 +56,21 @@ func (a *apexBundle) androidMkForFiles(w io.Writer, apexName, moduleDir string) return moduleNames } // b/140136207. When there are overriding APEXes for a VNDK APEX, the symbols file for the overridden // APEX and the overriding APEX will have the same installation paths at /apex/com.android.vndk.v<ver> // as their apexName will be the same. To avoid the path conflicts, skip installing the symbol files // for the overriding VNDK APEXes. symbolFilesNotNeeded := a.vndkApex && len(a.overridableProperties.Overrides) > 0 if symbolFilesNotNeeded && apexType != flattenedApex { return moduleNames } var postInstallCommands []string for _, fi := range a.filesInfo { if a.linkToSystemLib && fi.transitiveDep && fi.AvailableToPlatform() { // TODO(jiyong): pathOnDevice should come from fi.module, not being calculated here linkTarget := filepath.Join("/system", fi.Path()) linkPath := filepath.Join(a.installDir.ToMakePath().String(), apexName, fi.Path()) linkPath := filepath.Join(a.installDir.ToMakePath().String(), apexBundleName, fi.Path()) mkdirCmd := "mkdir -p " + filepath.Dir(linkPath) linkCmd := "ln -sfn " + linkTarget + " " + linkPath postInstallCommands = append(postInstallCommands, mkdirCmd, linkCmd) Loading @@ -75,7 +88,7 @@ func (a *apexBundle) androidMkForFiles(w io.Writer, apexName, moduleDir string) if linkToSystemLib { moduleName = fi.moduleName } else { moduleName = fi.moduleName + "." + apexName + a.suffix moduleName = fi.moduleName + "." + apexBundleName + a.suffix } if !android.InList(moduleName, moduleNames) { Loading @@ -99,8 +112,8 @@ func (a *apexBundle) androidMkForFiles(w io.Writer, apexName, moduleDir string) if apexType == flattenedApex { // /system/apex/<name>/{lib|framework|...} fmt.Fprintln(w, "LOCAL_MODULE_PATH :=", filepath.Join(a.installDir.ToMakePath().String(), apexName, fi.installDir)) if a.primaryApexType { apexBundleName, fi.installDir)) if a.primaryApexType && !symbolFilesNotNeeded { fmt.Fprintln(w, "LOCAL_SOONG_SYMBOL_PATH :=", pathWhenActivated) } if len(fi.symlinks) > 0 { Loading Loading @@ -236,7 +249,7 @@ func (a *apexBundle) androidMkForType() android.AndroidMkData { apexType := a.properties.ApexType if a.installable() { apexName := proptools.StringDefault(a.properties.Apex_name, name) moduleNames = a.androidMkForFiles(w, apexName, moduleDir) moduleNames = a.androidMkForFiles(w, name, apexName, moduleDir) } if apexType == flattenedApex { Loading apex/apex_test.go +23 −1 Original line number Diff line number Diff line Loading @@ -2210,11 +2210,12 @@ func TestDependenciesInApexManifest(t *testing.T) { } func TestApexName(t *testing.T) { ctx, _ := testApex(t, ` ctx, config := testApex(t, ` apex { name: "myapex", key: "myapex.key", apex_name: "com.android.myapex", native_shared_libs: ["mylib"], } apex_key { Loading @@ -2222,6 +2223,17 @@ func TestApexName(t *testing.T) { public_key: "testkey.avbpubkey", private_key: "testkey.pem", } cc_library { name: "mylib", srcs: ["mylib.cpp"], system_shared_libs: [], stl: "none", apex_available: [ "//apex_available:platform", "myapex", ], } `) module := ctx.ModuleForTests("myapex", "android_common_myapex_image") Loading @@ -2229,6 +2241,16 @@ func TestApexName(t *testing.T) { ensureContains(t, apexManifestRule.Args["opt"], "-v name com.android.myapex") apexRule := module.Rule("apexRule") ensureContains(t, apexRule.Args["opt_flags"], "--do_not_check_keyname") apexBundle := ctx.ModuleForTests("myapex", "android_common_myapex_image").Module().(*apexBundle) data := android.AndroidMkDataForTest(t, config, "", apexBundle) name := apexBundle.BaseModuleName() prefix := "TARGET_" var builder strings.Builder data.Custom(&builder, name, prefix, "", data) androidMk := builder.String() ensureContains(t, androidMk, "LOCAL_MODULE := mylib.myapex\n") ensureNotContains(t, androidMk, "LOCAL_MODULE := mylib.com.android.myapex\n") } func TestNonTestApex(t *testing.T) { Loading Loading
apex/androidmk.go +19 −6 Original line number Diff line number Diff line Loading @@ -42,7 +42,11 @@ func (a *apexBundle) AndroidMk() android.AndroidMkData { }} } func (a *apexBundle) androidMkForFiles(w io.Writer, apexName, moduleDir string) []string { func (a *apexBundle) androidMkForFiles(w io.Writer, apexBundleName, apexName, moduleDir string) []string { // apexBundleName comes from the 'name' property; apexName comes from 'apex_name' property. // An apex is installed to /system/apex/<apexBundleName> and is activated at /apex/<apexName> // In many cases, the two names are the same, but could be different in general. moduleNames := []string{} apexType := a.properties.ApexType // To avoid creating duplicate build rules, run this function only when primaryApexType is true Loading @@ -52,12 +56,21 @@ func (a *apexBundle) androidMkForFiles(w io.Writer, apexName, moduleDir string) return moduleNames } // b/140136207. When there are overriding APEXes for a VNDK APEX, the symbols file for the overridden // APEX and the overriding APEX will have the same installation paths at /apex/com.android.vndk.v<ver> // as their apexName will be the same. To avoid the path conflicts, skip installing the symbol files // for the overriding VNDK APEXes. symbolFilesNotNeeded := a.vndkApex && len(a.overridableProperties.Overrides) > 0 if symbolFilesNotNeeded && apexType != flattenedApex { return moduleNames } var postInstallCommands []string for _, fi := range a.filesInfo { if a.linkToSystemLib && fi.transitiveDep && fi.AvailableToPlatform() { // TODO(jiyong): pathOnDevice should come from fi.module, not being calculated here linkTarget := filepath.Join("/system", fi.Path()) linkPath := filepath.Join(a.installDir.ToMakePath().String(), apexName, fi.Path()) linkPath := filepath.Join(a.installDir.ToMakePath().String(), apexBundleName, fi.Path()) mkdirCmd := "mkdir -p " + filepath.Dir(linkPath) linkCmd := "ln -sfn " + linkTarget + " " + linkPath postInstallCommands = append(postInstallCommands, mkdirCmd, linkCmd) Loading @@ -75,7 +88,7 @@ func (a *apexBundle) androidMkForFiles(w io.Writer, apexName, moduleDir string) if linkToSystemLib { moduleName = fi.moduleName } else { moduleName = fi.moduleName + "." + apexName + a.suffix moduleName = fi.moduleName + "." + apexBundleName + a.suffix } if !android.InList(moduleName, moduleNames) { Loading @@ -99,8 +112,8 @@ func (a *apexBundle) androidMkForFiles(w io.Writer, apexName, moduleDir string) if apexType == flattenedApex { // /system/apex/<name>/{lib|framework|...} fmt.Fprintln(w, "LOCAL_MODULE_PATH :=", filepath.Join(a.installDir.ToMakePath().String(), apexName, fi.installDir)) if a.primaryApexType { apexBundleName, fi.installDir)) if a.primaryApexType && !symbolFilesNotNeeded { fmt.Fprintln(w, "LOCAL_SOONG_SYMBOL_PATH :=", pathWhenActivated) } if len(fi.symlinks) > 0 { Loading Loading @@ -236,7 +249,7 @@ func (a *apexBundle) androidMkForType() android.AndroidMkData { apexType := a.properties.ApexType if a.installable() { apexName := proptools.StringDefault(a.properties.Apex_name, name) moduleNames = a.androidMkForFiles(w, apexName, moduleDir) moduleNames = a.androidMkForFiles(w, name, apexName, moduleDir) } if apexType == flattenedApex { Loading
apex/apex_test.go +23 −1 Original line number Diff line number Diff line Loading @@ -2210,11 +2210,12 @@ func TestDependenciesInApexManifest(t *testing.T) { } func TestApexName(t *testing.T) { ctx, _ := testApex(t, ` ctx, config := testApex(t, ` apex { name: "myapex", key: "myapex.key", apex_name: "com.android.myapex", native_shared_libs: ["mylib"], } apex_key { Loading @@ -2222,6 +2223,17 @@ func TestApexName(t *testing.T) { public_key: "testkey.avbpubkey", private_key: "testkey.pem", } cc_library { name: "mylib", srcs: ["mylib.cpp"], system_shared_libs: [], stl: "none", apex_available: [ "//apex_available:platform", "myapex", ], } `) module := ctx.ModuleForTests("myapex", "android_common_myapex_image") Loading @@ -2229,6 +2241,16 @@ func TestApexName(t *testing.T) { ensureContains(t, apexManifestRule.Args["opt"], "-v name com.android.myapex") apexRule := module.Rule("apexRule") ensureContains(t, apexRule.Args["opt_flags"], "--do_not_check_keyname") apexBundle := ctx.ModuleForTests("myapex", "android_common_myapex_image").Module().(*apexBundle) data := android.AndroidMkDataForTest(t, config, "", apexBundle) name := apexBundle.BaseModuleName() prefix := "TARGET_" var builder strings.Builder data.Custom(&builder, name, prefix, "", data) androidMk := builder.String() ensureContains(t, androidMk, "LOCAL_MODULE := mylib.myapex\n") ensureNotContains(t, androidMk, "LOCAL_MODULE := mylib.com.android.myapex\n") } func TestNonTestApex(t *testing.T) { Loading