Minor refactoring of generateAndroidBuildActions.
The function became a gigantic machine, so I decided to split it up to
smaller, logically self-contained pieces to provide better readability.
Test: app.go + TreeHugger
Change-Id: I50e5767ed779078b2d8c60c39c3951b0b5a191d7
diff --git a/java/app.go b/java/app.go
index 07a97ed..45ef489 100644
--- a/java/app.go
+++ b/java/app.go
@@ -152,7 +152,7 @@
inList(ctx.ModuleName(), ctx.Config().ModulesLoadedByPrivilegedModules()))
}
-func (a *AndroidApp) generateAndroidBuildActions(ctx android.ModuleContext) {
+func (a *AndroidApp) aaptBuildActions(ctx android.ModuleContext) {
aaptLinkFlags := []string{}
// Add TARGET_AAPT_CHARACTERISTICS values to AAPT link flags if they exist and --product flags were not provided.
@@ -191,7 +191,9 @@
// apps manifests are handled by aapt, don't let Module see them
a.properties.Manifest = nil
+}
+func (a *AndroidApp) proguardBuildActions(ctx android.ModuleContext) {
var staticLibProguardFlagFiles android.Paths
ctx.VisitDirectDeps(func(m android.Module) {
if lib, ok := m.(AndroidLibraryDependency); ok && ctx.OtherModuleDependencyTag(m) == staticLibTag {
@@ -203,7 +205,9 @@
a.Module.extraProguardFlagFiles = append(a.Module.extraProguardFlagFiles, staticLibProguardFlagFiles...)
a.Module.extraProguardFlagFiles = append(a.Module.extraProguardFlagFiles, a.proguardOptionsFile)
+}
+func (a *AndroidApp) dexBuildActions(ctx android.ModuleContext) android.Path {
a.deviceProperties.UncompressDex = a.shouldUncompressDex(ctx)
var installDir string
@@ -221,12 +225,11 @@
a.Module.compile(ctx, a.aaptSrcJar)
}
- dexJarFile := a.maybeStrippedDexJarFile
+ return a.maybeStrippedDexJarFile
+}
- var certificates []Certificate
-
+func (a *AndroidApp) jniBuildActions(jniLibs []jniLib, ctx android.ModuleContext) android.WritablePath {
var jniJarFile android.WritablePath
- jniLibs, certificateDeps := a.collectAppDeps(ctx)
if len(jniLibs) > 0 {
embedJni := ctx.Config().UnbundledBuild() || a.appProperties.EmbedJNI
if embedJni {
@@ -236,11 +239,10 @@
a.installJniLibs = jniLibs
}
}
+ return jniJarFile
+}
- if ctx.Failed() {
- return
- }
-
+func (a *AndroidApp) certificateBuildActions(certificateDeps []Certificate, ctx android.ModuleContext) []Certificate {
cert := a.getCertString(ctx)
certModule := android.SrcIsModule(cert)
if certModule != "" {
@@ -257,11 +259,6 @@
a.certificate = Certificate{pem, key}
}
- certificates = append([]Certificate{a.certificate}, certificateDeps...)
-
- packageFile := android.PathForModuleOut(ctx, ctx.ModuleName()+".apk")
- CreateAppPackage(ctx, packageFile, a.exportPackage, jniJarFile, dexJarFile, certificates)
-
if !a.Module.Platform() {
certPath := a.certificate.Pem.String()
systemCertPath := ctx.Config().DefaultAppCertificateDir(ctx).String()
@@ -275,12 +272,37 @@
}
}
+ return append([]Certificate{a.certificate}, certificateDeps...)
+}
+
+func (a *AndroidApp) generateAndroidBuildActions(ctx android.ModuleContext) {
+ // Process all building blocks, from AAPT to certificates.
+ a.aaptBuildActions(ctx)
+
+ a.proguardBuildActions(ctx)
+
+ dexJarFile := a.dexBuildActions(ctx)
+
+ jniLibs, certificateDeps := a.collectAppDeps(ctx)
+ jniJarFile := a.jniBuildActions(jniLibs, ctx)
+
+ if ctx.Failed() {
+ return
+ }
+
+ certificates := a.certificateBuildActions(certificateDeps, ctx)
+
+ // Build a final signed app package.
+ packageFile := android.PathForModuleOut(ctx, ctx.ModuleName()+".apk")
+ CreateAppPackage(ctx, packageFile, a.exportPackage, jniJarFile, dexJarFile, certificates)
a.outputFile = packageFile
+ // Build an app bundle.
bundleFile := android.PathForModuleOut(ctx, "base.zip")
BuildBundleModule(ctx, bundleFile, a.exportPackage, jniJarFile, dexJarFile)
a.bundleFile = bundleFile
+ // Install the app package.
if ctx.ModuleName() == "framework-res" {
// framework-res.apk is installed as system/framework/framework-res.apk
ctx.InstallFile(android.PathForModuleInstall(ctx, "framework"), ctx.ModuleName()+".apk", a.outputFile)