Move android_library resource handling to Bazel's ResourceProcessorBusyBox
The R.Java files generated by aapt2 link --no-static-lib-packages cause scaling problems by combining all resources into every package listed in a dependencies' AndroidManifest.xml file. For SystemUI-core this results in 74 R.java files, each with 76k lines, and takes 20 seconds to compile in javac. Both AGP and Bazel have workarounds for this that avoid using the R.java files generated by aapt2, instead generating more efficient R.class files directly based on the R.txt file. Bazel uses the ResourceProcessorBusyBox tool that is already present in our tree to process the resources. Reuse the same tool in Soong to create the R.jar. The more efficient R.class files require modifiying source files that use incorrect packages to refer to resources. Ignore-AOSP-First: merge conflict Bug: 284023594 Test: TestAndroidResourceProcessor Change-Id: I026073b40dabcfdb10e5d7a52e9348205b0e9a66
This commit is contained in:
16
java/base.go
16
java/base.go
@@ -1057,7 +1057,7 @@ func (module *Module) addGeneratedSrcJars(path android.Path) {
|
||||
module.properties.Generated_srcjars = append(module.properties.Generated_srcjars, path)
|
||||
}
|
||||
|
||||
func (j *Module) compile(ctx android.ModuleContext, aaptSrcJar android.Path) {
|
||||
func (j *Module) compile(ctx android.ModuleContext, extraSrcJars, extraClasspathJars, extraCombinedJars android.Paths) {
|
||||
j.exportAidlIncludeDirs = android.PathsForModuleSrc(ctx, j.deviceProperties.Aidl.Export_include_dirs)
|
||||
|
||||
deps := j.collectDeps(ctx)
|
||||
@@ -1095,9 +1095,7 @@ func (j *Module) compile(ctx android.ModuleContext, aaptSrcJar android.Path) {
|
||||
|
||||
srcJars := srcFiles.FilterByExt(".srcjar")
|
||||
srcJars = append(srcJars, deps.srcJars...)
|
||||
if aaptSrcJar != nil {
|
||||
srcJars = append(srcJars, aaptSrcJar)
|
||||
}
|
||||
srcJars = append(srcJars, extraSrcJars...)
|
||||
srcJars = append(srcJars, j.properties.Generated_srcjars...)
|
||||
srcFiles = srcFiles.FilterOutByExt(".srcjar")
|
||||
|
||||
@@ -1140,6 +1138,11 @@ func (j *Module) compile(ctx android.ModuleContext, aaptSrcJar android.Path) {
|
||||
var kotlinJars android.Paths
|
||||
var kotlinHeaderJars android.Paths
|
||||
|
||||
// Prepend extraClasspathJars to classpath so that the resource processor R.jar comes before
|
||||
// any dependencies so that it can override any non-final R classes from dependencies with the
|
||||
// final R classes from the app.
|
||||
flags.classpath = append(android.CopyOf(extraClasspathJars), flags.classpath...)
|
||||
|
||||
if srcFiles.HasExt(".kt") {
|
||||
// When using kotlin sources turbine is used to generate annotation processor sources,
|
||||
// including for annotation processors that generate API, so we can use turbine for
|
||||
@@ -1233,8 +1236,9 @@ func (j *Module) compile(ctx android.ModuleContext, aaptSrcJar android.Path) {
|
||||
// allow for the use of annotation processors that do function correctly
|
||||
// with sharding enabled. See: b/77284273.
|
||||
}
|
||||
extraJars := append(android.CopyOf(extraCombinedJars), kotlinHeaderJars...)
|
||||
headerJarFileWithoutDepsOrJarjar, j.headerJarFile =
|
||||
j.compileJavaHeader(ctx, uniqueJavaFiles, srcJars, deps, flags, jarName, kotlinHeaderJars)
|
||||
j.compileJavaHeader(ctx, uniqueJavaFiles, srcJars, deps, flags, jarName, extraJars)
|
||||
if ctx.Failed() {
|
||||
return
|
||||
}
|
||||
@@ -1385,6 +1389,8 @@ func (j *Module) compile(ctx android.ModuleContext, aaptSrcJar android.Path) {
|
||||
jars = append(jars, servicesJar)
|
||||
}
|
||||
|
||||
jars = append(android.CopyOf(extraCombinedJars), jars...)
|
||||
|
||||
// Combine the classes built from sources, any manifests, and any static libraries into
|
||||
// classes.jar. If there is only one input jar this step will be skipped.
|
||||
var outputFile android.OutputPath
|
||||
|
Reference in New Issue
Block a user