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:
50
java/app.go
50
java/app.go
@@ -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)
|
||||||
|
Reference in New Issue
Block a user