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
This commit is contained in:
Colin Cross 2017-09-18 17:41:52 -07:00
parent 2acdae8853
commit fc3674a607
4 changed files with 102 additions and 92 deletions

View File

@ -462,6 +462,10 @@ func (c *config) AllowMissingDependencies() bool {
return Bool(c.ProductVariables.Allow_missing_dependencies)
}
func (c *config) UnbundledBuild() bool {
return Bool(c.ProductVariables.Unbundled_build)
}
func (c *config) DevicePrefer32BitExecutables() bool {
return Bool(c.ProductVariables.DevicePrefer32BitExecutables)
}

View File

@ -233,9 +233,7 @@ func (a *AndroidApp) aaptFlags(ctx android.ModuleContext) ([]string, android.Pat
ctx.VisitDirectDeps(func(module blueprint.Module) {
var depFiles android.Paths
if sdkDep, ok := module.(sdkDependency); ok {
depFiles = sdkDep.ClasspathFiles()
} else if javaDep, ok := module.(Dependency); ok {
if javaDep, ok := module.(Dependency); ok {
if ctx.OtherModuleName(module) == "framework-res" {
depFiles = android.Paths{javaDep.(*AndroidApp).exportPackage}
}

View File

@ -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 {

View File

@ -59,7 +59,6 @@ func testJava(t *testing.T, bp string) *android.TestContext {
ctx.RegisterModuleType("java_library_host", android.ModuleFactoryAdaptor(LibraryHostFactory))
ctx.RegisterModuleType("java_import", android.ModuleFactoryAdaptor(ImportFactory))
ctx.RegisterModuleType("java_defaults", android.ModuleFactoryAdaptor(defaultsFactory))
ctx.RegisterModuleType("android_prebuilt_sdk", android.ModuleFactoryAdaptor(SdkPrebuiltFactory))
ctx.PreArchMutators(android.RegisterPrebuiltsPreArchMutators)
ctx.PreArchMutators(android.RegisterPrebuiltsPostDepsMutators)
ctx.PreArchMutators(android.RegisterDefaultsPreArchMutators)
@ -86,21 +85,15 @@ func testJava(t *testing.T, bp string) *android.TestContext {
`, extra)
}
bp += `
android_prebuilt_sdk {
name: "sdk_v14",
jars: ["sdk_v14.jar"],
}
`
ctx.MockFileSystem(map[string][]byte{
"Android.bp": []byte(bp),
"a.java": nil,
"b.java": nil,
"c.java": nil,
"a.jar": nil,
"b.jar": nil,
"sdk_v14.jar": nil,
"Android.bp": []byte(bp),
"a.java": nil,
"b.java": nil,
"c.java": nil,
"a.jar": nil,
"b.jar": nil,
"prebuilts/sdk/14/android.jar": nil,
"prebuilts/sdk/14/framework.aidl": nil,
})
_, errs := ctx.ParseBlueprintsFiles("Android.bp")
@ -115,8 +108,8 @@ func moduleToPath(name string) string {
switch {
case name == `""`:
return name
case strings.HasPrefix(name, "sdk_v"):
return name + ".jar"
case strings.HasSuffix(name, ".jar"):
return name
default:
return filepath.Join(buildDir, ".intermediates", name, "android_common", "classes-desugar.jar")
}
@ -187,8 +180,8 @@ var classpathTestcases = []struct {
name: "sdk v14",
properties: `sdk_version: "14",`,
bootclasspath: []string{"sdk_v14"},
classpath: []string{},
bootclasspath: []string{`""`},
classpath: []string{"prebuilts/sdk/14/android.jar"},
},
{