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
Merged-In: I6243d276e5ab25a1007187ad34789ca1b4cc87bf
Exempt-From-Owner-Approval: cherry-pick from aosp
(cherry picked from commit f40fc858a2)
This commit is contained in:
Artur Satayev 2020-04-16 13:43:02 +01:00
parent 7aa5899e56
commit 1196210718
2 changed files with 25 additions and 1 deletions

View File

@ -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
}
@ -255,6 +257,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)

View File

@ -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 {