diff --git a/apex/androidmk.go b/apex/androidmk.go index 9aa089436..b5c533173 100644 --- a/apex/androidmk.go +++ b/apex/androidmk.go @@ -117,6 +117,9 @@ func (a *apexBundle) androidMkForFiles(w io.Writer, apexName, moduleDir string) fmt.Fprintln(w, "LOCAL_IS_HOST_MODULE := true") } } + if fi.jacocoReportClassesFile != nil { + fmt.Fprintln(w, "LOCAL_SOONG_JACOCO_REPORT_CLASSES_JAR :=", fi.jacocoReportClassesFile.String()) + } if fi.class == javaSharedLib { javaModule := fi.module.(javaLibrary) // soong_java_prebuilt.mk sets LOCAL_MODULE_SUFFIX := .jar Therefore @@ -128,6 +131,12 @@ func (a *apexBundle) androidMkForFiles(w io.Writer, apexName, moduleDir string) fmt.Fprintln(w, "LOCAL_SOONG_DEX_JAR :=", fi.builtFile.String()) fmt.Fprintln(w, "LOCAL_DEX_PREOPT := false") fmt.Fprintln(w, "include $(BUILD_SYSTEM)/soong_java_prebuilt.mk") + } else if fi.class == app { + // soong_app_prebuilt.mk sets LOCAL_MODULE_SUFFIX := .apk Therefore + // we need to remove the suffix from LOCAL_MODULE_STEM, otherwise + // we will have foo.apk.apk + fmt.Fprintln(w, "LOCAL_MODULE_STEM :=", strings.TrimSuffix(fi.builtFile.Base(), ".apk")) + fmt.Fprintln(w, "include $(BUILD_SYSTEM)/soong_app_prebuilt.mk") } else if fi.class == nativeSharedLib || fi.class == nativeExecutable || fi.class == nativeTest { fmt.Fprintln(w, "LOCAL_MODULE_STEM :=", fi.builtFile.Base()) if cc, ok := fi.module.(*cc.Module); ok { diff --git a/apex/apex.go b/apex/apex.go index 9867a7a81..75a60537a 100644 --- a/apex/apex.go +++ b/apex/apex.go @@ -465,6 +465,8 @@ type apexFile struct { requiredModuleNames []string targetRequiredModuleNames []string hostRequiredModuleNames []string + + jacocoReportClassesFile android.Path // only for javalibs and apps } func newApexFile(ctx android.BaseModuleContext, builtFile android.Path, moduleName string, installDir string, class apexFileClass, module android.Module) apexFile { @@ -889,7 +891,9 @@ type javaLibrary interface { func apexFileForJavaLibrary(ctx android.BaseModuleContext, lib javaLibrary) apexFile { dirInApex := "javalib" fileToCopy := lib.DexJar() - return newApexFile(ctx, fileToCopy, lib.Name(), dirInApex, javaSharedLib, lib) + af := newApexFile(ctx, fileToCopy, lib.Name(), dirInApex, javaSharedLib, lib) + af.jacocoReportClassesFile = lib.JacocoReportClassesFile() + return af } func apexFileForPrebuiltEtc(ctx android.BaseModuleContext, prebuilt android.PrebuiltEtcModule, depName string) apexFile { @@ -902,6 +906,7 @@ func apexFileForAndroidApp(ctx android.BaseModuleContext, aapp interface { android.Module Privileged() bool OutputFile() android.Path + JacocoReportClassesFile() android.Path }, pkgName string) apexFile { appDir := "app" if aapp.Privileged() { @@ -909,7 +914,9 @@ func apexFileForAndroidApp(ctx android.BaseModuleContext, aapp interface { } dirInApex := filepath.Join(appDir, pkgName) fileToCopy := aapp.OutputFile() - return newApexFile(ctx, fileToCopy, aapp.Name(), dirInApex, app, aapp) + af := newApexFile(ctx, fileToCopy, aapp.Name(), dirInApex, app, aapp) + af.jacocoReportClassesFile = aapp.JacocoReportClassesFile() + return af } // Context "decorator", overriding the InstallBypassMake method to always reply `true`. diff --git a/java/aar.go b/java/aar.go index 201e590be..ae064e5b6 100644 --- a/java/aar.go +++ b/java/aar.go @@ -576,6 +576,10 @@ func (a *AARImport) Name() string { return a.prebuilt.Name(a.ModuleBase.Name()) } +func (a *AARImport) JacocoReportClassesFile() android.Path { + return nil +} + func (a *AARImport) DepsMutator(ctx android.BottomUpMutatorContext) { if !ctx.Config().UnbundledBuildUsePrebuiltSdks() { sdkDep := decodeSdkDep(ctx, sdkContext(a)) diff --git a/java/app.go b/java/app.go index 2933ccb4c..05fa50598 100755 --- a/java/app.go +++ b/java/app.go @@ -1062,6 +1062,10 @@ func (a *AndroidAppImport) OutputFile() android.Path { return a.outputFile } +func (a *AndroidAppImport) JacocoReportClassesFile() android.Path { + return nil +} + var dpiVariantGroupType reflect.Type var archVariantGroupType reflect.Type diff --git a/java/device_host_converter.go b/java/device_host_converter.go index 15244184e..b40ab9316 100644 --- a/java/device_host_converter.go +++ b/java/device_host_converter.go @@ -170,6 +170,10 @@ func (d *DeviceHostConverter) SrcJarArgs() ([]string, android.Paths) { return d.srcJarArgs, d.srcJarDeps } +func (d *DeviceHostConverter) JacocoReportClassesFile() android.Path { + return nil +} + func (d *DeviceHostConverter) AndroidMk() android.AndroidMkData { return android.AndroidMkData{ Class: "JAVA_LIBRARIES", diff --git a/java/java.go b/java/java.go index a48b5a300..bfdc7fcc0 100644 --- a/java/java.go +++ b/java/java.go @@ -447,6 +447,7 @@ type Dependency interface { ExportedPlugins() (android.Paths, []string) SrcJarArgs() ([]string, android.Paths) BaseModuleName() string + JacocoReportClassesFile() android.Path } type SdkLibraryDependency interface { @@ -1719,6 +1720,10 @@ func (j *Module) Stem() string { return proptools.StringDefault(j.deviceProperties.Stem, j.Name()) } +func (j *Module) JacocoReportClassesFile() android.Path { + return j.jacocoReportClassesFile +} + // // Java libraries (.jar file) // @@ -2295,6 +2300,10 @@ func (j *Import) Stem() string { return proptools.StringDefault(j.properties.Stem, j.ModuleBase.Name()) } +func (a *Import) JacocoReportClassesFile() android.Path { + return nil +} + func (j *Import) DepsMutator(ctx android.BottomUpMutatorContext) { ctx.AddVariationDependencies(nil, libTag, j.properties.Libs...) }