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
This commit is contained in:
Jaewoong Jung
2019-01-22 16:40:58 -08:00
parent 2ad817c65d
commit 590b1ae37c

View File

@@ -152,7 +152,7 @@ func (a *AndroidApp) shouldUncompressDex(ctx android.ModuleContext) bool {
inList(ctx.ModuleName(), ctx.Config().ModulesLoadedByPrivilegedModules())) inList(ctx.ModuleName(), ctx.Config().ModulesLoadedByPrivilegedModules()))
} }
func (a *AndroidApp) generateAndroidBuildActions(ctx android.ModuleContext) { func (a *AndroidApp) aaptBuildActions(ctx android.ModuleContext) {
aaptLinkFlags := []string{} aaptLinkFlags := []string{}
// Add TARGET_AAPT_CHARACTERISTICS values to AAPT link flags if they exist and --product flags were not provided. // 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 // apps manifests are handled by aapt, don't let Module see them
a.properties.Manifest = nil a.properties.Manifest = nil
}
func (a *AndroidApp) proguardBuildActions(ctx android.ModuleContext) {
var staticLibProguardFlagFiles android.Paths var staticLibProguardFlagFiles android.Paths
ctx.VisitDirectDeps(func(m android.Module) { ctx.VisitDirectDeps(func(m android.Module) {
if lib, ok := m.(AndroidLibraryDependency); ok && ctx.OtherModuleDependencyTag(m) == staticLibTag { 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, staticLibProguardFlagFiles...)
a.Module.extraProguardFlagFiles = append(a.Module.extraProguardFlagFiles, a.proguardOptionsFile) a.Module.extraProguardFlagFiles = append(a.Module.extraProguardFlagFiles, a.proguardOptionsFile)
}
func (a *AndroidApp) dexBuildActions(ctx android.ModuleContext) android.Path {
a.deviceProperties.UncompressDex = a.shouldUncompressDex(ctx) a.deviceProperties.UncompressDex = a.shouldUncompressDex(ctx)
var installDir string var installDir string
@@ -221,12 +225,11 @@ func (a *AndroidApp) generateAndroidBuildActions(ctx android.ModuleContext) {
a.Module.compile(ctx, a.aaptSrcJar) 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 var jniJarFile android.WritablePath
jniLibs, certificateDeps := a.collectAppDeps(ctx)
if len(jniLibs) > 0 { if len(jniLibs) > 0 {
embedJni := ctx.Config().UnbundledBuild() || a.appProperties.EmbedJNI embedJni := ctx.Config().UnbundledBuild() || a.appProperties.EmbedJNI
if embedJni { if embedJni {
@@ -236,11 +239,10 @@ func (a *AndroidApp) generateAndroidBuildActions(ctx android.ModuleContext) {
a.installJniLibs = jniLibs a.installJniLibs = jniLibs
} }
} }
return jniJarFile
}
if ctx.Failed() { func (a *AndroidApp) certificateBuildActions(certificateDeps []Certificate, ctx android.ModuleContext) []Certificate {
return
}
cert := a.getCertString(ctx) cert := a.getCertString(ctx)
certModule := android.SrcIsModule(cert) certModule := android.SrcIsModule(cert)
if certModule != "" { if certModule != "" {
@@ -257,11 +259,6 @@ func (a *AndroidApp) generateAndroidBuildActions(ctx android.ModuleContext) {
a.certificate = Certificate{pem, key} 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() { if !a.Module.Platform() {
certPath := a.certificate.Pem.String() certPath := a.certificate.Pem.String()
systemCertPath := ctx.Config().DefaultAppCertificateDir(ctx).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 a.outputFile = packageFile
// Build an app bundle.
bundleFile := android.PathForModuleOut(ctx, "base.zip") bundleFile := android.PathForModuleOut(ctx, "base.zip")
BuildBundleModule(ctx, bundleFile, a.exportPackage, jniJarFile, dexJarFile) BuildBundleModule(ctx, bundleFile, a.exportPackage, jniJarFile, dexJarFile)
a.bundleFile = bundleFile a.bundleFile = bundleFile
// Install the app package.
if ctx.ModuleName() == "framework-res" { if ctx.ModuleName() == "framework-res" {
// framework-res.apk is installed as system/framework/framework-res.apk // framework-res.apk is installed as system/framework/framework-res.apk
ctx.InstallFile(android.PathForModuleInstall(ctx, "framework"), ctx.ModuleName()+".apk", a.outputFile) ctx.InstallFile(android.PathForModuleInstall(ctx, "framework"), ctx.ModuleName()+".apk", a.outputFile)