diff options
Diffstat (limited to 'java/java.go')
| -rw-r--r-- | java/java.go | 75 |
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)}) } } |