aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJaewoong Jung <jungjw@google.com>2019-01-22 16:40:58 -0800
committerJaewoong Jung <jungjw@google.com>2019-01-24 14:56:29 +0000
commit590b1ae37cb8db754b3fc1d139b6490c4ca5752f (patch)
tree1586bae5faa80dede1c292b9adb1ea1418932eb5
parent2ad817c65d80d2ab4b9cb851cff8d8c3982b663d (diff)
downloadsoong-590b1ae37cb8db754b3fc1d139b6490c4ca5752f.tar.gz
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
-rw-r--r--java/app.go50
1 files changed, 36 insertions, 14 deletions
diff --git a/java/app.go b/java/app.go
index 07a97ede6..45ef48969 100644
--- a/java/app.go
+++ b/java/app.go
@@ -152,7 +152,7 @@ func (a *AndroidApp) shouldUncompressDex(ctx android.ModuleContext) bool {
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 @@ func (a *AndroidApp) generateAndroidBuildActions(ctx android.ModuleContext) {
// 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 @@ func (a *AndroidApp) generateAndroidBuildActions(ctx android.ModuleContext) {
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 @@ func (a *AndroidApp) generateAndroidBuildActions(ctx android.ModuleContext) {
a.Module.compile(ctx, a.aaptSrcJar)
}
- dexJarFile := a.maybeStrippedDexJarFile
-
- var certificates []Certificate
+ return a.maybeStrippedDexJarFile
+}
+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 @@ func (a *AndroidApp) generateAndroidBuildActions(ctx android.ModuleContext) {
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 @@ func (a *AndroidApp) generateAndroidBuildActions(ctx android.ModuleContext) {
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 @@ func (a *AndroidApp) generateAndroidBuildActions(ctx android.ModuleContext) {
}
}
+ 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)