Revert "Dexpreopt soong modules inside soong"
This reverts commit 29ff88741e710b05743dcf347484c31311e81cda.
Test: none
Bug: 119412419
diff --git a/java/app.go b/java/app.go
index b44fc34..392ad3f 100644
--- a/java/app.go
+++ b/java/app.go
@@ -17,7 +17,6 @@
// This file contains the module types for compiling Android apps.
import (
- "path/filepath"
"strings"
"github.com/google/blueprint"
@@ -70,6 +69,7 @@
AllowDexPreopt bool `blueprint:"mutated"`
EmbedJNI bool `blueprint:"mutated"`
+ StripDex bool `blueprint:"mutated"`
}
type AndroidApp struct {
@@ -143,16 +143,42 @@
a.generateAndroidBuildActions(ctx)
}
-// Returns whether this module should have the dex file stored uncompressed in the APK.
-func (a *AndroidApp) shouldUncompressDex(ctx android.ModuleContext) bool {
+// 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) {
if ctx.Config().UnbundledBuild() {
- return false
+ return false, 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.
- return ctx.Config().UncompressPrivAppDex() &&
+ if ctx.Config().UncompressPrivAppDex() &&
(Bool(a.appProperties.Privileged) ||
- inList(ctx.ModuleName(), ctx.Config().ModulesLoadedByPrivilegedModules()))
+ 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
}
func (a *AndroidApp) generateAndroidBuildActions(ctx android.ModuleContext) {
@@ -202,25 +228,16 @@
a.Module.extraProguardFlagFiles = append(a.Module.extraProguardFlagFiles, staticLibProguardFlagFiles...)
a.Module.extraProguardFlagFiles = append(a.Module.extraProguardFlagFiles, a.proguardOptionsFile)
- 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)
+ a.deviceProperties.UncompressDex, a.appProperties.StripDex = a.uncompressOrStripDex(ctx)
if ctx.ModuleName() != "framework-res" {
a.Module.compile(ctx, a.aaptSrcJar)
}
+ dexJarFile := a.dexJarFile
- dexJarFile := a.maybeStrippedDexJarFile
+ if a.appProperties.StripDex {
+ dexJarFile = nil
+ }
var certificates []Certificate
@@ -270,9 +287,9 @@
// 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()), ctx.ModuleName()+".apk", a.outputFile)
+ ctx.InstallFile(android.PathForModuleInstall(ctx, "priv-app"), ctx.ModuleName()+".apk", a.outputFile)
} else {
- ctx.InstallFile(android.PathForModuleInstall(ctx, "app", ctx.ModuleName()), ctx.ModuleName()+".apk", a.outputFile)
+ ctx.InstallFile(android.PathForModuleInstall(ctx, "app"), ctx.ModuleName()+".apk", a.outputFile)
}
}
@@ -325,7 +342,6 @@
module.AddProperties(
&module.Module.properties,
&module.Module.deviceProperties,
- &module.Module.dexpreoptProperties,
&module.Module.protoProperties,
&module.aaptProperties,
&module.appProperties)
@@ -388,7 +404,6 @@
module.AddProperties(
&module.Module.properties,
&module.Module.deviceProperties,
- &module.Module.dexpreoptProperties,
&module.Module.protoProperties,
&module.aaptProperties,
&module.appProperties,
@@ -424,7 +439,6 @@
module.AddProperties(
&module.Module.properties,
&module.Module.deviceProperties,
- &module.Module.dexpreoptProperties,
&module.Module.protoProperties,
&module.aaptProperties,
&module.appProperties,