Loading java/app.go +18 −4 Original line number Diff line number Diff line Loading @@ -529,14 +529,28 @@ func (a *AndroidApp) generateAndroidBuildActions(ctx android.ModuleContext) { // Build a final signed app package. packageFile := android.PathForModuleOut(ctx, a.installApkName+".apk") CreateAndSignAppPackage(ctx, packageFile, a.exportPackage, jniJarFile, dexJarFile, certificates, apkDeps) v4SigningRequested := Bool(a.Module.deviceProperties.V4_signature) var v4SignatureFile android.WritablePath = nil if v4SigningRequested { v4SignatureFile = android.PathForModuleOut(ctx, a.installApkName+".apk.idsig") } CreateAndSignAppPackage(ctx, packageFile, a.exportPackage, jniJarFile, dexJarFile, certificates, apkDeps, v4SignatureFile) a.outputFile = packageFile if v4SigningRequested { a.extraOutputFiles = append(a.extraOutputFiles, v4SignatureFile) } for _, split := range a.aapt.splits { // Sign the split APKs packageFile := android.PathForModuleOut(ctx, a.installApkName+"_"+split.suffix+".apk") CreateAndSignAppPackage(ctx, packageFile, split.path, nil, nil, certificates, apkDeps) if v4SigningRequested { v4SignatureFile = android.PathForModuleOut(ctx, a.installApkName+"_"+split.suffix+".apk.idsig") } CreateAndSignAppPackage(ctx, packageFile, split.path, nil, nil, certificates, apkDeps, v4SignatureFile) a.extraOutputFiles = append(a.extraOutputFiles, packageFile) if v4SigningRequested { a.extraOutputFiles = append(a.extraOutputFiles, v4SignatureFile) } } // Build an app bundle. Loading Loading @@ -1156,7 +1170,7 @@ func (a *AndroidAppImport) generateAndroidBuildActions(ctx android.ModuleContext } a.certificate = certificates[0] signed := android.PathForModuleOut(ctx, "signed", ctx.ModuleName()+".apk") SignAppPackage(ctx, signed, dexOutput, certificates) SignAppPackage(ctx, signed, dexOutput, certificates, nil) a.outputFile = signed } else { alignedApk := android.PathForModuleOut(ctx, "zip-aligned", ctx.ModuleName()+".apk") Loading Loading @@ -1361,7 +1375,7 @@ func (r *RuntimeResourceOverlay) GenerateAndroidBuildActions(ctx android.ModuleC _, certificates := collectAppDeps(ctx, false, false) certificates = processMainCert(r.ModuleBase, String(r.properties.Certificate), certificates, ctx) signed := android.PathForModuleOut(ctx, "signed", r.Name()+".apk") SignAppPackage(ctx, signed, r.aapt.exportPackage, certificates) SignAppPackage(ctx, signed, r.aapt.exportPackage, certificates, nil) r.certificate = certificates[0] r.outputFile = signed Loading java/app_builder.go +12 −4 Original line number Diff line number Diff line Loading @@ -45,7 +45,7 @@ var combineApk = pctx.AndroidStaticRule("combineApk", }) func CreateAndSignAppPackage(ctx android.ModuleContext, outputFile android.WritablePath, packageFile, jniJarFile, dexJarFile android.Path, certificates []Certificate, deps android.Paths) { packageFile, jniJarFile, dexJarFile android.Path, certificates []Certificate, deps android.Paths, v4SignatureFile android.WritablePath) { unsignedApkName := strings.TrimSuffix(outputFile.Base(), ".apk") + "-unsigned.apk" unsignedApk := android.PathForModuleOut(ctx, unsignedApkName) Loading @@ -66,10 +66,10 @@ func CreateAndSignAppPackage(ctx android.ModuleContext, outputFile android.Writa Implicits: deps, }) SignAppPackage(ctx, outputFile, unsignedApk, certificates) SignAppPackage(ctx, outputFile, unsignedApk, certificates, v4SignatureFile) } func SignAppPackage(ctx android.ModuleContext, signedApk android.WritablePath, unsignedApk android.Path, certificates []Certificate) { func SignAppPackage(ctx android.ModuleContext, signedApk android.WritablePath, unsignedApk android.Path, certificates []Certificate, v4SignatureFile android.WritablePath) { var certificateArgs []string var deps android.Paths Loading @@ -78,14 +78,22 @@ func SignAppPackage(ctx android.ModuleContext, signedApk android.WritablePath, u deps = append(deps, c.Pem, c.Key) } outputFiles := android.WritablePaths{signedApk} var flag string = "" if v4SignatureFile != nil { outputFiles = append(outputFiles, v4SignatureFile) flag = "--enable-v4" } ctx.Build(pctx, android.BuildParams{ Rule: Signapk, Description: "signapk", Output: signedApk, Outputs: outputFiles, Input: unsignedApk, Implicits: deps, Args: map[string]string{ "certificates": strings.Join(certificateArgs, " "), "flags": flag, }, }) } Loading java/app_test.go +60 −0 Original line number Diff line number Diff line Loading @@ -1074,6 +1074,66 @@ func TestCertificates(t *testing.T) { } } func TestRequestV4SigningFlag(t *testing.T) { testCases := []struct { name string bp string expected string }{ { name: "default", bp: ` android_app { name: "foo", srcs: ["a.java"], sdk_version: "current", } `, expected: "", }, { name: "default", bp: ` android_app { name: "foo", srcs: ["a.java"], sdk_version: "current", v4_signature: false, } `, expected: "", }, { name: "module certificate property", bp: ` android_app { name: "foo", srcs: ["a.java"], sdk_version: "current", v4_signature: true, } `, expected: "--enable-v4", }, } for _, test := range testCases { t.Run(test.name, func(t *testing.T) { config := testAppConfig(nil, test.bp, nil) ctx := testContext() run(t, ctx, config) foo := ctx.ModuleForTests("foo", "android_common") signapk := foo.Output("foo.apk") signFlags := signapk.Args["flags"] if test.expected != signFlags { t.Errorf("Incorrect signing flags, expected: %q, got: %q", test.expected, signFlags) } }) } } func TestPackageNameOverride(t *testing.T) { testCases := []struct { name string Loading java/java.go +4 −0 Original line number Diff line number Diff line Loading @@ -325,6 +325,10 @@ type CompilerDeviceProperties struct { UncompressDex bool `blueprint:"mutated"` IsSDKLibrary bool `blueprint:"mutated"` // If true, generate the signature file of APK Signing Scheme V4, along side the signed APK file. // Defaults to false. V4_signature *bool } func (me *CompilerDeviceProperties) EffectiveOptimizeEnabled() bool { Loading Loading
java/app.go +18 −4 Original line number Diff line number Diff line Loading @@ -529,14 +529,28 @@ func (a *AndroidApp) generateAndroidBuildActions(ctx android.ModuleContext) { // Build a final signed app package. packageFile := android.PathForModuleOut(ctx, a.installApkName+".apk") CreateAndSignAppPackage(ctx, packageFile, a.exportPackage, jniJarFile, dexJarFile, certificates, apkDeps) v4SigningRequested := Bool(a.Module.deviceProperties.V4_signature) var v4SignatureFile android.WritablePath = nil if v4SigningRequested { v4SignatureFile = android.PathForModuleOut(ctx, a.installApkName+".apk.idsig") } CreateAndSignAppPackage(ctx, packageFile, a.exportPackage, jniJarFile, dexJarFile, certificates, apkDeps, v4SignatureFile) a.outputFile = packageFile if v4SigningRequested { a.extraOutputFiles = append(a.extraOutputFiles, v4SignatureFile) } for _, split := range a.aapt.splits { // Sign the split APKs packageFile := android.PathForModuleOut(ctx, a.installApkName+"_"+split.suffix+".apk") CreateAndSignAppPackage(ctx, packageFile, split.path, nil, nil, certificates, apkDeps) if v4SigningRequested { v4SignatureFile = android.PathForModuleOut(ctx, a.installApkName+"_"+split.suffix+".apk.idsig") } CreateAndSignAppPackage(ctx, packageFile, split.path, nil, nil, certificates, apkDeps, v4SignatureFile) a.extraOutputFiles = append(a.extraOutputFiles, packageFile) if v4SigningRequested { a.extraOutputFiles = append(a.extraOutputFiles, v4SignatureFile) } } // Build an app bundle. Loading Loading @@ -1156,7 +1170,7 @@ func (a *AndroidAppImport) generateAndroidBuildActions(ctx android.ModuleContext } a.certificate = certificates[0] signed := android.PathForModuleOut(ctx, "signed", ctx.ModuleName()+".apk") SignAppPackage(ctx, signed, dexOutput, certificates) SignAppPackage(ctx, signed, dexOutput, certificates, nil) a.outputFile = signed } else { alignedApk := android.PathForModuleOut(ctx, "zip-aligned", ctx.ModuleName()+".apk") Loading Loading @@ -1361,7 +1375,7 @@ func (r *RuntimeResourceOverlay) GenerateAndroidBuildActions(ctx android.ModuleC _, certificates := collectAppDeps(ctx, false, false) certificates = processMainCert(r.ModuleBase, String(r.properties.Certificate), certificates, ctx) signed := android.PathForModuleOut(ctx, "signed", r.Name()+".apk") SignAppPackage(ctx, signed, r.aapt.exportPackage, certificates) SignAppPackage(ctx, signed, r.aapt.exportPackage, certificates, nil) r.certificate = certificates[0] r.outputFile = signed Loading
java/app_builder.go +12 −4 Original line number Diff line number Diff line Loading @@ -45,7 +45,7 @@ var combineApk = pctx.AndroidStaticRule("combineApk", }) func CreateAndSignAppPackage(ctx android.ModuleContext, outputFile android.WritablePath, packageFile, jniJarFile, dexJarFile android.Path, certificates []Certificate, deps android.Paths) { packageFile, jniJarFile, dexJarFile android.Path, certificates []Certificate, deps android.Paths, v4SignatureFile android.WritablePath) { unsignedApkName := strings.TrimSuffix(outputFile.Base(), ".apk") + "-unsigned.apk" unsignedApk := android.PathForModuleOut(ctx, unsignedApkName) Loading @@ -66,10 +66,10 @@ func CreateAndSignAppPackage(ctx android.ModuleContext, outputFile android.Writa Implicits: deps, }) SignAppPackage(ctx, outputFile, unsignedApk, certificates) SignAppPackage(ctx, outputFile, unsignedApk, certificates, v4SignatureFile) } func SignAppPackage(ctx android.ModuleContext, signedApk android.WritablePath, unsignedApk android.Path, certificates []Certificate) { func SignAppPackage(ctx android.ModuleContext, signedApk android.WritablePath, unsignedApk android.Path, certificates []Certificate, v4SignatureFile android.WritablePath) { var certificateArgs []string var deps android.Paths Loading @@ -78,14 +78,22 @@ func SignAppPackage(ctx android.ModuleContext, signedApk android.WritablePath, u deps = append(deps, c.Pem, c.Key) } outputFiles := android.WritablePaths{signedApk} var flag string = "" if v4SignatureFile != nil { outputFiles = append(outputFiles, v4SignatureFile) flag = "--enable-v4" } ctx.Build(pctx, android.BuildParams{ Rule: Signapk, Description: "signapk", Output: signedApk, Outputs: outputFiles, Input: unsignedApk, Implicits: deps, Args: map[string]string{ "certificates": strings.Join(certificateArgs, " "), "flags": flag, }, }) } Loading
java/app_test.go +60 −0 Original line number Diff line number Diff line Loading @@ -1074,6 +1074,66 @@ func TestCertificates(t *testing.T) { } } func TestRequestV4SigningFlag(t *testing.T) { testCases := []struct { name string bp string expected string }{ { name: "default", bp: ` android_app { name: "foo", srcs: ["a.java"], sdk_version: "current", } `, expected: "", }, { name: "default", bp: ` android_app { name: "foo", srcs: ["a.java"], sdk_version: "current", v4_signature: false, } `, expected: "", }, { name: "module certificate property", bp: ` android_app { name: "foo", srcs: ["a.java"], sdk_version: "current", v4_signature: true, } `, expected: "--enable-v4", }, } for _, test := range testCases { t.Run(test.name, func(t *testing.T) { config := testAppConfig(nil, test.bp, nil) ctx := testContext() run(t, ctx, config) foo := ctx.ModuleForTests("foo", "android_common") signapk := foo.Output("foo.apk") signFlags := signapk.Args["flags"] if test.expected != signFlags { t.Errorf("Incorrect signing flags, expected: %q, got: %q", test.expected, signFlags) } }) } } func TestPackageNameOverride(t *testing.T) { testCases := []struct { name string Loading
java/java.go +4 −0 Original line number Diff line number Diff line Loading @@ -325,6 +325,10 @@ type CompilerDeviceProperties struct { UncompressDex bool `blueprint:"mutated"` IsSDKLibrary bool `blueprint:"mutated"` // If true, generate the signature file of APK Signing Scheme V4, along side the signed APK file. // Defaults to false. V4_signature *bool } func (me *CompilerDeviceProperties) EffectiveOptimizeEnabled() bool { Loading