From f40fc858a2684d546a786684d78e24e5514e29e7 Mon Sep 17 00:00:00 2001 From: Artur Satayev Date: Thu, 16 Apr 2020 13:43:02 +0100 Subject: [PATCH] Do not allow updatable apps without min_sdk_version. All updatable modules are expected to declare their earliest platform version they support. Bug: 153539598 Test: m Change-Id: I6243d276e5ab25a1007187ad34789ca1b4cc87bf --- java/app.go | 7 ++++++- java/app_test.go | 19 +++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/java/app.go b/java/app.go index 7d509eea1..5577cdfd2 100755 --- a/java/app.go +++ b/java/app.go @@ -112,7 +112,9 @@ type appProperties struct { IsCoverageVariant bool `blueprint:"mutated"` // Whether this app is considered mainline updatable or not. When set to true, this will enforce - // additional rules for making sure that the APK is truly updatable. Default is false. + // additional rules to make sure an app can safely be updated. Default is false. + // Prefer using other specific properties if build behaviour must be changed; avoid using this + // flag for anything but neverallow rules (unless the behaviour change is invisible to owners). Updatable *bool } @@ -262,6 +264,9 @@ func (a *AndroidApp) checkAppSdkVersions(ctx android.ModuleContext) { if !a.sdkVersion().stable() { ctx.PropertyErrorf("sdk_version", "Updatable apps must use stable SDKs, found %v", a.sdkVersion()) } + if String(a.deviceProperties.Min_sdk_version) == "" { + ctx.PropertyErrorf("updatable", "updatable apps must set min_sdk_version.") + } } a.checkPlatformAPI(ctx) diff --git a/java/app_test.go b/java/app_test.go index 7b04e4629..4178d5eb9 100644 --- a/java/app_test.go +++ b/java/app_test.go @@ -276,6 +276,7 @@ func TestUpdatableApps(t *testing.T) { name: "foo", srcs: ["a.java"], sdk_version: "29", + min_sdk_version: "29", updatable: true, }`, }, @@ -285,6 +286,7 @@ func TestUpdatableApps(t *testing.T) { name: "foo", srcs: ["a.java"], sdk_version: "system_29", + min_sdk_version: "29", updatable: true, }`, }, @@ -294,6 +296,7 @@ func TestUpdatableApps(t *testing.T) { name: "foo", srcs: ["a.java"], sdk_version: "current", + min_sdk_version: "29", updatable: true, }`, }, @@ -303,6 +306,7 @@ func TestUpdatableApps(t *testing.T) { name: "foo", srcs: ["a.java"], sdk_version: "system_current", + min_sdk_version: "29", updatable: true, }`, }, @@ -312,6 +316,7 @@ func TestUpdatableApps(t *testing.T) { name: "foo", srcs: ["a.java"], sdk_version: "module_current", + min_sdk_version: "29", updatable: true, }`, }, @@ -321,6 +326,7 @@ func TestUpdatableApps(t *testing.T) { name: "foo", srcs: ["a.java"], sdk_version: "core_current", + min_sdk_version: "29", updatable: true, }`, }, @@ -330,6 +336,7 @@ func TestUpdatableApps(t *testing.T) { name: "foo", srcs: ["a.java"], platform_apis: true, + min_sdk_version: "29", updatable: true, }`, expectedError: "Updatable apps must use stable SDKs", @@ -340,6 +347,7 @@ func TestUpdatableApps(t *testing.T) { name: "foo", srcs: ["a.java"], sdk_version: "core_platform", + min_sdk_version: "29", updatable: true, }`, expectedError: "Updatable apps must use stable SDKs", @@ -350,9 +358,20 @@ func TestUpdatableApps(t *testing.T) { name: "foo", srcs: ["a.java"], updatable: true, + min_sdk_version: "29", }`, expectedError: "Updatable apps must use stable SDK", }, + { + name: "Must specify min_sdk_version", + bp: `android_app { + name: "app_without_min_sdk_version", + srcs: ["a.java"], + sdk_version: "29", + updatable: true, + }`, + expectedError: "updatable apps must set min_sdk_version.", + }, } for _, test := range testCases {