Generate info about the selected app variant in platform builds
This is a followup to aosp/2999198 and adds information about apps. Each app will have an entry in this file with the following properties - Name, mandatory - Is_prebuilt, mandatory - Prebuilt_info_file_path, optional Implementation details - Move prebuiltInfoProvider out of build/soong/apex to build/soong/android. This allows build/soong/java to use it. - Introduce a new `prebuilt_info` prop to `android_app_set` and `android_app_import` - All app module types will set a prebuiltInfoProvider in GenerateAndroidBuildActions, including the source app module types Test: m nothing --no-skip-soong-tests Test: m out/soong/prebuilt_info.json Test: ls -l out/soong/prebuilt_info.json --human-readable -rw------- 1 spandandas primarygroup 317K Mar 11 23:46 out/soong/prebuilt_info.json Test: #modified trunk_staging.locally to select prebuilts of some mainline apps. Spot-checked that `is_prebuilt` and `prebuilt_info_file_path` get populated appropriately Bug: 327480225 Change-Id: I5078e0ec26c9568194550909962b90111a5223f7
This commit is contained in:
@@ -912,6 +912,13 @@ func (a *AndroidApp) generateAndroidBuildActions(ctx android.ModuleContext) {
|
||||
}
|
||||
|
||||
a.buildAppDependencyInfo(ctx)
|
||||
|
||||
providePrebuiltInfo(ctx,
|
||||
prebuiltInfoProps{
|
||||
baseModuleName: a.BaseModuleName(),
|
||||
isPrebuilt: false,
|
||||
},
|
||||
)
|
||||
}
|
||||
|
||||
type appDepsInterface interface {
|
||||
|
@@ -150,6 +150,11 @@ type AndroidAppImportProperties struct {
|
||||
// If unspecified, follows the naming convention that the source module of
|
||||
// the prebuilt is Name() without "prebuilt_" prefix
|
||||
Source_module_name *string
|
||||
|
||||
// Path to the .prebuilt_info file of the prebuilt app.
|
||||
// In case of mainline modules, the .prebuilt_info file contains the build_id that was used
|
||||
// to generate the prebuilt.
|
||||
Prebuilt_info *string `android:"path"`
|
||||
}
|
||||
|
||||
func (a *AndroidAppImport) IsInstallable() bool {
|
||||
@@ -413,6 +418,14 @@ func (a *AndroidAppImport) generateAndroidBuildActions(ctx android.ModuleContext
|
||||
}
|
||||
android.CollectDependencyAconfigFiles(ctx, &a.mergedAconfigFiles)
|
||||
|
||||
providePrebuiltInfo(ctx,
|
||||
prebuiltInfoProps{
|
||||
baseModuleName: a.BaseModuleName(),
|
||||
isPrebuilt: true,
|
||||
prebuiltInfo: a.properties.Prebuilt_info,
|
||||
},
|
||||
)
|
||||
|
||||
// TODO: androidmk converter jni libs
|
||||
}
|
||||
|
||||
|
@@ -48,6 +48,11 @@ type AndroidAppSetProperties struct {
|
||||
// Names of modules to be overridden. Listed modules can only be other apps
|
||||
// (in Make or Soong).
|
||||
Overrides []string
|
||||
|
||||
// Path to the .prebuilt_info file of the prebuilt app.
|
||||
// In case of mainline modules, the .prebuilt_info file contains the build_id that was used
|
||||
// to generate the prebuilt.
|
||||
Prebuilt_info *string `android:"path"`
|
||||
}
|
||||
|
||||
type AndroidAppSet struct {
|
||||
@@ -117,6 +122,27 @@ func SupportedAbis(ctx android.ModuleContext, excludeNativeBridgeAbis bool) []st
|
||||
return result
|
||||
}
|
||||
|
||||
type prebuiltInfoProps struct {
|
||||
baseModuleName string
|
||||
isPrebuilt bool
|
||||
prebuiltInfo *string
|
||||
}
|
||||
|
||||
// Set prebuiltInfoProvider. This will be used by `apex_prebuiltinfo_singleton` to print out a metadata file
|
||||
// with information about whether source or prebuilt of an apex was used during the build.
|
||||
func providePrebuiltInfo(ctx android.ModuleContext, p prebuiltInfoProps) {
|
||||
info := android.PrebuiltInfo{
|
||||
Name: p.baseModuleName,
|
||||
Is_prebuilt: p.isPrebuilt,
|
||||
}
|
||||
// If Prebuilt_info information is available in the soong module definition, add it to prebuilt_info.json.
|
||||
if p.prebuiltInfo != nil {
|
||||
prebuiltInfoFile := android.PathForModuleSrc(ctx, *p.prebuiltInfo)
|
||||
info.Prebuilt_info_file_path = prebuiltInfoFile.String()
|
||||
}
|
||||
android.SetProvider(ctx, android.PrebuiltInfoProvider, info)
|
||||
}
|
||||
|
||||
func (as *AndroidAppSet) GenerateAndroidBuildActions(ctx android.ModuleContext) {
|
||||
as.packedOutput = android.PathForModuleOut(ctx, ctx.ModuleName()+".zip")
|
||||
as.primaryOutput = android.PathForModuleOut(ctx, as.BaseModuleName()+".apk")
|
||||
@@ -157,6 +183,15 @@ func (as *AndroidAppSet) GenerateAndroidBuildActions(ctx android.ModuleContext)
|
||||
installDir = android.PathForModuleInstall(ctx, "app", as.BaseModuleName())
|
||||
}
|
||||
ctx.InstallFileWithExtraFilesZip(installDir, as.BaseModuleName()+".apk", as.primaryOutput, as.packedOutput)
|
||||
|
||||
providePrebuiltInfo(ctx,
|
||||
prebuiltInfoProps{
|
||||
baseModuleName: as.BaseModuleName(),
|
||||
isPrebuilt: true,
|
||||
prebuiltInfo: as.properties.Prebuilt_info,
|
||||
},
|
||||
)
|
||||
|
||||
}
|
||||
|
||||
func (as *AndroidAppSet) InstallBypassMake() bool { return true }
|
||||
|
Reference in New Issue
Block a user