Make dex_preopt.enable_prof_rewrite=false an error for optimized apps
If profile guided dexpreopt _and_ optimization/obfuscation is true, then apps must use the rewritten profile created by r8/d8 Bug: 335418838 Test: m nothing --no-skip-soong-tests Change-Id: Iac45b614f43e52ac40ad1d13df0338bcafa788c3
This commit is contained in:
@@ -1650,6 +1650,11 @@ func (j *Module) compile(ctx android.ModuleContext, extraSrcJars, extraClasspath
|
|||||||
classesJar: implementationAndResourcesJar,
|
classesJar: implementationAndResourcesJar,
|
||||||
jarName: jarName,
|
jarName: jarName,
|
||||||
}
|
}
|
||||||
|
if j.GetProfileGuided() && j.optimizeOrObfuscateEnabled() && !j.EnableProfileRewriting() {
|
||||||
|
ctx.PropertyErrorf("enable_profile_rewriting",
|
||||||
|
"Enable_profile_rewriting must be true when profile_guided dexpreopt and R8 optimization/obfuscation is turned on. The attached profile should be sourced from an unoptimized/unobfuscated APK.",
|
||||||
|
)
|
||||||
|
}
|
||||||
if j.EnableProfileRewriting() {
|
if j.EnableProfileRewriting() {
|
||||||
profile := j.GetProfile()
|
profile := j.GetProfile()
|
||||||
if profile == "" || !j.GetProfileGuided() {
|
if profile == "" || !j.GetProfileGuided() {
|
||||||
|
@@ -119,6 +119,10 @@ func (d *DexProperties) optimizedResourceShrinkingEnabled(ctx android.ModuleCont
|
|||||||
return d.resourceShrinkingEnabled(ctx) && Bool(d.Optimize.Optimized_shrink_resources)
|
return d.resourceShrinkingEnabled(ctx) && Bool(d.Optimize.Optimized_shrink_resources)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (d *dexer) optimizeOrObfuscateEnabled() bool {
|
||||||
|
return d.effectiveOptimizeEnabled() && (proptools.Bool(d.dexProperties.Optimize.Optimize) || proptools.Bool(d.dexProperties.Optimize.Obfuscate))
|
||||||
|
}
|
||||||
|
|
||||||
var d8, d8RE = pctx.MultiCommandRemoteStaticRules("d8",
|
var d8, d8RE = pctx.MultiCommandRemoteStaticRules("d8",
|
||||||
blueprint.RuleParams{
|
blueprint.RuleParams{
|
||||||
Command: `rm -rf "$outDir" && mkdir -p "$outDir" && ` +
|
Command: `rm -rf "$outDir" && mkdir -p "$outDir" && ` +
|
||||||
|
@@ -689,3 +689,27 @@ func TestR8FlagsArtProfile(t *testing.T) {
|
|||||||
"--create-profile-from=out/soong/.intermediates/app/android_common/profile.prof.txt --output-profile-type=app",
|
"--create-profile-from=out/soong/.intermediates/app/android_common/profile.prof.txt --output-profile-type=app",
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// This test checks that users explicitly set `enable_profile_rewriting` to true when the following are true
|
||||||
|
// 1. optimize or obfuscate is enabled AND
|
||||||
|
// 2. dex_preopt.profile_guided is enabled
|
||||||
|
//
|
||||||
|
// The rewritten profile should be used since the dex signatures in the checked-in profile will not match the optimized binary.
|
||||||
|
func TestEnableProfileRewritingIsRequiredForOptimizedApps(t *testing.T) {
|
||||||
|
testJavaError(t,
|
||||||
|
"Enable_profile_rewriting must be true when profile_guided dexpreopt and R8 optimization/obfuscation is turned on",
|
||||||
|
`
|
||||||
|
android_app {
|
||||||
|
name: "app",
|
||||||
|
srcs: ["foo.java"],
|
||||||
|
platform_apis: true,
|
||||||
|
dex_preopt: {
|
||||||
|
profile_guided: true,
|
||||||
|
profile: "profile.txt.prof",
|
||||||
|
// enable_profile_rewriting is not set, this is an error
|
||||||
|
},
|
||||||
|
optimize: {
|
||||||
|
optimize: true,
|
||||||
|
}
|
||||||
|
}`)
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user