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:
parent
2acdae8853
commit
fc3674a607
|
@ -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)
|
||||
}
|
||||
|
|
|
@ -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}
|
||||
}
|
||||
|
|
155
java/java.go
155
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 {
|
||||
|
|
|
@ -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"},
|
||||
},
|
||||
{
|
||||
|
||||
|
|
Loading…
Reference in New Issue