Create a framework.aidl for non-updatable platform
framework.aidl includes the parcelables from the non-updatable
part of the framework as well as the modules. This causes a
dependency cycle when building module stubs:
module_stub -> module_sdk -> framework.aidl -> public_sdk -> module_stub
The module_sdk only includes the the stubs for the non-updatable
part of the framework, so it should also only contain the non-updatable
parcelables. This change creates a framework_non_updatable.aidl with
those parcelables, and updates module_current to use that.
Bug: 144149403
Test: m
Test: m && diff out/soong/framework{,_non_updatable}.aidl
(the diff contains just TestApi + module parcelables)
Change-Id: I224117a0ff695c22d4a4317a51a9b775ed73066b
Merged-In: I224117a0ff695c22d4a4317a51a9b775ed73066b
(cherry picked from commit 85c151c3f3
)
This commit is contained in:
parent
2ebae3e936
commit
3f07ab2d63
49
java/sdk.go
49
java/sdk.go
|
@ -35,6 +35,7 @@ func init() {
|
||||||
|
|
||||||
var sdkVersionsKey = android.NewOnceKey("sdkVersionsKey")
|
var sdkVersionsKey = android.NewOnceKey("sdkVersionsKey")
|
||||||
var sdkFrameworkAidlPathKey = android.NewOnceKey("sdkFrameworkAidlPathKey")
|
var sdkFrameworkAidlPathKey = android.NewOnceKey("sdkFrameworkAidlPathKey")
|
||||||
|
var nonUpdatableFrameworkAidlPathKey = android.NewOnceKey("nonUpdatableFrameworkAidlPathKey")
|
||||||
var apiFingerprintPathKey = android.NewOnceKey("apiFingerprintPathKey")
|
var apiFingerprintPathKey = android.NewOnceKey("apiFingerprintPathKey")
|
||||||
|
|
||||||
type sdkContext interface {
|
type sdkContext interface {
|
||||||
|
@ -447,7 +448,7 @@ func decodeSdkDep(ctx android.EarlyModuleContext, sdkContext sdkContext) sdkDep
|
||||||
return toModule([]string{"core.current.stubs"}, "", nil)
|
return toModule([]string{"core.current.stubs"}, "", nil)
|
||||||
case sdkModule:
|
case sdkModule:
|
||||||
// TODO(146757305): provide .apk and .aidl that have more APIs for modules
|
// TODO(146757305): provide .apk and .aidl that have more APIs for modules
|
||||||
return toModule([]string{"android_module_lib_stubs_current"}, "framework-res", sdkFrameworkAidlPath(ctx))
|
return toModule([]string{"android_module_lib_stubs_current"}, "framework-res", nonUpdatableFrameworkAidlPath(ctx))
|
||||||
case sdkSystemServer:
|
case sdkSystemServer:
|
||||||
// TODO(146757305): provide .apk and .aidl that have more APIs for modules
|
// TODO(146757305): provide .apk and .aidl that have more APIs for modules
|
||||||
return toModule([]string{"android_system_server_stubs_current"}, "framework-res", sdkFrameworkAidlPath(ctx))
|
return toModule([]string{"android_system_server_stubs_current"}, "framework-res", sdkFrameworkAidlPath(ctx))
|
||||||
|
@ -506,6 +507,7 @@ func (sdkSingleton) GenerateBuildActions(ctx android.SingletonContext) {
|
||||||
}
|
}
|
||||||
|
|
||||||
createSdkFrameworkAidl(ctx)
|
createSdkFrameworkAidl(ctx)
|
||||||
|
createNonUpdatableFrameworkAidl(ctx)
|
||||||
createAPIFingerprint(ctx)
|
createAPIFingerprint(ctx)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -517,6 +519,31 @@ func createSdkFrameworkAidl(ctx android.SingletonContext) {
|
||||||
"android_system_stubs_current",
|
"android_system_stubs_current",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
combinedAidl := sdkFrameworkAidlPath(ctx)
|
||||||
|
tempPath := combinedAidl.ReplaceExtension(ctx, "aidl.tmp")
|
||||||
|
|
||||||
|
rule := createFrameworkAidl(stubsModules, tempPath, ctx)
|
||||||
|
|
||||||
|
commitChangeForRestat(rule, tempPath, combinedAidl)
|
||||||
|
|
||||||
|
rule.Build(pctx, ctx, "framework_aidl", "generate framework.aidl")
|
||||||
|
}
|
||||||
|
|
||||||
|
// Creates a version of framework.aidl for the non-updatable part of the platform.
|
||||||
|
func createNonUpdatableFrameworkAidl(ctx android.SingletonContext) {
|
||||||
|
stubsModules := []string{"android_module_lib_stubs_current"}
|
||||||
|
|
||||||
|
combinedAidl := nonUpdatableFrameworkAidlPath(ctx)
|
||||||
|
tempPath := combinedAidl.ReplaceExtension(ctx, "aidl.tmp")
|
||||||
|
|
||||||
|
rule := createFrameworkAidl(stubsModules, tempPath, ctx)
|
||||||
|
|
||||||
|
commitChangeForRestat(rule, tempPath, combinedAidl)
|
||||||
|
|
||||||
|
rule.Build(pctx, ctx, "framework_non_updatable_aidl", "generate framework_non_updatable.aidl")
|
||||||
|
}
|
||||||
|
|
||||||
|
func createFrameworkAidl(stubsModules []string, path android.OutputPath, ctx android.SingletonContext) *android.RuleBuilder {
|
||||||
stubsJars := make([]android.Paths, len(stubsModules))
|
stubsJars := make([]android.Paths, len(stubsModules))
|
||||||
|
|
||||||
ctx.VisitAllModules(func(module android.Module) {
|
ctx.VisitAllModules(func(module android.Module) {
|
||||||
|
@ -536,8 +563,7 @@ func createSdkFrameworkAidl(ctx android.SingletonContext) {
|
||||||
if ctx.Config().AllowMissingDependencies() {
|
if ctx.Config().AllowMissingDependencies() {
|
||||||
missingDeps = append(missingDeps, stubsModules[i])
|
missingDeps = append(missingDeps, stubsModules[i])
|
||||||
} else {
|
} else {
|
||||||
ctx.Errorf("failed to find dex jar path for module %q",
|
ctx.Errorf("failed to find dex jar path for module %q", stubsModules[i])
|
||||||
stubsModules[i])
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -561,20 +587,15 @@ func createSdkFrameworkAidl(ctx android.SingletonContext) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
combinedAidl := sdkFrameworkAidlPath(ctx)
|
|
||||||
tempPath := combinedAidl.ReplaceExtension(ctx, "aidl.tmp")
|
|
||||||
|
|
||||||
rule.Command().
|
rule.Command().
|
||||||
Text("rm -f").Output(tempPath)
|
Text("rm -f").Output(path)
|
||||||
rule.Command().
|
rule.Command().
|
||||||
Text("cat").
|
Text("cat").
|
||||||
Inputs(aidls).
|
Inputs(aidls).
|
||||||
Text("| sort -u >").
|
Text("| sort -u >").
|
||||||
Output(tempPath)
|
Output(path)
|
||||||
|
|
||||||
commitChangeForRestat(rule, tempPath, combinedAidl)
|
return rule
|
||||||
|
|
||||||
rule.Build(pctx, ctx, "framework_aidl", "generate framework.aidl")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func sdkFrameworkAidlPath(ctx android.PathContext) android.OutputPath {
|
func sdkFrameworkAidlPath(ctx android.PathContext) android.OutputPath {
|
||||||
|
@ -583,6 +604,12 @@ func sdkFrameworkAidlPath(ctx android.PathContext) android.OutputPath {
|
||||||
}).(android.OutputPath)
|
}).(android.OutputPath)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func nonUpdatableFrameworkAidlPath(ctx android.PathContext) android.OutputPath {
|
||||||
|
return ctx.Config().Once(nonUpdatableFrameworkAidlPathKey, func() interface{} {
|
||||||
|
return android.PathForOutput(ctx, "framework_non_updatable.aidl")
|
||||||
|
}).(android.OutputPath)
|
||||||
|
}
|
||||||
|
|
||||||
// Create api_fingerprint.txt
|
// Create api_fingerprint.txt
|
||||||
func createAPIFingerprint(ctx android.SingletonContext) {
|
func createAPIFingerprint(ctx android.SingletonContext) {
|
||||||
out := ApiFingerprintPath(ctx)
|
out := ApiFingerprintPath(ctx)
|
||||||
|
|
|
@ -252,7 +252,7 @@ func TestClasspath(t *testing.T) {
|
||||||
bootclasspath: []string{"android_module_lib_stubs_current", "core-lambda-stubs"},
|
bootclasspath: []string{"android_module_lib_stubs_current", "core-lambda-stubs"},
|
||||||
system: "core-current-stubs-system-modules",
|
system: "core-current-stubs-system-modules",
|
||||||
java9classpath: []string{"android_module_lib_stubs_current"},
|
java9classpath: []string{"android_module_lib_stubs_current"},
|
||||||
aidl: "-p" + buildDir + "/framework.aidl",
|
aidl: "-p" + buildDir + "/framework_non_updatable.aidl",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "system_server_current",
|
name: "system_server_current",
|
||||||
|
|
Loading…
Reference in New Issue