summaryrefslogtreecommitdiff
path: root/apex/androidmk.go
diff options
context:
space:
mode:
Diffstat (limited to 'apex/androidmk.go')
-rw-r--r--apex/androidmk.go25
1 files changed, 19 insertions, 6 deletions
diff --git a/apex/androidmk.go b/apex/androidmk.go
index 89299105c..714045fc2 100644
--- a/apex/androidmk.go
+++ b/apex/androidmk.go
@@ -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
@@ -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)
@@ -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) {
@@ -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 {
@@ -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 {