summaryrefslogtreecommitdiff
path: root/java/app.go
diff options
context:
space:
mode:
Diffstat (limited to 'java/app.go')
-rw-r--r--java/app.go72
1 files changed, 28 insertions, 44 deletions
diff --git a/java/app.go b/java/app.go
index 392ad3fc8..a037ef357 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"
@@ -67,9 +68,7 @@ type appProperties struct {
// list of native libraries that will be provided in or alongside the resulting jar
Jni_libs []string `android:"arch_variant"`
- AllowDexPreopt bool `blueprint:"mutated"`
- EmbedJNI bool `blueprint:"mutated"`
- StripDex bool `blueprint:"mutated"`
+ EmbedJNI bool `blueprint:"mutated"`
}
type AndroidApp struct {
@@ -143,42 +142,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 +201,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 +269,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)
}
}
@@ -337,11 +319,11 @@ func AndroidAppFactory() android.Module {
module.Module.properties.Instrument = true
module.Module.properties.Installable = proptools.BoolPtr(true)
- module.appProperties.AllowDexPreopt = true
module.AddProperties(
&module.Module.properties,
&module.Module.deviceProperties,
+ &module.Module.dexpreoptProperties,
&module.Module.protoProperties,
&module.aaptProperties,
&module.appProperties)
@@ -399,11 +381,12 @@ func AndroidTestFactory() android.Module {
module.Module.properties.Instrument = true
module.Module.properties.Installable = proptools.BoolPtr(true)
module.appProperties.EmbedJNI = true
- module.appProperties.AllowDexPreopt = false
+ module.Module.dexpreopter.isTest = true
module.AddProperties(
&module.Module.properties,
&module.Module.deviceProperties,
+ &module.Module.dexpreoptProperties,
&module.Module.protoProperties,
&module.aaptProperties,
&module.appProperties,
@@ -434,11 +417,12 @@ func AndroidTestHelperAppFactory() android.Module {
module.Module.properties.Installable = proptools.BoolPtr(true)
module.appProperties.EmbedJNI = true
- module.appProperties.AllowDexPreopt = false
+ module.Module.dexpreopter.isTest = true
module.AddProperties(
&module.Module.properties,
&module.Module.deviceProperties,
+ &module.Module.dexpreoptProperties,
&module.Module.protoProperties,
&module.aaptProperties,
&module.appProperties,