Propagate the dex jar path as an OptionalPath which is either valid or
invalid with a message. This will allow propagating any error from the deapexer module for prebuilt APEXes to the location where the dex jars get used. It's only at those points that we can raise errors about not being able to extract files from the deapexer modules if they are invalid, and this way we avoid encoding knowledge there about why they may be invalid. To keep the refactoring limited it intentionally does not change any of the existing logic for when dexJarFiles are set or not (non-nil vs nil prior to this change), although there may be opportunity to use this for more conditions when dex jars aren't available. The refactoring is also not extended to dexpreopt.ClassLoaderContextMap. Test: m nothing Bug: 192006406 Change-Id: I68986dccd9a9b3fee4d24caa1947ea17a36caedc
This commit is contained in:
23
java/java.go
23
java/java.go
@@ -219,7 +219,7 @@ type ApexDependency interface {
|
||||
|
||||
// Provides build path and install path to DEX jars.
|
||||
type UsesLibraryDependency interface {
|
||||
DexJarBuildPath() android.Path
|
||||
DexJarBuildPath() OptionalDexJarPath
|
||||
DexJarInstallPath() android.Path
|
||||
ClassLoaderContexts() dexpreopt.ClassLoaderContextMap
|
||||
}
|
||||
@@ -1215,7 +1215,7 @@ type Import struct {
|
||||
properties ImportProperties
|
||||
|
||||
// output file containing classes.dex and resources
|
||||
dexJarFile android.Path
|
||||
dexJarFile OptionalDexJarPath
|
||||
dexJarInstallFile android.Path
|
||||
|
||||
combinedClasspathFile android.Path
|
||||
@@ -1370,11 +1370,12 @@ func (j *Import) GenerateAndroidBuildActions(ctx android.ModuleContext) {
|
||||
// Get the path of the dex implementation jar from the `deapexer` module.
|
||||
di := ctx.OtherModuleProvider(deapexerModule, android.DeapexerProvider).(android.DeapexerInfo)
|
||||
if dexOutputPath := di.PrebuiltExportPath(apexRootRelativePathToJavaLib(j.BaseModuleName())); dexOutputPath != nil {
|
||||
j.dexJarFile = dexOutputPath
|
||||
dexJarFile := makeDexJarPathFromPath(dexOutputPath)
|
||||
j.dexJarFile = dexJarFile
|
||||
j.dexJarInstallFile = android.PathForModuleInPartitionInstall(ctx, "apex", ai.ApexVariationName, apexRootRelativePathToJavaLib(j.BaseModuleName()))
|
||||
|
||||
// Initialize the hiddenapi structure.
|
||||
j.initHiddenAPI(ctx, dexOutputPath, outputFile, nil)
|
||||
j.initHiddenAPI(ctx, dexJarFile, outputFile, nil)
|
||||
} else {
|
||||
// This should never happen as a variant for a prebuilt_apex is only created if the
|
||||
// prebuilt_apex has been configured to export the java library dex file.
|
||||
@@ -1407,12 +1408,12 @@ func (j *Import) GenerateAndroidBuildActions(ctx android.ModuleContext) {
|
||||
}
|
||||
|
||||
// Initialize the hiddenapi structure.
|
||||
j.initHiddenAPI(ctx, dexOutputFile, outputFile, j.dexProperties.Uncompress_dex)
|
||||
j.initHiddenAPI(ctx, makeDexJarPathFromPath(dexOutputFile), outputFile, j.dexProperties.Uncompress_dex)
|
||||
|
||||
// Encode hidden API flags in dex file.
|
||||
dexOutputFile = j.hiddenAPIEncodeDex(ctx, dexOutputFile)
|
||||
|
||||
j.dexJarFile = dexOutputFile
|
||||
j.dexJarFile = makeDexJarPathFromPath(dexOutputFile)
|
||||
j.dexJarInstallFile = android.PathForModuleInstall(ctx, "framework", jarName)
|
||||
}
|
||||
}
|
||||
@@ -1450,7 +1451,7 @@ func (j *Import) ImplementationAndResourcesJars() android.Paths {
|
||||
return android.Paths{j.combinedClasspathFile}
|
||||
}
|
||||
|
||||
func (j *Import) DexJarBuildPath() android.Path {
|
||||
func (j *Import) DexJarBuildPath() OptionalDexJarPath {
|
||||
return j.dexJarFile
|
||||
}
|
||||
|
||||
@@ -1595,7 +1596,7 @@ type DexImport struct {
|
||||
|
||||
properties DexImportProperties
|
||||
|
||||
dexJarFile android.Path
|
||||
dexJarFile OptionalDexJarPath
|
||||
|
||||
dexpreopter
|
||||
|
||||
@@ -1686,7 +1687,7 @@ func (j *DexImport) GenerateAndroidBuildActions(ctx android.ModuleContext) {
|
||||
})
|
||||
}
|
||||
|
||||
j.dexJarFile = dexOutputFile
|
||||
j.dexJarFile = makeDexJarPathFromPath(dexOutputFile)
|
||||
|
||||
j.dexpreopt(ctx, dexOutputFile)
|
||||
|
||||
@@ -1696,7 +1697,7 @@ func (j *DexImport) GenerateAndroidBuildActions(ctx android.ModuleContext) {
|
||||
}
|
||||
}
|
||||
|
||||
func (j *DexImport) DexJarBuildPath() android.Path {
|
||||
func (j *DexImport) DexJarBuildPath() OptionalDexJarPath {
|
||||
return j.dexJarFile
|
||||
}
|
||||
|
||||
@@ -1865,7 +1866,7 @@ func addCLCFromDep(ctx android.ModuleContext, depModule android.Module,
|
||||
// from its CLC should be added to the current CLC.
|
||||
if sdkLib != nil {
|
||||
clcMap.AddContext(ctx, dexpreopt.AnySdkVersion, *sdkLib, false, true,
|
||||
dep.DexJarBuildPath(), dep.DexJarInstallPath(), dep.ClassLoaderContexts())
|
||||
dep.DexJarBuildPath().PathOrNil(), dep.DexJarInstallPath(), dep.ClassLoaderContexts())
|
||||
} else {
|
||||
clcMap.AddContextMap(dep.ClassLoaderContexts(), depName)
|
||||
}
|
||||
|
Reference in New Issue
Block a user