Loading apex/apex.go +3 −4 Original line number Diff line number Diff line Loading @@ -531,9 +531,9 @@ type apexBundle struct { manifestJsonOut android.WritablePath manifestPbOut android.WritablePath // list of commands to create symlinks for backward compatibility // list of commands to create symlinks for backward compatibility. // these commands will be attached as LOCAL_POST_INSTALL_CMD to // apex package itself(for unflattened build) or apex_manifest.json(for flattened build) // apex package itself(for unflattened build) or apex_manifest(for flattened build) // so that compat symlinks are always installed regardless of TARGET_FLATTEN_APEX setting. compatSymlinks []string Loading Loading @@ -1256,8 +1256,7 @@ func (a *apexBundle) GenerateAndroidBuildActions(ctx android.ModuleContext) { a.buildUnflattenedApex(ctx) } apexName := proptools.StringDefault(a.properties.Apex_name, a.Name()) a.compatSymlinks = makeCompatSymlinks(apexName, ctx) a.compatSymlinks = makeCompatSymlinks(a.BaseModuleName(), ctx) } func newApexBundle() *apexBundle { Loading apex/prebuilt.go +13 −1 Original line number Diff line number Diff line Loading @@ -33,6 +33,10 @@ type Prebuilt struct { installDir android.InstallPath installFilename string outputApex android.WritablePath // list of commands to create symlinks for backward compatibility. // these commands will be attached as LOCAL_POST_INSTALL_CMD compatSymlinks []string } type PrebuiltProperties struct { Loading Loading @@ -178,7 +182,12 @@ func (p *Prebuilt) GenerateAndroidBuildActions(ctx android.ModuleContext) { ctx.InstallFile(p.installDir, p.installFilename, p.inputApex) } // TODO(b/143192278): Add compat symlinks for prebuilt_apex // in case that prebuilt_apex replaces source apex (using prefer: prop) p.compatSymlinks = makeCompatSymlinks(p.BaseModuleName(), ctx) // or that prebuilt_apex overrides other apexes (using overrides: prop) for _, overridden := range p.properties.Overrides { p.compatSymlinks = append(p.compatSymlinks, makeCompatSymlinks(overridden, ctx)...) } } func (p *Prebuilt) AndroidMkEntries() []android.AndroidMkEntries { Loading @@ -192,6 +201,9 @@ func (p *Prebuilt) AndroidMkEntries() []android.AndroidMkEntries { entries.SetString("LOCAL_MODULE_STEM", p.installFilename) entries.SetBoolIfTrue("LOCAL_UNINSTALLABLE_MODULE", !p.installable()) entries.AddStrings("LOCAL_OVERRIDES_MODULES", p.properties.Overrides...) if len(p.compatSymlinks) > 0 { entries.SetString("LOCAL_POST_INSTALL_CMD", strings.Join(p.compatSymlinks, " && ")) } }, }, }} Loading apex/vndk.go +14 −6 Original line number Diff line number Diff line Loading @@ -105,7 +105,8 @@ func apexVndkDepsMutator(mctx android.BottomUpMutatorContext) { } } func makeCompatSymlinks(apexName string, ctx android.ModuleContext) (symlinks []string) { // name is module.BaseModuleName() which is used as LOCAL_MODULE_NAME and also LOCAL_OVERRIDES_* func makeCompatSymlinks(name string, ctx android.ModuleContext) (symlinks []string) { // small helper to add symlink commands addSymlink := func(target, dir, linkName string) { link := filepath.Join(dir, linkName) Loading @@ -116,9 +117,13 @@ func makeCompatSymlinks(apexName string, ctx android.ModuleContext) (symlinks [] // When all hard-coded references are fixed, remove symbolic links // Note that we should keep following symlinks for older VNDKs (<=29) // Since prebuilt vndk libs still depend on system/lib/vndk path if strings.HasPrefix(apexName, vndkApexNamePrefix) { if strings.HasPrefix(name, vndkApexName) { vndkVersion := ctx.DeviceConfig().PlatformVndkVersion() if strings.HasPrefix(name, vndkApexNamePrefix) { vndkVersion = strings.TrimPrefix(name, vndkApexNamePrefix) } // the name of vndk apex is formatted "com.android.vndk.v" + version vndkVersion := strings.TrimPrefix(apexName, vndkApexNamePrefix) apexName := vndkApexNamePrefix + vndkVersion if ctx.Config().Android64() { addSymlink("/apex/"+apexName+"/lib64", "$(TARGET_OUT)/lib64", "vndk-sp-"+vndkVersion) addSymlink("/apex/"+apexName+"/lib64", "$(TARGET_OUT)/lib64", "vndk-"+vndkVersion) Loading @@ -127,22 +132,25 @@ func makeCompatSymlinks(apexName string, ctx android.ModuleContext) (symlinks [] addSymlink("/apex/"+apexName+"/lib", "$(TARGET_OUT)/lib", "vndk-sp-"+vndkVersion) addSymlink("/apex/"+apexName+"/lib", "$(TARGET_OUT)/lib", "vndk-"+vndkVersion) } return } // http://b/121248172 - create a link from /system/usr/icu to // /apex/com.android.i18n/etc/icu so that apps can find the ICU .dat file. // A symlink can't overwrite a directory and the /system/usr/icu directory once // existed so the required structure must be created whatever we find. if apexName == "com.android.i18n" { addSymlink("/apex/"+apexName+"/etc/icu", "$(TARGET_OUT)/usr", "icu") if name == "com.android.i18n" { addSymlink("/apex/com.android.i18n/etc/icu", "$(TARGET_OUT)/usr", "icu") return } // TODO(b/124106384): Clean up compat symlinks for ART binaries. if strings.HasPrefix(apexName, "com.android.art.") { if strings.HasPrefix(name, "com.android.art.") { artBinaries := []string{"dalvikvm", "dex2oat"} for _, b := range artBinaries { addSymlink("/apex/com.android.art/bin/"+b, "$(TARGET_OUT)/bin", b) } return } return } Loading
apex/apex.go +3 −4 Original line number Diff line number Diff line Loading @@ -531,9 +531,9 @@ type apexBundle struct { manifestJsonOut android.WritablePath manifestPbOut android.WritablePath // list of commands to create symlinks for backward compatibility // list of commands to create symlinks for backward compatibility. // these commands will be attached as LOCAL_POST_INSTALL_CMD to // apex package itself(for unflattened build) or apex_manifest.json(for flattened build) // apex package itself(for unflattened build) or apex_manifest(for flattened build) // so that compat symlinks are always installed regardless of TARGET_FLATTEN_APEX setting. compatSymlinks []string Loading Loading @@ -1256,8 +1256,7 @@ func (a *apexBundle) GenerateAndroidBuildActions(ctx android.ModuleContext) { a.buildUnflattenedApex(ctx) } apexName := proptools.StringDefault(a.properties.Apex_name, a.Name()) a.compatSymlinks = makeCompatSymlinks(apexName, ctx) a.compatSymlinks = makeCompatSymlinks(a.BaseModuleName(), ctx) } func newApexBundle() *apexBundle { Loading
apex/prebuilt.go +13 −1 Original line number Diff line number Diff line Loading @@ -33,6 +33,10 @@ type Prebuilt struct { installDir android.InstallPath installFilename string outputApex android.WritablePath // list of commands to create symlinks for backward compatibility. // these commands will be attached as LOCAL_POST_INSTALL_CMD compatSymlinks []string } type PrebuiltProperties struct { Loading Loading @@ -178,7 +182,12 @@ func (p *Prebuilt) GenerateAndroidBuildActions(ctx android.ModuleContext) { ctx.InstallFile(p.installDir, p.installFilename, p.inputApex) } // TODO(b/143192278): Add compat symlinks for prebuilt_apex // in case that prebuilt_apex replaces source apex (using prefer: prop) p.compatSymlinks = makeCompatSymlinks(p.BaseModuleName(), ctx) // or that prebuilt_apex overrides other apexes (using overrides: prop) for _, overridden := range p.properties.Overrides { p.compatSymlinks = append(p.compatSymlinks, makeCompatSymlinks(overridden, ctx)...) } } func (p *Prebuilt) AndroidMkEntries() []android.AndroidMkEntries { Loading @@ -192,6 +201,9 @@ func (p *Prebuilt) AndroidMkEntries() []android.AndroidMkEntries { entries.SetString("LOCAL_MODULE_STEM", p.installFilename) entries.SetBoolIfTrue("LOCAL_UNINSTALLABLE_MODULE", !p.installable()) entries.AddStrings("LOCAL_OVERRIDES_MODULES", p.properties.Overrides...) if len(p.compatSymlinks) > 0 { entries.SetString("LOCAL_POST_INSTALL_CMD", strings.Join(p.compatSymlinks, " && ")) } }, }, }} Loading
apex/vndk.go +14 −6 Original line number Diff line number Diff line Loading @@ -105,7 +105,8 @@ func apexVndkDepsMutator(mctx android.BottomUpMutatorContext) { } } func makeCompatSymlinks(apexName string, ctx android.ModuleContext) (symlinks []string) { // name is module.BaseModuleName() which is used as LOCAL_MODULE_NAME and also LOCAL_OVERRIDES_* func makeCompatSymlinks(name string, ctx android.ModuleContext) (symlinks []string) { // small helper to add symlink commands addSymlink := func(target, dir, linkName string) { link := filepath.Join(dir, linkName) Loading @@ -116,9 +117,13 @@ func makeCompatSymlinks(apexName string, ctx android.ModuleContext) (symlinks [] // When all hard-coded references are fixed, remove symbolic links // Note that we should keep following symlinks for older VNDKs (<=29) // Since prebuilt vndk libs still depend on system/lib/vndk path if strings.HasPrefix(apexName, vndkApexNamePrefix) { if strings.HasPrefix(name, vndkApexName) { vndkVersion := ctx.DeviceConfig().PlatformVndkVersion() if strings.HasPrefix(name, vndkApexNamePrefix) { vndkVersion = strings.TrimPrefix(name, vndkApexNamePrefix) } // the name of vndk apex is formatted "com.android.vndk.v" + version vndkVersion := strings.TrimPrefix(apexName, vndkApexNamePrefix) apexName := vndkApexNamePrefix + vndkVersion if ctx.Config().Android64() { addSymlink("/apex/"+apexName+"/lib64", "$(TARGET_OUT)/lib64", "vndk-sp-"+vndkVersion) addSymlink("/apex/"+apexName+"/lib64", "$(TARGET_OUT)/lib64", "vndk-"+vndkVersion) Loading @@ -127,22 +132,25 @@ func makeCompatSymlinks(apexName string, ctx android.ModuleContext) (symlinks [] addSymlink("/apex/"+apexName+"/lib", "$(TARGET_OUT)/lib", "vndk-sp-"+vndkVersion) addSymlink("/apex/"+apexName+"/lib", "$(TARGET_OUT)/lib", "vndk-"+vndkVersion) } return } // http://b/121248172 - create a link from /system/usr/icu to // /apex/com.android.i18n/etc/icu so that apps can find the ICU .dat file. // A symlink can't overwrite a directory and the /system/usr/icu directory once // existed so the required structure must be created whatever we find. if apexName == "com.android.i18n" { addSymlink("/apex/"+apexName+"/etc/icu", "$(TARGET_OUT)/usr", "icu") if name == "com.android.i18n" { addSymlink("/apex/com.android.i18n/etc/icu", "$(TARGET_OUT)/usr", "icu") return } // TODO(b/124106384): Clean up compat symlinks for ART binaries. if strings.HasPrefix(apexName, "com.android.art.") { if strings.HasPrefix(name, "com.android.art.") { artBinaries := []string{"dalvikvm", "dex2oat"} for _, b := range artBinaries { addSymlink("/apex/com.android.art/bin/"+b, "$(TARGET_OUT)/bin", b) } return } return }