aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorColin Cross <ccross@android.com>2018-04-18 23:13:54 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2018-04-18 23:13:54 +0000
commite13f0fec3c1e9be3dc2fb2bf6cd00f0639e9ab70 (patch)
tree58b855186b366a78c9bb8fde3fac83bd0e414fce
parent31db990217b3dc51842fe86218b2fc74dc3faeaf (diff)
parente20c1b19045c880e6dfe6bce7c00e7bce0c20318 (diff)
downloadbuild_soong-e13f0fec3c1e9be3dc2fb2bf6cd00f0639e9ab70.tar.gz
build_soong-e13f0fec3c1e9be3dc2fb2bf6cd00f0639e9ab70.tar.bz2
build_soong-e13f0fec3c1e9be3dc2fb2bf6cd00f0639e9ab70.zip
Merge "Fix aapt2 --min-sdk-version after finalized SDK" into pi-dev
-rw-r--r--android/config.go12
-rw-r--r--android/variable.go1
-rw-r--r--java/app.go2
-rw-r--r--java/app_test.go93
4 files changed, 107 insertions, 1 deletions
diff --git a/android/config.go b/android/config.go
index b89ae488..549abe91 100644
--- a/android/config.go
+++ b/android/config.go
@@ -476,6 +476,10 @@ func (c *config) PlatformSdkVersion() string {
return strconv.Itoa(c.PlatformSdkVersionInt())
}
+func (c *config) PlatformSdkCodename() string {
+ return String(c.productVariables.Platform_sdk_codename)
+}
+
func (c *config) MinSupportedSdkVersion() int {
return 14
}
@@ -488,6 +492,14 @@ func (c *config) DefaultAppTargetSdkInt() int {
}
}
+func (c *config) DefaultAppTargetSdk() string {
+ if Bool(c.productVariables.Platform_sdk_final) {
+ return c.PlatformSdkVersion()
+ } else {
+ return c.PlatformSdkCodename()
+ }
+}
+
func (c *config) AppsDefaultVersionName() string {
return String(c.productVariables.AppsDefaultVersionName)
}
diff --git a/android/variable.go b/android/variable.go
index a386b9df..9d9830ea 100644
--- a/android/variable.go
+++ b/android/variable.go
@@ -128,6 +128,7 @@ type productVariables struct {
DateFromFile *string `json:",omitempty"`
Platform_sdk_version *int `json:",omitempty"`
+ Platform_sdk_codename *string `json:",omitempty"`
Platform_sdk_final *bool `json:",omitempty"`
Platform_version_active_codenames []string `json:",omitempty"`
Platform_version_future_codenames []string `json:",omitempty"`
diff --git a/java/app.go b/java/app.go
index c94d22f0..0db48e76 100644
--- a/java/app.go
+++ b/java/app.go
@@ -283,7 +283,7 @@ func (a *AndroidApp) aapt2Flags(ctx android.ModuleContext) (flags []string, deps
sdkVersion := String(a.deviceProperties.Sdk_version)
switch sdkVersion {
case "", "current", "system_current", "test_current":
- sdkVersion = proptools.NinjaEscape([]string{ctx.Config().AppsDefaultVersionName()})[0]
+ sdkVersion = proptools.NinjaEscape([]string{ctx.Config().DefaultAppTargetSdk()})[0]
}
linkFlags = append(linkFlags, "--min-sdk-version "+sdkVersion)
diff --git a/java/app_test.go b/java/app_test.go
index ba017a18..2e531303 100644
--- a/java/app_test.go
+++ b/java/app_test.go
@@ -16,8 +16,10 @@ package java
import (
"android/soong/android"
+ "fmt"
"reflect"
"sort"
+ "strings"
"testing"
)
@@ -237,3 +239,94 @@ func TestEnforceRRO(t *testing.T) {
})
}
}
+
+func TestAppSdkVersion(t *testing.T) {
+ testCases := []struct {
+ name string
+ sdkVersion string
+ platformSdkInt int
+ platformSdkCodename string
+ platformSdkFinal bool
+ expectedMinSdkVersion string
+ }{
+ {
+ name: "current final SDK",
+ sdkVersion: "current",
+ platformSdkInt: 27,
+ platformSdkCodename: "REL",
+ platformSdkFinal: true,
+ expectedMinSdkVersion: "27",
+ },
+ {
+ name: "current non-final SDK",
+ sdkVersion: "current",
+ platformSdkInt: 27,
+ platformSdkCodename: "OMR1",
+ platformSdkFinal: false,
+ expectedMinSdkVersion: "OMR1",
+ },
+ {
+ name: "default final SDK",
+ sdkVersion: "",
+ platformSdkInt: 27,
+ platformSdkCodename: "REL",
+ platformSdkFinal: true,
+ expectedMinSdkVersion: "27",
+ },
+ {
+ name: "default non-final SDK",
+ sdkVersion: "",
+ platformSdkInt: 27,
+ platformSdkCodename: "OMR1",
+ platformSdkFinal: false,
+ expectedMinSdkVersion: "OMR1",
+ },
+ {
+ name: "14",
+ sdkVersion: "14",
+ expectedMinSdkVersion: "14",
+ },
+ }
+
+ for _, test := range testCases {
+ t.Run(test.name, func(t *testing.T) {
+ bp := fmt.Sprintf(`android_app {
+ name: "foo",
+ srcs: ["a.java"],
+ sdk_version: "%s",
+ }`, test.sdkVersion)
+
+ config := testConfig(nil)
+ config.TestProductVariables.Platform_sdk_version = &test.platformSdkInt
+ config.TestProductVariables.Platform_sdk_codename = &test.platformSdkCodename
+ config.TestProductVariables.Platform_sdk_final = &test.platformSdkFinal
+
+ ctx := testAppContext(config, bp, nil)
+
+ run(t, ctx, config)
+
+ foo := ctx.ModuleForTests("foo", "android_common")
+ link := foo.Output("package-res.apk")
+ linkFlags := strings.Split(link.Args["flags"], " ")
+ min := android.IndexList("--min-sdk-version", linkFlags)
+ target := android.IndexList("--target-sdk-version", linkFlags)
+
+ if min == -1 || target == -1 || min == len(linkFlags)-1 || target == len(linkFlags)-1 {
+ t.Fatalf("missing --min-sdk-version or --target-sdk-version in link flags: %q", linkFlags)
+ }
+
+ gotMinSdkVersion := linkFlags[min+1]
+ gotTargetSdkVersion := linkFlags[target+1]
+
+ if gotMinSdkVersion != test.expectedMinSdkVersion {
+ t.Errorf("incorrect --min-sdk-version, expected %q got %q",
+ test.expectedMinSdkVersion, gotMinSdkVersion)
+ }
+
+ if gotTargetSdkVersion != test.expectedMinSdkVersion {
+ t.Errorf("incorrect --target-sdk-version, expected %q got %q",
+ test.expectedMinSdkVersion, gotTargetSdkVersion)
+ }
+ })
+ }
+}