Loading java/aapt2.go +4 −2 Original line number Diff line number Diff line Loading @@ -161,7 +161,7 @@ var fileListToFileRule = pctx.AndroidStaticRule("fileListToFile", func aapt2Link(ctx android.ModuleContext, packageRes, genJar, proguardOptions, rTxt, extraPackages android.WritablePath, flags []string, deps android.Paths, compiledRes, compiledOverlay android.Paths) { compiledRes, compiledOverlay android.Paths, splitPackages android.WritablePaths) { genDir := android.PathForModuleGen(ctx, "aapt2", "R") Loading Loading @@ -196,12 +196,14 @@ func aapt2Link(ctx android.ModuleContext, inFlags = append(inFlags, "-R", "@"+overlayFileList.String()) } implicitOutputs := append(splitPackages, proguardOptions, genJar, rTxt, extraPackages) ctx.Build(pctx, android.BuildParams{ Rule: aapt2LinkRule, Description: "aapt2 link", Implicits: deps, Output: packageRes, ImplicitOutputs: android.WritablePaths{proguardOptions, genJar, rTxt, extraPackages}, ImplicitOutputs: implicitOutputs, Args: map[string]string{ "flags": strings.Join(flags, " "), "inFlags": strings.Join(inFlags, " "), Loading java/aar.go +27 −2 Original line number Diff line number Diff line Loading @@ -83,9 +83,18 @@ type aapt struct { useEmbeddedDex bool usesNonSdkApis bool splitNames []string splits []split aaptProperties aaptProperties } type split struct { name string suffix string path android.Path } func (a *aapt) ExportPackage() android.Path { return a.exportPackage } Loading Loading @@ -248,8 +257,23 @@ func (a *aapt) buildActions(ctx android.ModuleContext, sdkContext sdkContext, ex compiledOverlay = append(compiledOverlay, aapt2Compile(ctx, dir.dir, dir.files).Paths()...) } var splitPackages android.WritablePaths var splits []split for _, s := range a.splitNames { suffix := strings.Replace(s, ",", "_", -1) path := android.PathForModuleOut(ctx, "package_"+suffix+".apk") linkFlags = append(linkFlags, "--split", path.String()+":"+s) splitPackages = append(splitPackages, path) splits = append(splits, split{ name: s, suffix: suffix, path: path, }) } aapt2Link(ctx, packageRes, srcJar, proguardOptionsFile, rTxt, extraPackages, linkFlags, linkDeps, compiledRes, compiledOverlay) linkFlags, linkDeps, compiledRes, compiledOverlay, splitPackages) a.aaptSrcJar = srcJar a.exportPackage = packageRes Loading @@ -258,6 +282,7 @@ func (a *aapt) buildActions(ctx android.ModuleContext, sdkContext sdkContext, ex a.rroDirs = rroDirs a.extraAaptPackagesFile = extraPackages a.rTxt = rTxt a.splits = splits } // aaptLibs collects libraries from dependencies and sdk_version and converts them into paths Loading Loading @@ -564,7 +589,7 @@ func (a *AARImport) GenerateAndroidBuildActions(ctx android.ModuleContext) { overlayRes := append(android.Paths{flata}, transitiveStaticLibs...) aapt2Link(ctx, a.exportPackage, srcJar, proguardOptionsFile, rTxt, a.extraAaptPackagesFile, linkFlags, linkDeps, nil, overlayRes) linkFlags, linkDeps, nil, overlayRes, nil) } var _ Dependency = (*AARImport)(nil) Loading java/androidmk.go +4 −0 Original line number Diff line number Diff line Loading @@ -262,6 +262,10 @@ func (app *AndroidApp) AndroidMk() android.AndroidMkData { if len(app.dexpreopter.builtInstalled) > 0 { fmt.Fprintln(w, "LOCAL_SOONG_BUILT_INSTALLED :=", app.dexpreopter.builtInstalled) } for _, split := range app.aapt.splits { install := "$(LOCAL_MODULE_PATH)/" + strings.TrimSuffix(app.installApkName, ".apk") + split.suffix + ".apk" fmt.Fprintln(w, "LOCAL_SOONG_BUILT_INSTALLED +=", split.path.String()+":"+install) } }, }, } Loading java/app.go +18 −3 Original line number Diff line number Diff line Loading @@ -226,6 +226,8 @@ func (a *AndroidApp) aaptBuildActions(ctx android.ModuleContext) { aaptLinkFlags = append(aaptLinkFlags, a.additionalAaptFlags...) a.aapt.splitNames = a.appProperties.Package_splits a.aapt.buildActions(ctx, sdkContext(a), aaptLinkFlags...) // apps manifests are handled by aapt, don't let Module see them Loading Loading @@ -341,19 +343,32 @@ func (a *AndroidApp) generateAndroidBuildActions(ctx android.ModuleContext) { CreateAppPackage(ctx, packageFile, a.exportPackage, jniJarFile, dexJarFile, certificates) a.outputFile = packageFile for _, split := range a.aapt.splits { // Sign the split APKs packageFile := android.PathForModuleOut(ctx, ctx.ModuleName()+"_"+split.suffix+".apk") CreateAppPackage(ctx, packageFile, split.path, nil, nil, certificates) a.extraOutputFiles = append(a.extraOutputFiles, packageFile) } // Build an app bundle. bundleFile := android.PathForModuleOut(ctx, "base.zip") BuildBundleModule(ctx, bundleFile, a.exportPackage, jniJarFile, dexJarFile) a.bundleFile = bundleFile // Install the app package. var installDir android.OutputPath if ctx.ModuleName() == "framework-res" { // framework-res.apk is installed as system/framework/framework-res.apk ctx.InstallFile(android.PathForModuleInstall(ctx, "framework"), ctx.ModuleName()+".apk", a.outputFile) installDir = android.PathForModuleInstall(ctx, "framework") } else if Bool(a.appProperties.Privileged) { ctx.InstallFile(android.PathForModuleInstall(ctx, "priv-app", a.installApkName), a.installApkName+".apk", a.outputFile) installDir = android.PathForModuleInstall(ctx, "priv-app", a.installApkName) } else { ctx.InstallFile(android.PathForModuleInstall(ctx, "app", a.installApkName), a.installApkName+".apk", a.outputFile) installDir = android.PathForModuleInstall(ctx, "app", a.installApkName) } ctx.InstallFile(installDir, a.installApkName+".apk", a.outputFile) for _, split := range a.aapt.splits { ctx.InstallFile(installDir, a.installApkName+"_"+split.suffix+".apk", split.path) } } Loading java/app_builder.go +2 −1 Original line number Diff line number Diff line Loading @@ -65,7 +65,8 @@ var combineApk = pctx.AndroidStaticRule("combineApk", func CreateAppPackage(ctx android.ModuleContext, outputFile android.WritablePath, packageFile, jniJarFile, dexJarFile android.Path, certificates []Certificate) { unsignedApk := android.PathForModuleOut(ctx, "unsigned.apk") unsignedApkName := strings.TrimSuffix(outputFile.Base(), ".apk") + "-unsigned.apk" unsignedApk := android.PathForModuleOut(ctx, unsignedApkName) var inputs android.Paths if dexJarFile != nil { Loading Loading
java/aapt2.go +4 −2 Original line number Diff line number Diff line Loading @@ -161,7 +161,7 @@ var fileListToFileRule = pctx.AndroidStaticRule("fileListToFile", func aapt2Link(ctx android.ModuleContext, packageRes, genJar, proguardOptions, rTxt, extraPackages android.WritablePath, flags []string, deps android.Paths, compiledRes, compiledOverlay android.Paths) { compiledRes, compiledOverlay android.Paths, splitPackages android.WritablePaths) { genDir := android.PathForModuleGen(ctx, "aapt2", "R") Loading Loading @@ -196,12 +196,14 @@ func aapt2Link(ctx android.ModuleContext, inFlags = append(inFlags, "-R", "@"+overlayFileList.String()) } implicitOutputs := append(splitPackages, proguardOptions, genJar, rTxt, extraPackages) ctx.Build(pctx, android.BuildParams{ Rule: aapt2LinkRule, Description: "aapt2 link", Implicits: deps, Output: packageRes, ImplicitOutputs: android.WritablePaths{proguardOptions, genJar, rTxt, extraPackages}, ImplicitOutputs: implicitOutputs, Args: map[string]string{ "flags": strings.Join(flags, " "), "inFlags": strings.Join(inFlags, " "), Loading
java/aar.go +27 −2 Original line number Diff line number Diff line Loading @@ -83,9 +83,18 @@ type aapt struct { useEmbeddedDex bool usesNonSdkApis bool splitNames []string splits []split aaptProperties aaptProperties } type split struct { name string suffix string path android.Path } func (a *aapt) ExportPackage() android.Path { return a.exportPackage } Loading Loading @@ -248,8 +257,23 @@ func (a *aapt) buildActions(ctx android.ModuleContext, sdkContext sdkContext, ex compiledOverlay = append(compiledOverlay, aapt2Compile(ctx, dir.dir, dir.files).Paths()...) } var splitPackages android.WritablePaths var splits []split for _, s := range a.splitNames { suffix := strings.Replace(s, ",", "_", -1) path := android.PathForModuleOut(ctx, "package_"+suffix+".apk") linkFlags = append(linkFlags, "--split", path.String()+":"+s) splitPackages = append(splitPackages, path) splits = append(splits, split{ name: s, suffix: suffix, path: path, }) } aapt2Link(ctx, packageRes, srcJar, proguardOptionsFile, rTxt, extraPackages, linkFlags, linkDeps, compiledRes, compiledOverlay) linkFlags, linkDeps, compiledRes, compiledOverlay, splitPackages) a.aaptSrcJar = srcJar a.exportPackage = packageRes Loading @@ -258,6 +282,7 @@ func (a *aapt) buildActions(ctx android.ModuleContext, sdkContext sdkContext, ex a.rroDirs = rroDirs a.extraAaptPackagesFile = extraPackages a.rTxt = rTxt a.splits = splits } // aaptLibs collects libraries from dependencies and sdk_version and converts them into paths Loading Loading @@ -564,7 +589,7 @@ func (a *AARImport) GenerateAndroidBuildActions(ctx android.ModuleContext) { overlayRes := append(android.Paths{flata}, transitiveStaticLibs...) aapt2Link(ctx, a.exportPackage, srcJar, proguardOptionsFile, rTxt, a.extraAaptPackagesFile, linkFlags, linkDeps, nil, overlayRes) linkFlags, linkDeps, nil, overlayRes, nil) } var _ Dependency = (*AARImport)(nil) Loading
java/androidmk.go +4 −0 Original line number Diff line number Diff line Loading @@ -262,6 +262,10 @@ func (app *AndroidApp) AndroidMk() android.AndroidMkData { if len(app.dexpreopter.builtInstalled) > 0 { fmt.Fprintln(w, "LOCAL_SOONG_BUILT_INSTALLED :=", app.dexpreopter.builtInstalled) } for _, split := range app.aapt.splits { install := "$(LOCAL_MODULE_PATH)/" + strings.TrimSuffix(app.installApkName, ".apk") + split.suffix + ".apk" fmt.Fprintln(w, "LOCAL_SOONG_BUILT_INSTALLED +=", split.path.String()+":"+install) } }, }, } Loading
java/app.go +18 −3 Original line number Diff line number Diff line Loading @@ -226,6 +226,8 @@ func (a *AndroidApp) aaptBuildActions(ctx android.ModuleContext) { aaptLinkFlags = append(aaptLinkFlags, a.additionalAaptFlags...) a.aapt.splitNames = a.appProperties.Package_splits a.aapt.buildActions(ctx, sdkContext(a), aaptLinkFlags...) // apps manifests are handled by aapt, don't let Module see them Loading Loading @@ -341,19 +343,32 @@ func (a *AndroidApp) generateAndroidBuildActions(ctx android.ModuleContext) { CreateAppPackage(ctx, packageFile, a.exportPackage, jniJarFile, dexJarFile, certificates) a.outputFile = packageFile for _, split := range a.aapt.splits { // Sign the split APKs packageFile := android.PathForModuleOut(ctx, ctx.ModuleName()+"_"+split.suffix+".apk") CreateAppPackage(ctx, packageFile, split.path, nil, nil, certificates) a.extraOutputFiles = append(a.extraOutputFiles, packageFile) } // Build an app bundle. bundleFile := android.PathForModuleOut(ctx, "base.zip") BuildBundleModule(ctx, bundleFile, a.exportPackage, jniJarFile, dexJarFile) a.bundleFile = bundleFile // Install the app package. var installDir android.OutputPath if ctx.ModuleName() == "framework-res" { // framework-res.apk is installed as system/framework/framework-res.apk ctx.InstallFile(android.PathForModuleInstall(ctx, "framework"), ctx.ModuleName()+".apk", a.outputFile) installDir = android.PathForModuleInstall(ctx, "framework") } else if Bool(a.appProperties.Privileged) { ctx.InstallFile(android.PathForModuleInstall(ctx, "priv-app", a.installApkName), a.installApkName+".apk", a.outputFile) installDir = android.PathForModuleInstall(ctx, "priv-app", a.installApkName) } else { ctx.InstallFile(android.PathForModuleInstall(ctx, "app", a.installApkName), a.installApkName+".apk", a.outputFile) installDir = android.PathForModuleInstall(ctx, "app", a.installApkName) } ctx.InstallFile(installDir, a.installApkName+".apk", a.outputFile) for _, split := range a.aapt.splits { ctx.InstallFile(installDir, a.installApkName+"_"+split.suffix+".apk", split.path) } } Loading
java/app_builder.go +2 −1 Original line number Diff line number Diff line Loading @@ -65,7 +65,8 @@ var combineApk = pctx.AndroidStaticRule("combineApk", func CreateAppPackage(ctx android.ModuleContext, outputFile android.WritablePath, packageFile, jniJarFile, dexJarFile android.Path, certificates []Certificate) { unsignedApk := android.PathForModuleOut(ctx, "unsigned.apk") unsignedApkName := strings.TrimSuffix(outputFile.Base(), ".apk") + "-unsigned.apk" unsignedApk := android.PathForModuleOut(ctx, unsignedApkName) var inputs android.Paths if dexJarFile != nil { Loading