Skip to content

Commit

Permalink
Support sdk_version: "core_current"
Browse files Browse the repository at this point in the history
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
  • Loading branch information
jiyongp committed Feb 6, 2018
1 parent 9775435 commit 750e557
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 2 deletions.
23 changes: 21 additions & 2 deletions java/java.go
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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

Expand All @@ -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 {
Expand Down Expand Up @@ -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))
Expand Down
9 changes: 9 additions & 0 deletions java/java_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -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",
Expand Down

0 comments on commit 750e557

Please sign in to comment.