diff options
author | Colin Cross <ccross@android.com> | 2017-09-18 17:41:52 -0700 |
---|---|---|
committer | Colin Cross <ccross@android.com> | 2017-09-20 13:20:45 -0700 |
commit | fc3674a607d246dff0f415f50e35f2e988ecf7bf (patch) | |
tree | 05f594880d517f6cefced10b393210b5e5b2a6d4 /java/java.go | |
parent | 2acdae88531f9f4b297c488ffbbc1b7419587f9f (diff) |
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
Diffstat (limited to 'java/java.go')
-rw-r--r-- | java/java.go | 155 |
1 files changed, 85 insertions, 70 deletions
diff --git a/java/java.go b/java/java.go index 2ded80bc1..326d278c7 100644 --- a/java/java.go +++ b/java/java.go @@ -20,6 +20,7 @@ package java import ( "fmt" + "path/filepath" "strconv" "strings" @@ -41,7 +42,6 @@ func init() { 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 @@ var ( 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 @@ type deps struct { 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 @@ func (j *Module) collectDeps(ctx android.ModuleContext) deps { // 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 @@ func ImportFactoryHost() android.Module { 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 { |