Merge "Uncompress dex in unbundled privileged apps"

This commit is contained in:
Treehugger Robot
2019-06-26 00:51:45 +00:00
committed by Gerrit Code Review
3 changed files with 90 additions and 5 deletions

View File

@@ -216,6 +216,7 @@ func TestConfig(buildDir string, env map[string]string) Config {
AAPTPreferredConfig: stringPtr("xhdpi"),
AAPTCharacteristics: stringPtr("nosdcard"),
AAPTPrebuiltDPI: []string{"xhdpi", "xxhdpi"},
UncompressPrivAppDex: boolPtr(true),
},
buildDir: buildDir,

View File

@@ -229,15 +229,16 @@ func (a *AndroidApp) shouldUncompressDex(ctx android.ModuleContext) bool {
return true
}
if ctx.Config().UnbundledBuild() {
return false
}
// Uncompress dex in APKs of privileged apps
// Uncompress dex in APKs of privileged apps (even for unbundled builds, they may
// be preinstalled as prebuilts).
if ctx.Config().UncompressPrivAppDex() && Bool(a.appProperties.Privileged) {
return true
}
if ctx.Config().UnbundledBuild() {
return false
}
return shouldUncompressDex(ctx, &a.dexpreopter)
}

View File

@@ -1491,3 +1491,86 @@ func TestEmbedNotice(t *testing.T) {
t.Errorf("mergeNotices shouldn't have run for baz")
}
}
func TestUncompressDex(t *testing.T) {
testCases := []struct {
name string
bp string
uncompressedPlatform bool
uncompressedUnbundled bool
}{
{
name: "normal",
bp: `
android_app {
name: "foo",
srcs: ["a.java"],
}
`,
uncompressedPlatform: true,
uncompressedUnbundled: false,
},
{
name: "use_embedded_dex",
bp: `
android_app {
name: "foo",
use_embedded_dex: true,
srcs: ["a.java"],
}
`,
uncompressedPlatform: true,
uncompressedUnbundled: true,
},
{
name: "privileged",
bp: `
android_app {
name: "foo",
privileged: true,
srcs: ["a.java"],
}
`,
uncompressedPlatform: true,
uncompressedUnbundled: true,
},
}
test := func(t *testing.T, bp string, want bool, unbundled bool) {
t.Helper()
config := testConfig(nil)
if unbundled {
config.TestProductVariables.Unbundled_build = proptools.BoolPtr(true)
}
ctx := testAppContext(config, bp, nil)
run(t, ctx, config)
foo := ctx.ModuleForTests("foo", "android_common")
dex := foo.Rule("r8")
uncompressedInDexJar := strings.Contains(dex.Args["zipFlags"], "-L 0")
aligned := foo.MaybeRule("zipalign").Rule != nil
if uncompressedInDexJar != want {
t.Errorf("want uncompressed in dex %v, got %v", want, uncompressedInDexJar)
}
if aligned != want {
t.Errorf("want aligned %v, got %v", want, aligned)
}
}
for _, tt := range testCases {
t.Run(tt.name, func(t *testing.T) {
t.Run("platform", func(t *testing.T) {
test(t, tt.bp, tt.uncompressedPlatform, false)
})
t.Run("unbundled", func(t *testing.T) {
test(t, tt.bp, tt.uncompressedUnbundled, true)
})
})
}
}