Support sdk_version: "core_current"
core_current is a pseudo SDK version which is a core Java API subset of the Android API. It is expected to be mainly used for external Java projects which are agnostic to Android; such as junit, guava, etc. A module built with this SDK version can only link to java modules of the same kind. It can't depend on modules built with other sdk (e.g. current) or without sdk. Bug: 72206056 Test: m -j Change-Id: I778e7b4fcb9456a12b418ffd633ea78e29951e84
This commit is contained in:
parent
97754359cc
commit
750e557011
2 changed files with 30 additions and 2 deletions
23
java/java.go
23
java/java.go
|
@ -315,7 +315,7 @@ type sdkDep struct {
|
|||
|
||||
func sdkStringToNumber(ctx android.BaseContext, v string) int {
|
||||
switch v {
|
||||
case "", "current", "system_current", "test_current":
|
||||
case "", "current", "system_current", "test_current", "core_current":
|
||||
return android.FutureApiLevel
|
||||
default:
|
||||
if i, err := strconv.Atoi(android.GetNumericSdkVersion(v)); err != nil {
|
||||
|
@ -361,8 +361,15 @@ func decodeSdkDep(ctx android.BaseContext, v string) sdkDep {
|
|||
}
|
||||
|
||||
toFile := func(v string) sdkDep {
|
||||
isCore := strings.HasPrefix(v, "core_")
|
||||
if isCore {
|
||||
v = strings.TrimPrefix(v, "core_")
|
||||
}
|
||||
dir := filepath.Join("prebuilts/sdk", v)
|
||||
jar := filepath.Join(dir, "android.jar")
|
||||
if isCore {
|
||||
jar = filepath.Join(dir, "core.jar")
|
||||
}
|
||||
aidl := filepath.Join(dir, "framework.aidl")
|
||||
jarPath := android.ExistentPathForSource(ctx, "sdkdir", jar)
|
||||
aidlPath := android.ExistentPathForSource(ctx, "sdkdir", aidl)
|
||||
|
@ -557,6 +564,15 @@ func checkProducesJars(ctx android.ModuleContext, dep android.SourceFileProducer
|
|||
}
|
||||
}
|
||||
|
||||
func checkLinkType(ctx android.ModuleContext, from *Module, to *Library, tag dependencyTag) {
|
||||
if strings.HasPrefix(String(from.deviceProperties.Sdk_version), "core_") {
|
||||
if !strings.HasPrefix(String(to.deviceProperties.Sdk_version), "core_") {
|
||||
ctx.ModuleErrorf("depends on other library %q using non-core Java APIs",
|
||||
ctx.OtherModuleName(to))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (j *Module) collectDeps(ctx android.ModuleContext) deps {
|
||||
var deps deps
|
||||
|
||||
|
@ -573,6 +589,9 @@ func (j *Module) collectDeps(ctx android.ModuleContext) deps {
|
|||
otherName := ctx.OtherModuleName(module)
|
||||
tag := ctx.OtherModuleDependencyTag(module)
|
||||
|
||||
if to, ok := module.(*Library); ok {
|
||||
checkLinkType(ctx, j, to, tag.(dependencyTag))
|
||||
}
|
||||
switch dep := module.(type) {
|
||||
case Dependency:
|
||||
switch tag {
|
||||
|
@ -989,7 +1008,7 @@ func (j *Module) instrument(ctx android.ModuleContext, flags javaBuilderFlags,
|
|||
// modules targeting an unreleased SDK (meaning it does not yet have a number) it returns "10000".
|
||||
func (j *Module) minSdkVersionNumber(ctx android.ModuleContext) string {
|
||||
switch String(j.deviceProperties.Sdk_version) {
|
||||
case "", "current", "test_current", "system_current":
|
||||
case "", "current", "test_current", "system_current", "core_current":
|
||||
return strconv.Itoa(ctx.Config().DefaultAppTargetSdkInt())
|
||||
default:
|
||||
return android.GetNumericSdkVersion(String(j.deviceProperties.Sdk_version))
|
||||
|
|
|
@ -146,6 +146,7 @@ func testContext(config android.Config, bp string,
|
|||
"prebuilts/sdk/14/framework.aidl": nil,
|
||||
"prebuilts/sdk/current/android.jar": nil,
|
||||
"prebuilts/sdk/current/framework.aidl": nil,
|
||||
"prebuilts/sdk/current/core.jar": nil,
|
||||
"prebuilts/sdk/system_current/android.jar": nil,
|
||||
"prebuilts/sdk/system_current/framework.aidl": nil,
|
||||
"prebuilts/sdk/system_14/android.jar": nil,
|
||||
|
@ -360,6 +361,14 @@ var classpathTestcases = []struct {
|
|||
system: "bootclasspath", // special value to tell 1.9 test to expect bootclasspath
|
||||
classpath: []string{"prebuilts/sdk/test_current/android.jar"},
|
||||
},
|
||||
{
|
||||
|
||||
name: "core_current",
|
||||
properties: `sdk_version: "core_current",`,
|
||||
bootclasspath: []string{`""`},
|
||||
system: "bootclasspath", // special value to tell 1.9 test to expect bootclasspath
|
||||
classpath: []string{"prebuilts/sdk/current/core.jar"},
|
||||
},
|
||||
{
|
||||
|
||||
name: "nostdlib",
|
||||
|
|
Loading…
Reference in a new issue