Merge "Propagate java resources in apps with no code"

This commit is contained in:
Treehugger Robot
2021-02-28 00:31:28 +00:00
committed by Gerrit Code Review
4 changed files with 90 additions and 47 deletions

View File

@@ -220,7 +220,7 @@ func (prebuilt *DexImport) AndroidMkEntries() []android.AndroidMkEntries {
}
return []android.AndroidMkEntries{android.AndroidMkEntries{
Class: "JAVA_LIBRARIES",
OutputFile: android.OptionalPathForPath(prebuilt.maybeStrippedDexJarFile),
OutputFile: android.OptionalPathForPath(prebuilt.dexJarFile),
Include: "$(BUILD_SYSTEM)/soong_java_prebuilt.mk",
ExtraEntries: []android.AndroidMkExtraEntriesFunc{
func(ctx android.AndroidMkExtraEntriesContext, entries *android.AndroidMkEntries) {

View File

@@ -469,7 +469,7 @@ func (a *AndroidApp) dexBuildActions(ctx android.ModuleContext) android.Path {
a.Module.compile(ctx, a.aaptSrcJar)
}
return a.maybeStrippedDexJarFile
return a.dexJarFile
}
func (a *AndroidApp) jniBuildActions(jniLibs []jniLib, ctx android.ModuleContext) android.WritablePath {

View File

@@ -685,6 +685,51 @@ func TestLibraryAssets(t *testing.T) {
}
}
func TestAppJavaResources(t *testing.T) {
bp := `
android_app {
name: "foo",
sdk_version: "current",
java_resources: ["resources/a"],
srcs: ["a.java"],
}
android_app {
name: "bar",
sdk_version: "current",
java_resources: ["resources/a"],
}
`
ctx := testApp(t, bp)
foo := ctx.ModuleForTests("foo", "android_common")
fooResources := foo.Output("res/foo.jar")
fooDexJar := foo.Output("dex-withres/foo.jar")
fooDexJarAligned := foo.Output("dex-withres-aligned/foo.jar")
fooApk := foo.Rule("combineApk")
if g, w := fooDexJar.Inputs.Strings(), fooResources.Output.String(); !android.InList(w, g) {
t.Errorf("expected resource jar %q in foo dex jar inputs %q", w, g)
}
if g, w := fooDexJarAligned.Input.String(), fooDexJar.Output.String(); g != w {
t.Errorf("expected dex jar %q in foo aligned dex jar inputs %q", w, g)
}
if g, w := fooApk.Inputs.Strings(), fooDexJarAligned.Output.String(); !android.InList(w, g) {
t.Errorf("expected aligned dex jar %q in foo apk inputs %q", w, g)
}
bar := ctx.ModuleForTests("bar", "android_common")
barResources := bar.Output("res/bar.jar")
barApk := bar.Rule("combineApk")
if g, w := barApk.Inputs.Strings(), barResources.Output.String(); !android.InList(w, g) {
t.Errorf("expected resources jar %q in bar apk inputs %q", w, g)
}
}
func TestAndroidResources(t *testing.T) {
testCases := []struct {
name string

View File

@@ -434,9 +434,6 @@ type Module struct {
// output file containing classes.dex and resources
dexJarFile android.Path
// output file that contains classes.dex if it should be in the output file
maybeStrippedDexJarFile android.Path
// output file containing uninstrumented classes that will be instrumented by jacoco
jacocoReportClassesFile android.Path
@@ -1818,8 +1815,8 @@ func (j *Module) compile(ctx android.ModuleContext, aaptSrcJar android.Path) {
}
}
if ctx.Device() && j.hasCode(ctx) &&
(Bool(j.properties.Installable) || Bool(j.dexProperties.Compile_dex)) {
if ctx.Device() && (Bool(j.properties.Installable) || Bool(j.dexProperties.Compile_dex)) {
if j.hasCode(ctx) {
if j.shouldInstrumentStatic(ctx) {
j.dexer.extraProguardFlagFiles = append(j.dexer.extraProguardFlagFiles,
android.PathForSource(ctx, "build/make/core/proguard.jacoco.flags"))
@@ -1855,9 +1852,13 @@ func (j *Module) compile(ctx android.ModuleContext, aaptSrcJar android.Path) {
// Dexpreopting
j.dexpreopt(ctx, dexOutputFile)
j.maybeStrippedDexJarFile = dexOutputFile
outputFile = dexOutputFile
} else {
// There is no code to compile into a dex jar, make sure the resources are propagated
// to the APK if this is an app.
outputFile = implementationAndResourcesJar
j.dexJarFile = j.resourceJar
}
if ctx.Failed() {
return
@@ -3184,7 +3185,6 @@ type DexImport struct {
properties DexImportProperties
dexJarFile android.Path
maybeStrippedDexJarFile android.Path
dexpreopter
@@ -3271,8 +3271,6 @@ func (j *DexImport) GenerateAndroidBuildActions(ctx android.ModuleContext) {
j.dexpreopt(ctx, dexOutputFile)
j.maybeStrippedDexJarFile = dexOutputFile
if apexInfo.IsForPlatform() {
ctx.InstallFile(android.PathForModuleInstall(ctx, "framework"),
j.Stem()+".jar", dexOutputFile)