diff --git a/apex/apex.go b/apex/apex.go index 3dde14960..81c12301b 100644 --- a/apex/apex.go +++ b/apex/apex.go @@ -339,6 +339,10 @@ type apexBundleProperties struct { // binaries would be installed by default (in PRODUCT_PACKAGES) the other binary will be removed // from PRODUCT_PACKAGES. Overrides []string + + // Whenever apex_payload.img of the APEX should include dm-verity hashtree. + // Should be only used in tests#. + Test_only_no_hashtree *bool } type apexTargetBundleProperties struct { @@ -731,6 +735,10 @@ func (a *apexBundle) installable() bool { return !a.properties.PreventInstall && (a.properties.Installable == nil || proptools.Bool(a.properties.Installable)) } +func (a *apexBundle) testOnlyShouldSkipHashtreeGeneration() bool { + return proptools.Bool(a.properties.Test_only_no_hashtree) +} + func (a *apexBundle) getImageVariation(config android.DeviceConfig) string { if a.vndkApex { return cc.VendorVariationPrefix + a.vndkVersion(config) diff --git a/apex/builder.go b/apex/builder.go index 7fe0af33e..55db934da 100644 --- a/apex/builder.go +++ b/apex/builder.go @@ -375,7 +375,11 @@ func (a *apexBundle) buildUnflattenedApex(ctx android.ModuleContext) { optFlags = append(optFlags, "--assets_dir "+filepath.Dir(noticeFile.String())) } - if !ctx.Config().UnbundledBuild() && a.installable() { + if ctx.ModuleDir() != "system/apex/apexd/apexd_testdata" && a.testOnlyShouldSkipHashtreeGeneration() { + ctx.PropertyErrorf("test_only_no_hashtree", "not available") + return + } + if (!ctx.Config().UnbundledBuild() && a.installable()) || a.testOnlyShouldSkipHashtreeGeneration() { // Apexes which are supposed to be installed in builtin dirs(/system, etc) // don't need hashtree for activation. Therefore, by removing hashtree from // apex bundle (filesystem image in it, to be specific), we can save storage.