Merge changes I4e7aa1a3,Ic0cd2411

* changes:
  Fix DONT_UNCOMPRESS_PRIV_APPS_DEXS for `android_app_import`.
  Add tests for uncompressed dex for `android_app_import`.
This commit is contained in:
Ulyana Trafimovich 2021-09-02 15:20:58 +00:00 committed by Gerrit Code Review
commit 2e380e7971
2 changed files with 75 additions and 3 deletions

View file

@ -204,9 +204,9 @@ func (a *AndroidAppImport) shouldUncompressDex(ctx android.ModuleContext) bool {
return false return false
} }
// Uncompress dex in APKs of privileged apps // Uncompress dex in APKs of priv-apps if and only if DONT_UNCOMPRESS_PRIV_APPS_DEXS is false.
if ctx.Config().UncompressPrivAppDex() && a.Privileged() { if a.Privileged() {
return true return ctx.Config().UncompressPrivAppDex()
} }
return shouldUncompressDex(ctx, &a.dexpreopter) return shouldUncompressDex(ctx, &a.dexpreopter)

View file

@ -15,6 +15,7 @@
package java package java
import ( import (
"fmt"
"reflect" "reflect"
"regexp" "regexp"
"strings" "strings"
@ -656,3 +657,74 @@ func TestAndroidTestImport_Preprocessed(t *testing.T) {
} }
} }
} }
func TestAndroidTestImport_UncompressDex(t *testing.T) {
testCases := []struct {
name string
bp string
}{
{
name: "normal",
bp: `
android_app_import {
name: "foo",
presigned: true,
apk: "prebuilts/apk/app.apk",
}
`,
},
{
name: "privileged",
bp: `
android_app_import {
name: "foo",
presigned: true,
privileged: true,
apk: "prebuilts/apk/app.apk",
}
`,
},
}
test := func(t *testing.T, bp string, unbundled bool, dontUncompressPrivAppDexs bool) {
t.Helper()
result := android.GroupFixturePreparers(
prepareForJavaTest,
android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) {
if unbundled {
variables.Unbundled_build = proptools.BoolPtr(true)
}
variables.UncompressPrivAppDex = proptools.BoolPtr(!dontUncompressPrivAppDexs)
}),
).RunTestWithBp(t, bp)
foo := result.ModuleForTests("foo", "android_common")
actual := foo.MaybeRule("uncompress-dex").Rule != nil
expect := !unbundled
if strings.Contains(bp, "privileged: true") {
if dontUncompressPrivAppDexs {
expect = false
} else {
// TODO(b/194504107): shouldn't priv-apps be always uncompressed unless
// DONT_UNCOMPRESS_PRIV_APPS_DEXS is true (regardless of unbundling)?
// expect = true
}
}
android.AssertBoolEquals(t, "uncompress dex", expect, actual)
}
for _, unbundled := range []bool{false, true} {
for _, dontUncompressPrivAppDexs := range []bool{false, true} {
for _, tt := range testCases {
name := fmt.Sprintf("%s,unbundled:%t,dontUncompressPrivAppDexs:%t",
tt.name, unbundled, dontUncompressPrivAppDexs)
t.Run(name, func(t *testing.T) {
test(t, tt.bp, unbundled, dontUncompressPrivAppDexs)
})
}
}
}
}