Merge "Add preprocessed property for android_test_import" am: 42ada5cff3
Change-Id: Ie29e07ede82444235182a79aa74939e9358e7389
This commit is contained in:
commit
3d075275c2
24
java/app.go
24
java/app.go
|
@ -1257,6 +1257,8 @@ type AndroidAppImport struct {
|
||||||
|
|
||||||
usesLibrary usesLibrary
|
usesLibrary usesLibrary
|
||||||
|
|
||||||
|
preprocessed bool
|
||||||
|
|
||||||
installPath android.InstallPath
|
installPath android.InstallPath
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1349,7 +1351,7 @@ func (a *AndroidAppImport) uncompressEmbeddedJniLibs(
|
||||||
ctx android.ModuleContext, inputPath android.Path, outputPath android.OutputPath) {
|
ctx android.ModuleContext, inputPath android.Path, outputPath android.OutputPath) {
|
||||||
// Test apps don't need their JNI libraries stored uncompressed. As a matter of fact, messing
|
// Test apps don't need their JNI libraries stored uncompressed. As a matter of fact, messing
|
||||||
// with them may invalidate pre-existing signature data.
|
// with them may invalidate pre-existing signature data.
|
||||||
if ctx.InstallInTestcases() && Bool(a.properties.Presigned) {
|
if ctx.InstallInTestcases() && (Bool(a.properties.Presigned) || a.preprocessed) {
|
||||||
ctx.Build(pctx, android.BuildParams{
|
ctx.Build(pctx, android.BuildParams{
|
||||||
Rule: android.Cp,
|
Rule: android.Cp,
|
||||||
Output: outputPath,
|
Output: outputPath,
|
||||||
|
@ -1370,7 +1372,7 @@ func (a *AndroidAppImport) uncompressEmbeddedJniLibs(
|
||||||
|
|
||||||
// Returns whether this module should have the dex file stored uncompressed in the APK.
|
// Returns whether this module should have the dex file stored uncompressed in the APK.
|
||||||
func (a *AndroidAppImport) shouldUncompressDex(ctx android.ModuleContext) bool {
|
func (a *AndroidAppImport) shouldUncompressDex(ctx android.ModuleContext) bool {
|
||||||
if ctx.Config().UnbundledBuild() {
|
if ctx.Config().UnbundledBuild() || a.preprocessed {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1462,9 +1464,13 @@ func (a *AndroidAppImport) generateAndroidBuildActions(ctx android.ModuleContext
|
||||||
|
|
||||||
apkFilename := proptools.StringDefault(a.properties.Filename, a.BaseModuleName()+".apk")
|
apkFilename := proptools.StringDefault(a.properties.Filename, a.BaseModuleName()+".apk")
|
||||||
|
|
||||||
// Sign or align the package
|
|
||||||
// TODO: Handle EXTERNAL
|
// TODO: Handle EXTERNAL
|
||||||
if !Bool(a.properties.Presigned) {
|
|
||||||
|
// Sign or align the package if package has not been preprocessed
|
||||||
|
if a.preprocessed {
|
||||||
|
a.outputFile = srcApk
|
||||||
|
a.certificate = presignedCertificate
|
||||||
|
} else if !Bool(a.properties.Presigned) {
|
||||||
// If the certificate property is empty at this point, default_dev_cert must be set to true.
|
// If the certificate property is empty at this point, default_dev_cert must be set to true.
|
||||||
// Which makes processMainCert's behavior for the empty cert string WAI.
|
// Which makes processMainCert's behavior for the empty cert string WAI.
|
||||||
certificates = processMainCert(a.ModuleBase, String(a.properties.Certificate), certificates, ctx)
|
certificates = processMainCert(a.ModuleBase, String(a.properties.Certificate), certificates, ctx)
|
||||||
|
@ -1609,15 +1615,24 @@ func AndroidAppImportFactory() android.Module {
|
||||||
return module
|
return module
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type androidTestImportProperties struct {
|
||||||
|
// Whether the prebuilt apk can be installed without additional processing. Default is false.
|
||||||
|
Preprocessed *bool
|
||||||
|
}
|
||||||
|
|
||||||
type AndroidTestImport struct {
|
type AndroidTestImport struct {
|
||||||
AndroidAppImport
|
AndroidAppImport
|
||||||
|
|
||||||
testProperties testProperties
|
testProperties testProperties
|
||||||
|
|
||||||
|
testImportProperties androidTestImportProperties
|
||||||
|
|
||||||
data android.Paths
|
data android.Paths
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *AndroidTestImport) GenerateAndroidBuildActions(ctx android.ModuleContext) {
|
func (a *AndroidTestImport) GenerateAndroidBuildActions(ctx android.ModuleContext) {
|
||||||
|
a.preprocessed = Bool(a.testImportProperties.Preprocessed)
|
||||||
|
|
||||||
a.generateAndroidBuildActions(ctx)
|
a.generateAndroidBuildActions(ctx)
|
||||||
|
|
||||||
a.data = android.PathsForModuleSrc(ctx, a.testProperties.Data)
|
a.data = android.PathsForModuleSrc(ctx, a.testProperties.Data)
|
||||||
|
@ -1635,6 +1650,7 @@ func AndroidTestImportFactory() android.Module {
|
||||||
module.AddProperties(&module.dexpreoptProperties)
|
module.AddProperties(&module.dexpreoptProperties)
|
||||||
module.AddProperties(&module.usesLibrary.usesLibraryProperties)
|
module.AddProperties(&module.usesLibrary.usesLibraryProperties)
|
||||||
module.AddProperties(&module.testProperties)
|
module.AddProperties(&module.testProperties)
|
||||||
|
module.AddProperties(&module.testImportProperties)
|
||||||
module.populateAllVariantStructs()
|
module.populateAllVariantStructs()
|
||||||
android.AddLoadHook(module, func(ctx android.LoadHookContext) {
|
android.AddLoadHook(module, func(ctx android.LoadHookContext) {
|
||||||
module.processVariants(ctx)
|
module.processVariants(ctx)
|
||||||
|
|
|
@ -2369,6 +2369,45 @@ func TestAndroidTestImport_NoJinUncompressForPresigned(t *testing.T) {
|
||||||
if jniRule != android.Cp.String() {
|
if jniRule != android.Cp.String() {
|
||||||
t.Errorf("Unexpected JNI uncompress rule: " + jniRule)
|
t.Errorf("Unexpected JNI uncompress rule: " + jniRule)
|
||||||
}
|
}
|
||||||
|
if variant.MaybeOutput("zip-aligned/foo_presigned.apk").Rule == nil {
|
||||||
|
t.Errorf("Presigned test apk should be aligned")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestAndroidTestImport_Preprocessed(t *testing.T) {
|
||||||
|
ctx, _ := testJava(t, `
|
||||||
|
android_test_import {
|
||||||
|
name: "foo",
|
||||||
|
apk: "prebuilts/apk/app.apk",
|
||||||
|
presigned: true,
|
||||||
|
preprocessed: true,
|
||||||
|
}
|
||||||
|
|
||||||
|
android_test_import {
|
||||||
|
name: "foo_cert",
|
||||||
|
apk: "prebuilts/apk/app.apk",
|
||||||
|
certificate: "cert/new_cert",
|
||||||
|
preprocessed: true,
|
||||||
|
}
|
||||||
|
`)
|
||||||
|
|
||||||
|
testModules := []string{"foo", "foo_cert"}
|
||||||
|
for _, m := range testModules {
|
||||||
|
apkName := m + ".apk"
|
||||||
|
variant := ctx.ModuleForTests(m, "android_common")
|
||||||
|
jniRule := variant.Output("jnis-uncompressed/" + apkName).BuildParams.Rule.String()
|
||||||
|
if jniRule != android.Cp.String() {
|
||||||
|
t.Errorf("Unexpected JNI uncompress rule: " + jniRule)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Make sure signing and aligning were skipped.
|
||||||
|
if variant.MaybeOutput("signed/"+apkName).Rule != nil {
|
||||||
|
t.Errorf("signing rule shouldn't be included for preprocessed.")
|
||||||
|
}
|
||||||
|
if variant.MaybeOutput("zip-aligned/"+apkName).Rule != nil {
|
||||||
|
t.Errorf("aligning rule shouldn't be for preprocessed")
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestStl(t *testing.T) {
|
func TestStl(t *testing.T) {
|
||||||
|
|
Loading…
Reference in New Issue