From ca1d63eac32590e1a706b74141ea7b0205821e50 Mon Sep 17 00:00:00 2001 From: Spandan Das Date: Mon, 1 Jul 2024 22:53:49 +0000 Subject: [PATCH] Min_sdk_version check for updatable apexes Updatable apexes should not min_sdk_version to `current`, since `current` can have different meanings based on when plaform finalization happens. Test: m nothing --no-skip-soong-tests Bug: 221087384 Change-Id: I04aaa4a331027b7afbf6ccdb9cbf3ae670827c9f --- apex/apex.go | 8 ++++++++ apex/apex_test.go | 17 +++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/apex/apex.go b/apex/apex.go index e6815bc29..f2dfb848a 100644 --- a/apex/apex.go +++ b/apex/apex.go @@ -2709,12 +2709,20 @@ func (a *apexBundle) checkStaticLinkingToStubLibraries(ctx android.ModuleContext }) } +// TODO (b/221087384): Remove this allowlist +var ( + updatableApexesWithCurrentMinSdkVersionAllowlist = []string{"com.android.profiling"} +) + // checkUpdatable enforces APEX and its transitive dep properties to have desired values for updatable APEXes. func (a *apexBundle) checkUpdatable(ctx android.ModuleContext) { if a.Updatable() { if a.minSdkVersionValue(ctx) == "" { ctx.PropertyErrorf("updatable", "updatable APEXes should set min_sdk_version as well") } + if a.minSdkVersion(ctx).IsCurrent() && !android.InList(ctx.ModuleName(), updatableApexesWithCurrentMinSdkVersionAllowlist) { + ctx.PropertyErrorf("updatable", "updatable APEXes should not set min_sdk_version to current. Please use a finalized API level or a recognized in-development codename") + } if a.UsePlatformApis() { ctx.PropertyErrorf("updatable", "updatable APEXes can't use platform APIs") } diff --git a/apex/apex_test.go b/apex/apex_test.go index 3bb396692..34e7dee2b 100644 --- a/apex/apex_test.go +++ b/apex/apex_test.go @@ -11803,3 +11803,20 @@ func TestOverrideApexWithPrebuiltApexPreferred(t *testing.T) { java.CheckModuleHasDependency(t, res.TestContext, "myoverrideapex", "android_common_myoverrideapex_myoverrideapex", "foo") } + +func TestUpdatableApexMinSdkVersionCurrent(t *testing.T) { + testApexError(t, `"myapex" .*: updatable: updatable APEXes should not set min_sdk_version to current. Please use a finalized API level or a recognized in-development codename`, ` + apex { + name: "myapex", + key: "myapex.key", + updatable: true, + min_sdk_version: "current", + } + + apex_key { + name: "myapex.key", + public_key: "testkey.avbpubkey", + private_key: "testkey.pem", + } + `) +}