From 014a85712d14072aac171a972e3e2fbe3ccd0912 Mon Sep 17 00:00:00 2001 From: Baligh Uddin Date: Fri, 17 Jan 2020 20:37:58 -0800 Subject: [PATCH] Allow codename.fingerprint format for minSdkVersion Use codename.fingerprint format for minSdkVersion if it is unset in the manifest and UNBUNDLED_BUILD_TARGET_SDK_WITH_API_FINGERPRINT=true. Using a utility function in sdk.go to check whether to apply api.fingerprint. BUG: 130541924 Change-Id: I748a25c419033bf54b63171d334644fcd0ecc78f --- apex/builder.go | 16 +++++++++------- java/android_manifest.go | 14 ++++++-------- java/sdk.go | 20 ++++++++++++++++++-- 3 files changed, 33 insertions(+), 17 deletions(-) diff --git a/apex/builder.go b/apex/builder.go index 912218864..290c1ea90 100644 --- a/apex/builder.go +++ b/apex/builder.go @@ -376,15 +376,17 @@ func (a *apexBundle) buildUnflattenedApex(ctx android.ModuleContext) { } targetSdkVersion := ctx.Config().DefaultAppTargetSdk() - if targetSdkVersion == ctx.Config().PlatformSdkCodename() && - ctx.Config().UnbundledBuild() && - !ctx.Config().UnbundledBuildUsePrebuiltSdks() && - ctx.Config().IsEnvTrue("UNBUNDLED_BUILD_TARGET_SDK_WITH_API_FINGERPRINT") { - apiFingerprint := java.ApiFingerprintPath(ctx) - targetSdkVersion += fmt.Sprintf(".$$(cat %s)", apiFingerprint.String()) - implicitInputs = append(implicitInputs, apiFingerprint) + minSdkVersion := ctx.Config().DefaultAppTargetSdk() + if java.UseApiFingerprint(ctx, targetSdkVersion) { + targetSdkVersion += fmt.Sprintf(".$$(cat %s)", java.ApiFingerprintPath(ctx).String()) + implicitInputs = append(implicitInputs, java.ApiFingerprintPath(ctx)) + } + if java.UseApiFingerprint(ctx, minSdkVersion) { + minSdkVersion += fmt.Sprintf(".$$(cat %s)", java.ApiFingerprintPath(ctx).String()) + implicitInputs = append(implicitInputs, java.ApiFingerprintPath(ctx)) } optFlags = append(optFlags, "--target_sdk_version "+targetSdkVersion) + optFlags = append(optFlags, "--min_sdk_version "+minSdkVersion) noticeFile := a.buildNoticeFile(ctx, a.Name()+suffix) if noticeFile.Valid() { diff --git a/java/android_manifest.go b/java/android_manifest.go index 021883e60..dc7a3fc7e 100644 --- a/java/android_manifest.go +++ b/java/android_manifest.go @@ -93,13 +93,11 @@ func manifestFixer(ctx android.ModuleContext, manifest android.Path, sdkContext var deps android.Paths targetSdkVersion := sdkVersionOrDefault(ctx, sdkContext.targetSdkVersion()) - if targetSdkVersion == ctx.Config().PlatformSdkCodename() && - ctx.Config().UnbundledBuild() && - !ctx.Config().UnbundledBuildUsePrebuiltSdks() && - ctx.Config().IsEnvTrue("UNBUNDLED_BUILD_TARGET_SDK_WITH_API_FINGERPRINT") { - apiFingerprint := ApiFingerprintPath(ctx) - targetSdkVersion += fmt.Sprintf(".$$(cat %s)", apiFingerprint.String()) - deps = append(deps, apiFingerprint) + minSdkVersion := sdkVersionOrDefault(ctx, sdkContext.minSdkVersion()) + if (UseApiFingerprint(ctx, sdkContext.targetSdkVersion()) || + UseApiFingerprint(ctx, sdkContext.minSdkVersion())) { + apiFingerprint := ApiFingerprintPath(ctx) + deps = append(deps, apiFingerprint) } fixedManifest := android.PathForModuleOut(ctx, "manifest_fixer", "AndroidManifest.xml") @@ -110,7 +108,7 @@ func manifestFixer(ctx android.ModuleContext, manifest android.Path, sdkContext Implicits: deps, Output: fixedManifest, Args: map[string]string{ - "minSdkVersion": sdkVersionOrDefault(ctx, sdkContext.minSdkVersion()), + "minSdkVersion": minSdkVersion, "targetSdkVersion": targetSdkVersion, "args": strings.Join(args, " "), }, diff --git a/java/sdk.go b/java/sdk.go index 66eb284ba..73b7dcf78 100644 --- a/java/sdk.go +++ b/java/sdk.go @@ -47,13 +47,29 @@ type sdkContext interface { targetSdkVersion() string } +func UseApiFingerprint(ctx android.BaseModuleContext, v string) bool { + if v == ctx.Config().PlatformSdkCodename() && + ctx.Config().UnbundledBuild() && + !ctx.Config().UnbundledBuildUsePrebuiltSdks() && + ctx.Config().IsEnvTrue("UNBUNDLED_BUILD_TARGET_SDK_WITH_API_FINGERPRINT") { + return true + } + return false +} + func sdkVersionOrDefault(ctx android.BaseModuleContext, v string) string { + var sdkVersion string switch v { case "", "none", "current", "test_current", "system_current", "core_current", "core_platform": - return ctx.Config().DefaultAppTargetSdk() + sdkVersion = ctx.Config().DefaultAppTargetSdk() default: - return v + sdkVersion = v } + if UseApiFingerprint(ctx, sdkVersion) { + apiFingerprint := ApiFingerprintPath(ctx) + sdkVersion += fmt.Sprintf(".$$(cat %s)", apiFingerprint.String()) + } + return sdkVersion } // Returns a sdk version as a number. For modules targeting an unreleased SDK (meaning it does not yet have a number)