Remove android_prebuilt_sdk modules
Forcing sdk modules to be declared explicitly is unnecessary, just
add the required dependencies on the jar and aidl files.
Test: java_test.go
Change-Id: Ib28bdc1051c5825e7c0efb6adff1f9282675560e
diff --git a/java/java.go b/java/java.go
index 2ded80b..326d278 100644
--- a/java/java.go
+++ b/java/java.go
@@ -20,6 +20,7 @@
import (
"fmt"
+ "path/filepath"
"strconv"
"strings"
@@ -41,7 +42,6 @@
android.RegisterModuleType("java_binary_host", BinaryHostFactory)
android.RegisterModuleType("java_import", ImportFactory)
android.RegisterModuleType("java_import_host", ImportFactoryHost)
- android.RegisterModuleType("android_prebuilt_sdk", SdkPrebuiltFactory)
android.RegisterModuleType("android_app", AndroidAppFactory)
android.RegisterSingletonType("logtags", LogtagsSingleton)
@@ -179,26 +179,90 @@
libTag = dependencyTag{name: "javalib"}
bootClasspathTag = dependencyTag{name: "bootclasspath"}
frameworkResTag = dependencyTag{name: "framework-res"}
- sdkDependencyTag = dependencyTag{name: "sdk"}
)
+type sdkDep struct {
+ useModule, useFiles, useDefaultLibs bool
+ module string
+ jar android.Path
+ aidl android.Path
+}
+
+func decodeSdkDep(ctx android.BaseContext, v string) sdkDep {
+ switch v {
+ case "", "current", "system_current", "test_current":
+ // OK
+ default:
+ if _, err := strconv.Atoi(v); err != nil {
+ ctx.PropertyErrorf("sdk_version", "invalid sdk version")
+ return sdkDep{}
+ }
+ }
+
+ toFile := func(v string) sdkDep {
+ dir := filepath.Join("prebuilts/sdk", v)
+ jar := filepath.Join(dir, "android.jar")
+ aidl := filepath.Join(dir, "framework.aidl")
+ jarPath := android.ExistentPathForSource(ctx, "sdkdir", jar)
+ aidlPath := android.ExistentPathForSource(ctx, "sdkdir", aidl)
+ if !jarPath.Valid() {
+ ctx.PropertyErrorf("sdk_version", "invalid sdk version %q, %q does not exist", v, jar)
+ return sdkDep{}
+ }
+ if !aidlPath.Valid() {
+ ctx.PropertyErrorf("sdk_version", "invalid sdk version %q, %q does not exist", v, aidl)
+ return sdkDep{}
+ }
+ return sdkDep{
+ useFiles: true,
+ jar: jarPath.Path(),
+ aidl: aidlPath.Path(),
+ }
+ }
+
+ toModule := func(m string) sdkDep {
+ return sdkDep{
+ useModule: true,
+ module: m,
+ }
+ }
+
+ if ctx.AConfig().UnbundledBuild() {
+ if v == "" {
+ if ctx, ok := ctx.(android.ModuleContext); ok {
+ ctx.AddMissingDependencies([]string{"sdk_version_must_be_set_for_modules_used_in_unbundled_builds"})
+ }
+ return sdkDep{}
+ }
+ return toFile(v)
+ }
+
+ switch v {
+ case "":
+ return sdkDep{
+ useDefaultLibs: true,
+ }
+ case "current":
+ return toModule("android_stubs_current")
+ case "system_current":
+ return toModule("android_system_stubs_current")
+ case "test_current":
+ return toModule("android_test_stubs_current")
+ default:
+ return toFile(v)
+ }
+}
+
func (j *Module) deps(ctx android.BottomUpMutatorContext) {
if !proptools.Bool(j.properties.No_standard_libs) {
if ctx.Device() {
- switch j.deviceProperties.Sdk_version {
- case "":
+ sdkDep := decodeSdkDep(ctx, j.deviceProperties.Sdk_version)
+ if sdkDep.useDefaultLibs {
ctx.AddDependency(ctx.Module(), bootClasspathTag, "core-oj", "core-libart")
ctx.AddDependency(ctx.Module(), libTag, config.DefaultLibraries...)
- case "current":
- // TODO: !TARGET_BUILD_APPS
- // TODO: export preprocessed framework.aidl from android_stubs_current
- ctx.AddDependency(ctx.Module(), bootClasspathTag, "android_stubs_current")
- case "test_current":
- ctx.AddDependency(ctx.Module(), bootClasspathTag, "android_test_stubs_current")
- case "system_current":
- ctx.AddDependency(ctx.Module(), bootClasspathTag, "android_system_stubs_current")
- default:
- ctx.AddDependency(ctx.Module(), sdkDependencyTag, "sdk_v"+j.deviceProperties.Sdk_version)
+ }
+ if sdkDep.useModule {
+ ctx.AddDependency(ctx.Module(), bootClasspathTag, sdkDep.module)
}
} else {
if j.deviceProperties.Dex {
@@ -247,6 +311,13 @@
func (j *Module) collectDeps(ctx android.ModuleContext) deps {
var deps deps
+
+ sdkDep := decodeSdkDep(ctx, j.deviceProperties.Sdk_version)
+ if sdkDep.useFiles {
+ deps.classpath = append(deps.classpath, sdkDep.jar)
+ deps.aidlIncludeDirs = append(deps.aidlIncludeDirs, sdkDep.aidl)
+ }
+
ctx.VisitDirectDeps(func(module blueprint.Module) {
otherName := ctx.OtherModuleName(module)
tag := ctx.OtherModuleDependencyTag(module)
@@ -277,17 +348,6 @@
// generated by framework-res.apk
deps.srcFileLists = append(deps.srcFileLists, module.(*AndroidApp).aaptJavaFileList)
}
- case sdkDependencyTag:
- sdkDep := module.(sdkDependency)
- deps.bootClasspath = append(deps.bootClasspath, sdkDep.ClasspathFiles()...)
- if sdkDep.AidlPreprocessed().Valid() {
- if deps.aidlPreprocess.Valid() {
- ctx.ModuleErrorf("multiple dependencies with preprocessed aidls:\n %q\n %q",
- deps.aidlPreprocess, sdkDep.AidlPreprocessed())
- } else {
- deps.aidlPreprocess = sdkDep.AidlPreprocessed()
- }
- }
default:
panic(fmt.Errorf("unknown dependency %q for %q", otherName, ctx.ModuleName()))
}
@@ -677,51 +737,6 @@
return module
}
-//
-// SDK java prebuilts (.jar containing resources plus framework.aidl)
-//
-
-type sdkDependency interface {
- Dependency
- AidlPreprocessed() android.OptionalPath
-}
-
-var _ sdkDependency = (*sdkPrebuilt)(nil)
-
-type sdkPrebuiltProperties struct {
- Aidl_preprocessed *string
-}
-
-type sdkPrebuilt struct {
- Import
-
- sdkProperties sdkPrebuiltProperties
-
- aidlPreprocessed android.OptionalPath
-}
-
-func (j *sdkPrebuilt) GenerateAndroidBuildActions(ctx android.ModuleContext) {
- j.Import.GenerateAndroidBuildActions(ctx)
-
- j.aidlPreprocessed = android.OptionalPathForModuleSrc(ctx, j.sdkProperties.Aidl_preprocessed)
-}
-
-func (j *sdkPrebuilt) AidlPreprocessed() android.OptionalPath {
- return j.aidlPreprocessed
-}
-
-func SdkPrebuiltFactory() android.Module {
- module := &sdkPrebuilt{}
-
- module.AddProperties(
- &module.sdkProperties,
- &module.Import.properties)
-
- android.InitPrebuiltModule(module, &module.Import.properties.Jars)
- android.InitAndroidArchModule(module, android.HostAndDeviceSupported, android.MultilibCommon)
- return module
-}
-
func inList(s string, l []string) bool {
for _, e := range l {
if e == s {