Merge "Propagate java resources in apps with no code"
This commit is contained in:
@@ -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) {
|
||||
|
@@ -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 {
|
||||
|
@@ -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
|
||||
|
18
java/java.go
18
java/java.go
@@ -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)
|
||||
|
Reference in New Issue
Block a user