summaryrefslogtreecommitdiff
path: root/java/java.go
diff options
context:
space:
mode:
Diffstat (limited to 'java/java.go')
-rw-r--r--java/java.go75
1 files changed, 62 insertions, 13 deletions
diff --git a/java/java.go b/java/java.go
index 3663253c1..e9f833194 100644
--- a/java/java.go
+++ b/java/java.go
@@ -671,6 +671,7 @@ func (j *Module) compile(ctx android.ModuleContext, extraSrcJars ...android.Path
// Store the list of .java files that was passed to javac
j.compiledJavaSrcs = uniqueSrcFiles
j.compiledSrcJars = srcJars
+ fullD8 := ctx.AConfig().IsEnvTrue("USE_D8_DESUGAR")
enable_sharding := false
if ctx.Device() && !ctx.Config().IsEnvFalse("TURBINE_ENABLED") {
@@ -793,7 +794,7 @@ func (j *Module) compile(ctx android.ModuleContext, extraSrcJars ...android.Path
j.headerJarFile = j.implementationJarFile
}
- if ctx.Device() && j.installable() {
+ if !fullD8 && ctx.Device() && j.installable() {
outputFile = j.desugar(ctx, flags, outputFile, jarName)
}
@@ -808,7 +809,11 @@ func (j *Module) compile(ctx android.ModuleContext, extraSrcJars ...android.Path
}
if ctx.Device() && j.installable() {
- outputFile = j.compileDex(ctx, flags, outputFile, jarName)
+ if fullD8 {
+ outputFile = j.compileDexFullD8(ctx, flags, outputFile, jarName)
+ } else {
+ outputFile = j.compileDex(ctx, flags, outputFile, jarName)
+ }
if ctx.Failed() {
return
}
@@ -896,15 +901,6 @@ func (j *Module) compileDex(ctx android.ModuleContext, flags javaBuilderFlags,
classesJar android.Path, jarName string) android.Path {
dxFlags := j.deviceProperties.Dxflags
- if false /* emma enabled */ {
- // If you instrument class files that have local variable debug information in
- // them emma does not correctly maintain the local variable table.
- // This will cause an error when you try to convert the class files for Android.
- // The workaround here is to build different dex file here based on emma switch
- // then later copy into classes.dex. When emma is on, dx is run with --no-locals
- // option to remove local variable information
- dxFlags = append(dxFlags, "--no-locals")
- }
if ctx.Config().Getenv("NO_OPTIMIZE_DX") != "" {
dxFlags = append(dxFlags, "--no-optimize")
@@ -930,6 +926,51 @@ func (j *Module) compileDex(ctx android.ModuleContext, flags javaBuilderFlags,
return javalibJar
}
+func (j *Module) compileDexFullD8(ctx android.ModuleContext, flags javaBuilderFlags,
+ classesJar android.Path, jarName string) android.Path {
+
+ // Translate all the DX flags to D8 ones until all the build files have been migrated
+ // to D8 flags. See: b/69377755
+ var dxFlags []string
+ for _, x := range j.deviceProperties.Dxflags {
+ if x == "--core-library" {
+ continue
+ }
+ if x == "--dex" {
+ continue
+ }
+ if x == "--multi-dex" {
+ continue
+ }
+ if x == "--no-locals" {
+ dxFlags = append(dxFlags, "--release")
+ continue
+ }
+ dxFlags = append(dxFlags, x)
+ }
+
+ if ctx.AConfig().Getenv("NO_OPTIMIZE_DX") != "" {
+ dxFlags = append(dxFlags, "--debug")
+ }
+
+ if ctx.AConfig().Getenv("GENERATE_DEX_DEBUG") != "" {
+ dxFlags = append(dxFlags,
+ "--debug",
+ "--verbose")
+ }
+
+ dxFlags = append(dxFlags, "--min-api "+j.minSdkVersionNumber(ctx))
+
+ flags.dxFlags = strings.Join(dxFlags, " ")
+
+ // Compile classes.jar into classes.dex and then javalib.jar
+ javalibJar := android.PathForModuleOut(ctx, "dex", jarName)
+ TransformClassesJarToDexJar(ctx, javalibJar, classesJar, flags)
+
+ j.dexJarFile = javalibJar
+ return javalibJar
+}
+
// Returns a sdk version as a string that is guaranteed to be a parseable as a number. For
// modules targeting an unreleased SDK (meaning it does not yet have a number) it returns "10000".
func (j *Module) minSdkVersionNumber(ctx android.ModuleContext) string {
@@ -1031,7 +1072,7 @@ type Binary struct {
isWrapperVariant bool
- wrapperFile android.SourcePath
+ wrapperFile android.Path
binaryFile android.OutputPath
}
@@ -1048,7 +1089,13 @@ func (j *Binary) GenerateAndroidBuildActions(ctx android.ModuleContext) {
j.isWrapperVariant = true
if String(j.binaryProperties.Wrapper) != "" {
- j.wrapperFile = android.PathForModuleSrc(ctx, String(j.binaryProperties.Wrapper)).SourcePath
+ wrapperSrcs := ctx.ExpandSources([]string{String(j.binaryProperties.Wrapper)}, nil)
+ if len(wrapperSrcs) == 1 {
+ j.wrapperFile = wrapperSrcs[0]
+ } else {
+ ctx.PropertyErrorf("wrapper", "module providing wrapper must produce exactly one file")
+ return
+ }
} else {
j.wrapperFile = android.PathForSource(ctx, "build/soong/scripts/jar-wrapper.sh")
}
@@ -1065,6 +1112,8 @@ func (j *Binary) GenerateAndroidBuildActions(ctx android.ModuleContext) {
func (j *Binary) DepsMutator(ctx android.BottomUpMutatorContext) {
if ctx.Arch().ArchType == android.Common {
j.deps(ctx)
+ } else {
+ android.ExtractSourcesDeps(ctx, []string{String(j.binaryProperties.Wrapper)})
}
}