Install signed split apks.
This fixes a bug where unsigned split apks were installed instead of
their signed counterparts.
Fixes: 140795853
Test: app_test.go
Test: m Split && apksigner verify --print-certs
Change-Id: I12cdbcaff9932b6388f920d7e03301d687c3bfdb
diff --git a/java/androidmk.go b/java/androidmk.go
index cd91b46..2e9b581 100644
--- a/java/androidmk.go
+++ b/java/androidmk.go
@@ -332,10 +332,9 @@
if len(app.dexpreopter.builtInstalled) > 0 {
entries.SetString("LOCAL_SOONG_BUILT_INSTALLED", app.dexpreopter.builtInstalled)
}
- for _, split := range app.aapt.splits {
- install := app.onDeviceDir + "/" +
- strings.TrimSuffix(app.installApkName, ".apk") + "_" + split.suffix + ".apk"
- entries.AddStrings("LOCAL_SOONG_BUILT_INSTALLED", split.path.String()+":"+install)
+ for _, extra := range app.extraOutputFiles {
+ install := app.onDeviceDir + "/" + extra.Base()
+ entries.AddStrings("LOCAL_SOONG_BUILT_INSTALLED", extra.String()+":"+install)
}
},
},
diff --git a/java/app.go b/java/app.go
index bd8556e..a2d0d2c 100644
--- a/java/app.go
+++ b/java/app.go
@@ -479,14 +479,13 @@
a.certificate = certificates[0]
// Build a final signed app package.
- // TODO(jungjw): Consider changing this to installApkName.
- packageFile := android.PathForModuleOut(ctx, ctx.ModuleName()+".apk")
+ packageFile := android.PathForModuleOut(ctx, a.installApkName+".apk")
CreateAndSignAppPackage(ctx, packageFile, a.exportPackage, jniJarFile, dexJarFile, certificates, apkDeps)
a.outputFile = packageFile
for _, split := range a.aapt.splits {
// Sign the split APKs
- packageFile := android.PathForModuleOut(ctx, ctx.ModuleName()+"_"+split.suffix+".apk")
+ packageFile := android.PathForModuleOut(ctx, a.installApkName+"_"+split.suffix+".apk")
CreateAndSignAppPackage(ctx, packageFile, split.path, nil, nil, certificates, apkDeps)
a.extraOutputFiles = append(a.extraOutputFiles, packageFile)
}
@@ -497,9 +496,9 @@
a.bundleFile = bundleFile
// Install the app package.
- ctx.InstallFile(a.installDir, a.installApkName+".apk", a.outputFile)
- for _, split := range a.aapt.splits {
- ctx.InstallFile(a.installDir, a.installApkName+"_"+split.suffix+".apk", split.path)
+ ctx.InstallFile(a.installDir, a.outputFile.Base(), a.outputFile)
+ for _, extra := range a.extraOutputFiles {
+ ctx.InstallFile(a.installDir, extra.Base(), extra)
}
}
diff --git a/java/app_test.go b/java/app_test.go
index 05ab856..5b6ed54 100644
--- a/java/app_test.go
+++ b/java/app_test.go
@@ -876,7 +876,7 @@
packageNameOverride: "foo:bar",
expected: []string{
// The package apk should be still be the original name for test dependencies.
- buildDir + "/.intermediates/foo/android_common/foo.apk",
+ buildDir + "/.intermediates/foo/android_common/bar.apk",
buildDir + "/target/product/test_device/system/app/bar/bar.apk",
},
},
@@ -1016,7 +1016,7 @@
}
// Check the certificate paths
- signapk := variant.Output("foo.apk")
+ signapk := variant.Output(expected.moduleName + ".apk")
signFlag := signapk.Args["certificates"]
if expected.signFlag != signFlag {
t.Errorf("Incorrect signing flags, expected: %q, got: %q", expected.signFlag, signFlag)