aboutsummaryrefslogtreecommitdiffstats
path: root/java/app.go
diff options
context:
space:
mode:
authorColin Cross <ccross@android.com>2018-11-12 10:13:39 -0800
committerColin Cross <ccross@android.com>2018-12-13 15:53:54 +0000
commit29ff88741e710b05743dcf347484c31311e81cda (patch)
treece14d0baba3cafc1948fe899e2788faf642701eb /java/app.go
parent9d824cc850e957d41a7eea69aa05a224675b84b2 (diff)
downloadandroid_build_soong-29ff88741e710b05743dcf347484c31311e81cda.tar.gz
android_build_soong-29ff88741e710b05743dcf347484c31311e81cda.tar.bz2
android_build_soong-29ff88741e710b05743dcf347484c31311e81cda.zip
Dexpreopt soong modules inside soong
Port the dexpreopt logic from Make to the dexpreopt package in Soong, and use it to dexpreopt Soong modules. The same package is also compiled into the dexpreopt_gen binary to generate dexpreopt scripts for Make modules. Bug: 119412419 Bug: 120273280 Test: no differences to dexpreopt outputs on aosp_sailfish system/, only expected changes to dexpreopt outputs on system_other (.vdex files for privileged Soong modules no longer incorrectly contain .dex contents). Change-Id: Ib67e2febf9ed921f06e8a86b9ec945c80dff35eb
Diffstat (limited to 'java/app.go')
-rw-r--r--java/app.go64
1 files changed, 25 insertions, 39 deletions
diff --git a/java/app.go b/java/app.go
index 392ad3fc..b44fc344 100644
--- a/java/app.go
+++ b/java/app.go
@@ -17,6 +17,7 @@ package java
// This file contains the module types for compiling Android apps.
import (
+ "path/filepath"
"strings"
"github.com/google/blueprint"
@@ -69,7 +70,6 @@ type appProperties struct {
AllowDexPreopt bool `blueprint:"mutated"`
EmbedJNI bool `blueprint:"mutated"`
- StripDex bool `blueprint:"mutated"`
}
type AndroidApp struct {
@@ -143,42 +143,16 @@ func (a *AndroidApp) GenerateAndroidBuildActions(ctx android.ModuleContext) {
a.generateAndroidBuildActions(ctx)
}
-// Returns whether this module should have the dex file stored uncompressed in the APK, or stripped completely. If
-// stripped, the code will still be present on the device in the dexpreopted files.
-// This is only necessary for APKs, and not jars, because APKs are signed and the dex file should not be uncompressed
-// or removed after the signature has been generated. For jars, which are not signed, the dex file is uncompressed
-// or removed at installation time in Make.
-func (a *AndroidApp) uncompressOrStripDex(ctx android.ModuleContext) (uncompress, strip bool) {
+// Returns whether this module should have the dex file stored uncompressed in the APK.
+func (a *AndroidApp) shouldUncompressDex(ctx android.ModuleContext) bool {
if ctx.Config().UnbundledBuild() {
- return false, false
+ return false
}
- strip = ctx.Config().DefaultStripDex()
- // TODO(ccross): don't strip dex installed on partitions that may be updated separately (like vendor)
- // TODO(ccross): don't strip dex on modules with LOCAL_APK_LIBRARIES equivalent
-
// Uncompress dex in APKs of privileged apps, and modules used by privileged apps.
- if ctx.Config().UncompressPrivAppDex() &&
+ return ctx.Config().UncompressPrivAppDex() &&
(Bool(a.appProperties.Privileged) ||
- inList(ctx.ModuleName(), ctx.Config().ModulesLoadedByPrivilegedModules())) {
-
- uncompress = true
- // If the dex files is store uncompressed, don't strip it, we will reuse the uncompressed dex from the APK
- // instead of copying it into the odex file.
- strip = false
- }
-
- // If dexpreopt is disabled, don't strip the dex file
- if !a.appProperties.AllowDexPreopt ||
- !BoolDefault(a.deviceProperties.Dex_preopt.Enabled, true) ||
- ctx.Config().DisableDexPreopt(ctx.ModuleName()) {
- strip = false
- }
-
- // TODO(ccross): strip dexpropted modules that are not propted to system_other
- strip = false
-
- return uncompress, strip
+ inList(ctx.ModuleName(), ctx.Config().ModulesLoadedByPrivilegedModules()))
}
func (a *AndroidApp) generateAndroidBuildActions(ctx android.ModuleContext) {
@@ -228,16 +202,25 @@ func (a *AndroidApp) generateAndroidBuildActions(ctx android.ModuleContext) {
a.Module.extraProguardFlagFiles = append(a.Module.extraProguardFlagFiles, staticLibProguardFlagFiles...)
a.Module.extraProguardFlagFiles = append(a.Module.extraProguardFlagFiles, a.proguardOptionsFile)
- a.deviceProperties.UncompressDex, a.appProperties.StripDex = a.uncompressOrStripDex(ctx)
+ a.deviceProperties.UncompressDex = a.shouldUncompressDex(ctx)
+
+ var installDir string
+ if ctx.ModuleName() == "framework-res" {
+ // framework-res.apk is installed as system/framework/framework-res.apk
+ installDir = "framework"
+ } else if Bool(a.appProperties.Privileged) {
+ installDir = filepath.Join("priv-app", ctx.ModuleName())
+ } else {
+ installDir = filepath.Join("app", ctx.ModuleName())
+ }
+ a.dexpreopter.installPath = android.PathForModuleInstall(ctx, installDir, ctx.ModuleName()+".apk")
+ a.dexpreopter.isPrivApp = Bool(a.appProperties.Privileged)
if ctx.ModuleName() != "framework-res" {
a.Module.compile(ctx, a.aaptSrcJar)
}
- dexJarFile := a.dexJarFile
- if a.appProperties.StripDex {
- dexJarFile = nil
- }
+ dexJarFile := a.maybeStrippedDexJarFile
var certificates []Certificate
@@ -287,9 +270,9 @@ func (a *AndroidApp) generateAndroidBuildActions(ctx android.ModuleContext) {
// framework-res.apk is installed as system/framework/framework-res.apk
ctx.InstallFile(android.PathForModuleInstall(ctx, "framework"), ctx.ModuleName()+".apk", a.outputFile)
} else if Bool(a.appProperties.Privileged) {
- ctx.InstallFile(android.PathForModuleInstall(ctx, "priv-app"), ctx.ModuleName()+".apk", a.outputFile)
+ ctx.InstallFile(android.PathForModuleInstall(ctx, "priv-app", ctx.ModuleName()), ctx.ModuleName()+".apk", a.outputFile)
} else {
- ctx.InstallFile(android.PathForModuleInstall(ctx, "app"), ctx.ModuleName()+".apk", a.outputFile)
+ ctx.InstallFile(android.PathForModuleInstall(ctx, "app", ctx.ModuleName()), ctx.ModuleName()+".apk", a.outputFile)
}
}
@@ -342,6 +325,7 @@ func AndroidAppFactory() android.Module {
module.AddProperties(
&module.Module.properties,
&module.Module.deviceProperties,
+ &module.Module.dexpreoptProperties,
&module.Module.protoProperties,
&module.aaptProperties,
&module.appProperties)
@@ -404,6 +388,7 @@ func AndroidTestFactory() android.Module {
module.AddProperties(
&module.Module.properties,
&module.Module.deviceProperties,
+ &module.Module.dexpreoptProperties,
&module.Module.protoProperties,
&module.aaptProperties,
&module.appProperties,
@@ -439,6 +424,7 @@ func AndroidTestHelperAppFactory() android.Module {
module.AddProperties(
&module.Module.properties,
&module.Module.deviceProperties,
+ &module.Module.dexpreoptProperties,
&module.Module.protoProperties,
&module.aaptProperties,
&module.appProperties,