From 05ca7c8769de5f70b08dc6607f8e8c4a8a6e7f60 Mon Sep 17 00:00:00 2001 From: Colin Cross Date: Wed, 4 Aug 2021 10:52:44 -0700 Subject: [PATCH] Pass jars with resources to R8 R8 will parse proguard files out of resources in injars. Use the jar with resources instead of the classes jar so that R8 can see the proguard files. R8 fails when an input jar contains dex files, so filter out dex files from the input jar before passing it to r8. Bug: 195558228 Test: m checkbuild Change-Id: Ibb870ee9c70470336f542a3b7542dab86716dbf8 --- java/base.go | 2 +- java/dex.go | 8 ++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/java/base.go b/java/base.go index 6b8119619..d8cd6b3c1 100644 --- a/java/base.go +++ b/java/base.go @@ -1230,7 +1230,7 @@ func (j *Module) compile(ctx android.ModuleContext, aaptSrcJar android.Path) { } // Dex compilation var dexOutputFile android.OutputPath - dexOutputFile = j.dexer.compileDex(ctx, flags, j.MinSdkVersion(ctx), outputFile, jarName) + dexOutputFile = j.dexer.compileDex(ctx, flags, j.MinSdkVersion(ctx), implementationAndResourcesJar, jarName) if ctx.Failed() { return } diff --git a/java/dex.go b/java/dex.go index 6bf0143b1..8b7e3bab4 100644 --- a/java/dex.go +++ b/java/dex.go @@ -92,11 +92,13 @@ func init() { var d8, d8RE = pctx.MultiCommandRemoteStaticRules("d8", blueprint.RuleParams{ Command: `rm -rf "$outDir" && mkdir -p "$outDir" && ` + - `$d8Template${config.D8Cmd} ${config.DexFlags} --output $outDir $d8Flags $in && ` + + `${config.Zip2ZipCmd} -i $in -o $outDir/in.jar -x '**/*.dex' &&` + + `$d8Template${config.D8Cmd} ${config.DexFlags} --output $outDir $d8Flags $outDir/in.jar && ` + `$zipTemplate${config.SoongZipCmd} $zipFlags -o $outDir/classes.dex.jar -C $outDir -f "$outDir/classes*.dex" && ` + `${config.MergeZipsCmd} -D -stripFile "**/*.class" $out $outDir/classes.dex.jar $in`, CommandDeps: []string{ "${config.D8Cmd}", + "${config.Zip2ZipCmd}", "${config.SoongZipCmd}", "${config.MergeZipsCmd}", }, @@ -122,10 +124,11 @@ var r8, r8RE = pctx.MultiCommandRemoteStaticRules("r8", Command: `rm -rf "$outDir" && mkdir -p "$outDir" && ` + `rm -f "$outDict" && rm -rf "${outUsageDir}" && ` + `mkdir -p $$(dirname ${outUsage}) && ` + + `${config.Zip2ZipCmd} -i $in -o $outDir/in.jar -x '**/*.dex' &&` + // TODO(b/181095653): remove R8 timeout and go back to config.R8Cmd. `${runWithTimeoutCmd} -timeout 30m -on_timeout '${jstackCmd} $$PID' -- ` + `$r8Template${config.JavaCmd} ${config.DexJavaFlags} -cp ${config.R8Jar} ` + - `com.android.tools.r8.compatproguard.CompatProguard -injars $in --output $outDir ` + + `com.android.tools.r8.compatproguard.CompatProguard -injars $outDir/in.jar --output $outDir ` + `--no-data-resources ` + `-printmapping ${outDict} ` + `-printusage ${outUsage} ` + @@ -137,6 +140,7 @@ var r8, r8RE = pctx.MultiCommandRemoteStaticRules("r8", `${config.MergeZipsCmd} -D -stripFile "**/*.class" $out $outDir/classes.dex.jar $in`, CommandDeps: []string{ "${config.R8Jar}", + "${config.Zip2ZipCmd}", "${config.SoongZipCmd}", "${config.MergeZipsCmd}", "${runWithTimeoutCmd}",