Create bundle modules suitable for bundletool

Create a bundle module in addition to creating an APK, which can
then optionally be merged with bundle modules from builds for
other architectures and then be passed to bundletool to create an
app bundle.

Bug: 117295826
Test: tapas RecoveryLocalizer && m dist
Change-Id: I98a17d7407dc56823ece9ec88c087780185a6555
This commit is contained in:
Colin Cross
2018-10-29 23:14:58 -07:00
parent 724c854f6a
commit f623721c08
4 changed files with 68 additions and 0 deletions

View File

@@ -134,6 +134,50 @@ func BuildAAR(ctx android.ModuleContext, outputFile android.WritablePath,
})
}
var buildBundleModule = pctx.AndroidStaticRule("buildBundleModule",
blueprint.RuleParams{
Command: `${config.Zip2ZipCmd} -i ${in} -o ${out}.res.zip AndroidManifest.xml:manifest/AndroidManifest.xml resources.pb "res/**/*" "assets/**/*" &&` +
`${config.Zip2ZipCmd} -i ${dexJar} -o ${out}.dex.zip "classes*.dex:dex/" && ` +
`${config.MergeZipsCmd} ${out} ${out}.res.zip ${out}.dex.zip ${jniJar} && ` +
`rm ${out}.res.zip ${out}.dex.zip`,
CommandDeps: []string{
"${config.Zip2ZipCmd}",
"${config.MergeZipsCmd}",
},
}, "dexJar", "jniJar")
// Builds an app into a module suitable for input to bundletool
func BuildBundleModule(ctx android.ModuleContext, outputFile android.WritablePath,
resJarFile, jniJarFile, dexJarFile android.Path) {
protoResJarFile := android.PathForModuleOut(ctx, "package-res.pb.apk")
aapt2Convert(ctx, protoResJarFile, resJarFile)
var deps android.Paths
var jniPath string
var dexPath string
if dexJarFile != nil {
deps = append(deps, dexJarFile)
dexPath = dexJarFile.String()
}
if jniJarFile != nil {
deps = append(deps, jniJarFile)
jniPath = jniJarFile.String()
}
ctx.Build(pctx, android.BuildParams{
Rule: buildBundleModule,
Implicits: deps,
Input: protoResJarFile,
Output: outputFile,
Description: "bundle",
Args: map[string]string{
"dexJar": dexPath,
"jniJar": jniPath,
},
})
}
func TransformJniLibsToJar(ctx android.ModuleContext, outputFile android.WritablePath,
jniLibs []jniLib) {