Delegate retrieval of dex boot jar for apex to the bootclasspath_fragment
The dex boot jar for the apex must have had hidden API flags encoded into it. Currently, the hidden API processing is done within the java modules themselves so the apex gets the dex boot jar from them. However, as part of the hidden API modularization work the hidden API encoding will be performed by the bootclasspath_fragment so this change prepares for that by delegating the retrieval of the dex boot jars to the bootclasspath_fragment, via BootclasspathFragmentApexContentInfo. For the moment that simply delegates straight back to the java module so this change does not change the build. It will however make it easier to switch hidden API encoding to the bootclasspath_fragment in future. Bug: 179354495 Test: m com.android.art - verify that this change does not change its contents Change-Id: I12eba333749be976bcc72661bb9d6be6cc3c56e3
This commit is contained in:
parent
cc33ec8838
commit
190fdef294
2 changed files with 28 additions and 6 deletions
25
apex/apex.go
25
apex/apex.go
|
@ -1498,10 +1498,15 @@ var _ javaModule = (*java.SdkLibrary)(nil)
|
|||
var _ javaModule = (*java.DexImport)(nil)
|
||||
var _ javaModule = (*java.SdkLibraryImport)(nil)
|
||||
|
||||
// apexFileForJavaModule creates an apexFile for a java module's dex implementation jar.
|
||||
func apexFileForJavaModule(ctx android.BaseModuleContext, module javaModule) apexFile {
|
||||
return apexFileForJavaModuleWithFile(ctx, module, module.DexJarBuildPath())
|
||||
}
|
||||
|
||||
// apexFileForJavaModuleWithFile creates an apexFile for a java module with the supplied file.
|
||||
func apexFileForJavaModuleWithFile(ctx android.BaseModuleContext, module javaModule, dexImplementationJar android.Path) apexFile {
|
||||
dirInApex := "javalib"
|
||||
fileToCopy := module.DexJarBuildPath()
|
||||
af := newApexFile(ctx, fileToCopy, module.BaseModuleName(), dirInApex, javaSharedLib, module)
|
||||
af := newApexFile(ctx, dexImplementationJar, module.BaseModuleName(), dirInApex, javaSharedLib, module)
|
||||
af.jacocoReportClassesFile = module.JacocoReportClassesFile()
|
||||
af.lintDepSets = module.LintDepSets()
|
||||
af.customStem = module.Stem() + ".jar"
|
||||
|
@ -1920,7 +1925,7 @@ func (a *apexBundle) GenerateAndroidBuildActions(ctx android.ModuleContext) {
|
|||
switch child.(type) {
|
||||
case *java.Library, *java.SdkLibrary:
|
||||
javaModule := child.(javaModule)
|
||||
af := apexFileForBootclasspathFragmentContentModule(ctx, javaModule)
|
||||
af := apexFileForBootclasspathFragmentContentModule(ctx, parent, javaModule)
|
||||
if !af.ok() {
|
||||
ctx.PropertyErrorf("bootclasspath_fragments", "bootclasspath_fragment content %q is not configured to be compiled into dex", depName)
|
||||
return false
|
||||
|
@ -2097,9 +2102,17 @@ func apexBootclasspathFragmentFiles(ctx android.ModuleContext, module blueprint.
|
|||
|
||||
// apexFileForBootclasspathFragmentContentModule creates an apexFile for a bootclasspath_fragment
|
||||
// content module, i.e. a library that is part of the bootclasspath.
|
||||
func apexFileForBootclasspathFragmentContentModule(ctx android.ModuleContext, javaModule javaModule) apexFile {
|
||||
// For now it simply returns an apexFile for a normal java module.
|
||||
return apexFileForJavaModule(ctx, javaModule)
|
||||
func apexFileForBootclasspathFragmentContentModule(ctx android.ModuleContext, fragmentModule blueprint.Module, javaModule javaModule) apexFile {
|
||||
bootclasspathFragmentInfo := ctx.OtherModuleProvider(fragmentModule, java.BootclasspathFragmentApexContentInfoProvider).(java.BootclasspathFragmentApexContentInfo)
|
||||
|
||||
// Get the dexBootJar from the bootclasspath_fragment as that is responsible for performing the
|
||||
// hidden API encpding.
|
||||
dexBootJar := bootclasspathFragmentInfo.DexBootJarPathForContentModule(javaModule)
|
||||
|
||||
// Create an apexFile as for a normal java module but with the dex boot jar provided by the
|
||||
// bootclasspath_fragment.
|
||||
af := apexFileForJavaModuleWithFile(ctx, javaModule, dexBootJar)
|
||||
return af
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
|
|
@ -198,6 +198,15 @@ func (i BootclasspathFragmentApexContentInfo) AndroidBootImageFilesByArchType()
|
|||
return files
|
||||
}
|
||||
|
||||
// DexBootJarPathForContentModule returns the path to the dex boot jar for specified module.
|
||||
//
|
||||
// The dex boot jar is one which has had hidden API encoding performed on it.
|
||||
func (i BootclasspathFragmentApexContentInfo) DexBootJarPathForContentModule(module android.Module) android.Path {
|
||||
j := module.(UsesLibraryDependency)
|
||||
dexJar := j.DexJarBuildPath()
|
||||
return dexJar
|
||||
}
|
||||
|
||||
func (b *BootclasspathFragmentModule) DepIsInSameApex(ctx android.BaseModuleContext, dep android.Module) bool {
|
||||
tag := ctx.OtherModuleDependencyTag(dep)
|
||||
if IsBootclasspathFragmentContentDepTag(tag) {
|
||||
|
|
Loading…
Reference in a new issue