Append APEX version instead of build ID for APK-in-APEX paths.
This CL removes the build_id.mk suffix and replaces it with a hardcoded placeholder string that will be replaced with the actual version in apex_manifest.json by apexer at apex construction time. This means that as long as the apex version is incremented, the APK-in-APEX will be installed to a new directory path from the package manager's perspective. Fixes: 229574810 Bug: 229625490 Bug: 226559955 Bug: 224589412 Bug: 227417611 Bug: 228157333 Bug: 228803590 Bug: 229136249 Test: atest StrictJavaPackagesTest Test: soong tests Test: deapexer list out/dist/com.google.android.permission.apex Change-Id: I9cef1418c3fc7e0970d96995b8398f5e82f479e0
This commit is contained in:
20
apex/apex.go
20
apex/apex.go
@@ -19,7 +19,6 @@ package apex
|
||||
import (
|
||||
"fmt"
|
||||
"path/filepath"
|
||||
"regexp"
|
||||
"sort"
|
||||
"strings"
|
||||
|
||||
@@ -1657,20 +1656,7 @@ type androidApp interface {
|
||||
var _ androidApp = (*java.AndroidApp)(nil)
|
||||
var _ androidApp = (*java.AndroidAppImport)(nil)
|
||||
|
||||
func sanitizedBuildIdForPath(ctx android.BaseModuleContext) string {
|
||||
buildId := ctx.Config().BuildId()
|
||||
|
||||
// The build ID is used as a suffix for a filename, so ensure that
|
||||
// the set of characters being used are sanitized.
|
||||
// - any word character: [a-zA-Z0-9_]
|
||||
// - dots: .
|
||||
// - dashes: -
|
||||
validRegex := regexp.MustCompile(`^[\w\.\-\_]+$`)
|
||||
if !validRegex.MatchString(buildId) {
|
||||
ctx.ModuleErrorf("Unable to use build id %s as filename suffix, valid characters are [a-z A-Z 0-9 _ . -].", buildId)
|
||||
}
|
||||
return buildId
|
||||
}
|
||||
const APEX_VERSION_PLACEHOLDER = "__APEX_VERSION_PLACEHOLDER__"
|
||||
|
||||
func apexFileForAndroidApp(ctx android.BaseModuleContext, aapp androidApp) apexFile {
|
||||
appDir := "app"
|
||||
@@ -1681,7 +1667,7 @@ func apexFileForAndroidApp(ctx android.BaseModuleContext, aapp androidApp) apexF
|
||||
// TODO(b/224589412, b/226559955): Ensure that the subdirname is suffixed
|
||||
// so that PackageManager correctly invalidates the existing installed apk
|
||||
// in favour of the new APK-in-APEX. See bugs for more information.
|
||||
dirInApex := filepath.Join(appDir, aapp.InstallApkName()+"@"+sanitizedBuildIdForPath(ctx))
|
||||
dirInApex := filepath.Join(appDir, aapp.InstallApkName()+"@"+APEX_VERSION_PLACEHOLDER)
|
||||
fileToCopy := aapp.OutputFile()
|
||||
|
||||
af := newApexFile(ctx, fileToCopy, aapp.BaseModuleName(), dirInApex, app, aapp)
|
||||
@@ -1920,7 +1906,7 @@ func (a *apexBundle) GenerateAndroidBuildActions(ctx android.ModuleContext) {
|
||||
// suffixed so that PackageManager correctly invalidates the
|
||||
// existing installed apk in favour of the new APK-in-APEX.
|
||||
// See bugs for more information.
|
||||
appDirName := filepath.Join(appDir, ap.BaseModuleName()+"@"+sanitizedBuildIdForPath(ctx))
|
||||
appDirName := filepath.Join(appDir, ap.BaseModuleName()+"@"+APEX_VERSION_PLACEHOLDER)
|
||||
af := newApexFile(ctx, ap.OutputFile(), ap.BaseModuleName(), appDirName, appSet, ap)
|
||||
af.certificate = java.PresignedCertificate
|
||||
filesInfo = append(filesInfo, af)
|
||||
|
Reference in New Issue
Block a user