diff options
Diffstat (limited to 'java')
| -rw-r--r-- | java/aar.go | 22 | ||||
| -rwxr-xr-x | java/app.go | 16 | ||||
| -rw-r--r-- | java/app_import.go | 2 | ||||
| -rw-r--r-- | java/app_test.go | 21 | ||||
| -rw-r--r-- | java/base.go | 12 | ||||
| -rw-r--r-- | java/config/config.go | 46 | ||||
| -rw-r--r-- | java/config/error_prone.go | 24 | ||||
| -rw-r--r-- | java/hiddenapi_modular.go | 62 | ||||
| -rw-r--r-- | java/java.go | 31 | ||||
| -rw-r--r-- | java/jdeps.go | 2 | ||||
| -rw-r--r-- | java/testing.go | 4 |
11 files changed, 189 insertions, 53 deletions
diff --git a/java/aar.go b/java/aar.go index 8e1025361..00ff7e774 100644 --- a/java/aar.go +++ b/java/aar.go @@ -598,16 +598,26 @@ func AndroidLibraryFactory() android.Module { // AAR (android library) prebuilts // +// Properties for android_library_import type AARImportProperties struct { + // ARR (android library prebuilt) filepath. Exactly one ARR is required. Aars []string `android:"path"` - - Sdk_version *string + // If not blank, set to the version of the sdk to compile against. + // Defaults to private. + // Values are of one of the following forms: + // 1) numerical API level, "current", "none", or "core_platform" + // 2) An SDK kind with an API level: "<sdk kind>_<API level>" + // See build/soong/android/sdk_version.go for the complete and up to date list of SDK kinds. + // If the SDK kind is empty, it will be set to public + Sdk_version *string + // If not blank, set the minimum version of the sdk that the compiled artifacts will run against. + // Defaults to sdk_version if not set. See sdk_version for possible values. Min_sdk_version *string - + // List of java static libraries that the included ARR (android library prebuilts) has dependencies to. Static_libs []string - Libs []string - - // if set to true, run Jetifier against .aar file. Defaults to false. + // List of java libraries that the included ARR (android library prebuilts) has dependencies to. + Libs []string + // If set to true, run Jetifier against .aar file. Defaults to false. Jetifier *bool } diff --git a/java/app.go b/java/app.go index 21ee34e7c..2b52eab15 100755 --- a/java/app.go +++ b/java/app.go @@ -638,7 +638,21 @@ func (a *AndroidApp) generateAndroidBuildActions(ctx android.ModuleContext) { } certificates := processMainCert(a.ModuleBase, a.getCertString(ctx), certificateDeps, ctx) - a.certificate = certificates[0] + + // This can be reached with an empty certificate list if AllowMissingDependencies is set + // and the certificate property for this module is a module reference to a missing module. + if len(certificates) > 0 { + a.certificate = certificates[0] + } else { + if !ctx.Config().AllowMissingDependencies() && len(ctx.GetMissingDependencies()) > 0 { + panic("Should only get here if AllowMissingDependencies set and there are missing dependencies") + } + // Set a certificate to avoid panics later when accessing it. + a.certificate = Certificate{ + Key: android.PathForModuleOut(ctx, "missing.pk8"), + Pem: android.PathForModuleOut(ctx, "missing.pem"), + } + } // Build a final signed app package. packageFile := android.PathForModuleOut(ctx, a.installApkName+".apk") diff --git a/java/app_import.go b/java/app_import.go index a1c4d5859..b017eca60 100644 --- a/java/app_import.go +++ b/java/app_import.go @@ -466,7 +466,7 @@ func createVariantGroupType(variants []string, variantGroupName string) reflect. // apk: "prebuilts/example_xhdpi.apk", // }, // }, -// certificate: "PRESIGNED", +// presigned: true, // } func AndroidAppImportFactory() android.Module { module := &AndroidAppImport{} diff --git a/java/app_test.go b/java/app_test.go index 08baf5434..6a4508cd6 100644 --- a/java/app_test.go +++ b/java/app_test.go @@ -2948,3 +2948,24 @@ func TestTargetSdkVersionManifestFixer(t *testing.T) { android.AssertStringDoesContain(t, testCase.name, manifestFixerArgs, "--targetSdkVersion "+testCase.targetSdkVersionExpected) } } + +func TestAppMissingCertificateAllowMissingDependencies(t *testing.T) { + result := android.GroupFixturePreparers( + PrepareForTestWithJavaDefaultModules, + android.PrepareForTestWithAllowMissingDependencies, + android.PrepareForTestWithAndroidMk, + ).RunTestWithBp(t, ` + android_app { + name: "foo", + srcs: ["a.java"], + certificate: ":missing_certificate", + sdk_version: "current", + }`) + + foo := result.ModuleForTests("foo", "android_common") + fooApk := foo.Output("foo.apk") + if fooApk.Rule != android.ErrorRule { + t.Fatalf("expected ErrorRule for foo.apk, got %s", fooApk.Rule.String()) + } + android.AssertStringDoesContain(t, "expected error rule message", fooApk.Args["error"], "missing dependencies: missing_certificate\n") +} diff --git a/java/base.go b/java/base.go index 5802099ae..6f12f6c7e 100644 --- a/java/base.go +++ b/java/base.go @@ -185,12 +185,12 @@ type CommonProperties struct { // constructing a new module. type DeviceProperties struct { // If not blank, set to the version of the sdk to compile against. - // Defaults to compiling against the current platform. + // Defaults to private. // Values are of one of the following forms: - // 1) numerical API level or "current" - // 2) An SDK kind with an API level: "<sdk kind>_<API level>". See - // build/soong/android/sdk_version.go for the complete and up to date list of - // SDK kinds. If the SDK kind value is empty, it will be set to public. + // 1) numerical API level, "current", "none", or "core_platform" + // 2) An SDK kind with an API level: "<sdk kind>_<API level>" + // See build/soong/android/sdk_version.go for the complete and up to date list of SDK kinds. + // If the SDK kind is empty, it will be set to public. Sdk_version *string // if not blank, set the minimum version of the sdk that the compiled artifacts will run against. @@ -1694,6 +1694,8 @@ func (j *Module) IDEInfo(dpInfo *android.IdeInfo) { dpInfo.Jarjar_rules = append(dpInfo.Jarjar_rules, j.expandJarjarRules.String()) } dpInfo.Paths = append(dpInfo.Paths, j.modulePaths...) + dpInfo.Static_libs = append(dpInfo.Static_libs, j.properties.Static_libs...) + dpInfo.Libs = append(dpInfo.Libs, j.properties.Libs...) } func (j *Module) CompilerDeps() []string { diff --git a/java/config/config.go b/java/config/config.go index 262c53196..95b841fa7 100644 --- a/java/config/config.go +++ b/java/config/config.go @@ -26,7 +26,8 @@ import ( ) var ( - pctx = android.NewPackageContext("android/soong/java/config") + pctx = android.NewPackageContext("android/soong/java/config") + exportedVars = android.NewExportedVariables(pctx) LegacyCorePlatformBootclasspathLibraries = []string{"legacy.core.platform.api.stubs", "core-lambda-stubs"} LegacyCorePlatformSystemModules = "legacy-core-platform-api-stubs-system-modules" @@ -53,25 +54,40 @@ var ( } ) -const ( - JavaVmFlags = `-XX:OnError="cat hs_err_pid%p.log" -XX:CICompilerCount=6 -XX:+UseDynamicNumberOfGCThreads` - JavacVmFlags = `-J-XX:OnError="cat hs_err_pid%p.log" -J-XX:CICompilerCount=6 -J-XX:+UseDynamicNumberOfGCThreads -J-XX:+TieredCompilation -J-XX:TieredStopAtLevel=1` +var ( + JavacVmFlags = strings.Join(javacVmFlagsList, " ") + javaVmFlagsList = []string{ + `-XX:OnError="cat hs_err_pid%p.log"`, + "-XX:CICompilerCount=6", + "-XX:+UseDynamicNumberOfGCThreads", + } + javacVmFlagsList = []string{ + `-J-XX:OnError="cat hs_err_pid%p.log"`, + "-J-XX:CICompilerCount=6", + "-J-XX:+UseDynamicNumberOfGCThreads", + "-J-XX:+TieredCompilation", + "-J-XX:TieredStopAtLevel=1", + } ) func init() { pctx.Import("github.com/google/blueprint/bootstrap") - pctx.StaticVariable("JavacHeapSize", "2048M") - pctx.StaticVariable("JavacHeapFlags", "-J-Xmx${JavacHeapSize}") + exportedVars.ExportStringStaticVariable("JavacHeapSize", "2048M") + exportedVars.ExportStringStaticVariable("JavacHeapFlags", "-J-Xmx${JavacHeapSize}") // ErrorProne can use significantly more memory than javac alone, give it a higher heap // size (b/221480398). - pctx.StaticVariable("ErrorProneHeapSize", "4096M") - pctx.StaticVariable("ErrorProneHeapFlags", "-J-Xmx${ErrorProneHeapSize}") + exportedVars.ExportStringStaticVariable("ErrorProneHeapSize", "4096M") + exportedVars.ExportStringStaticVariable("ErrorProneHeapFlags", "-J-Xmx${ErrorProneHeapSize}") - pctx.StaticVariable("DexFlags", "-JXX:OnError='cat hs_err_pid%p.log' -JXX:CICompilerCount=6 -JXX:+UseDynamicNumberOfGCThreads") + exportedVars.ExportStringListStaticVariable("DexFlags", []string{ + `-JXX:OnError="cat hs_err_pid%p.log"`, + "-JXX:CICompilerCount=6", + "-JXX:+UseDynamicNumberOfGCThreads", + }) - pctx.StaticVariable("CommonJdkFlags", strings.Join([]string{ + exportedVars.ExportStringListStaticVariable("CommonJdkFlags", []string{ `-Xmaxerrs 9999999`, `-encoding UTF-8`, `-sourcepath ""`, @@ -85,10 +101,10 @@ func init() { // b/65004097: prevent using java.lang.invoke.StringConcatFactory when using -target 1.9 `-XDstringConcat=inline`, - }, " ")) + }) - pctx.StaticVariable("JavaVmFlags", JavaVmFlags) - pctx.StaticVariable("JavacVmFlags", JavacVmFlags) + exportedVars.ExportStringListStaticVariable("JavaVmFlags", javaVmFlagsList) + exportedVars.ExportStringListStaticVariable("JavacVmFlags", javacVmFlagsList) pctx.VariableConfigMethod("hostPrebuiltTag", android.Config.PrebuiltOS) @@ -184,6 +200,10 @@ func init() { hostJNIToolVariableWithSdkToolsPrebuilt("SignapkJniLibrary", "libconscrypt_openjdk_jni") } +func BazelJavaToolchainVars(config android.Config) string { + return android.BazelToolchainVars(config, exportedVars) +} + func hostBinToolVariableWithSdkToolsPrebuilt(name, tool string) { pctx.VariableFunc(name, func(ctx android.PackageVarContext) string { if ctx.Config().AlwaysUsePrebuiltSdks() { diff --git a/java/config/error_prone.go b/java/config/error_prone.go index 48681b5c9..5f853c812 100644 --- a/java/config/error_prone.go +++ b/java/config/error_prone.go @@ -16,8 +16,6 @@ package config import ( "strings" - - "android/soong/android" ) var ( @@ -31,23 +29,23 @@ var ( ) // Wrapper that grabs value of val late so it can be initialized by a later module's init function -func errorProneVar(name string, val *[]string, sep string) { - pctx.VariableFunc(name, func(android.PackageVarContext) string { +func errorProneVar(val *[]string, sep string) func() string { + return func() string { return strings.Join(*val, sep) - }) + } } func init() { - errorProneVar("ErrorProneClasspath", &ErrorProneClasspath, ":") - errorProneVar("ErrorProneChecksError", &ErrorProneChecksError, " ") - errorProneVar("ErrorProneChecksWarning", &ErrorProneChecksWarning, " ") - errorProneVar("ErrorProneChecksDefaultDisabled", &ErrorProneChecksDefaultDisabled, " ") - errorProneVar("ErrorProneChecksOff", &ErrorProneChecksOff, " ") - errorProneVar("ErrorProneFlags", &ErrorProneFlags, " ") - pctx.StaticVariable("ErrorProneChecks", strings.Join([]string{ + exportedVars.ExportVariableFuncVariable("ErrorProneClasspath", errorProneVar(&ErrorProneClasspath, ":")) + exportedVars.ExportVariableFuncVariable("ErrorProneChecksError", errorProneVar(&ErrorProneChecksError, " ")) + exportedVars.ExportVariableFuncVariable("ErrorProneChecksWarning", errorProneVar(&ErrorProneChecksWarning, " ")) + exportedVars.ExportVariableFuncVariable("ErrorProneChecksDefaultDisabled", errorProneVar(&ErrorProneChecksDefaultDisabled, " ")) + exportedVars.ExportVariableFuncVariable("ErrorProneChecksOff", errorProneVar(&ErrorProneChecksOff, " ")) + exportedVars.ExportVariableFuncVariable("ErrorProneFlags", errorProneVar(&ErrorProneFlags, " ")) + exportedVars.ExportStringListStaticVariable("ErrorProneChecks", []string{ "${ErrorProneChecksOff}", "${ErrorProneChecksError}", "${ErrorProneChecksWarning}", "${ErrorProneChecksDefaultDisabled}", - }, " ")) + }) } diff --git a/java/hiddenapi_modular.go b/java/hiddenapi_modular.go index 95ded34bb..534a8145f 100644 --- a/java/hiddenapi_modular.go +++ b/java/hiddenapi_modular.go @@ -295,6 +295,12 @@ func hiddenAPIRetrieveDexJarBuildPath(ctx android.ModuleContext, module android. return dexJar.Path() } +// HIDDENAPI_STUB_FLAGS_IMPL_FLAGS is the set of flags that identify implementation only signatures, +// i.e. those signatures that are not part of any API (including the hidden API). +var HIDDENAPI_STUB_FLAGS_IMPL_FLAGS = []string{} + +var HIDDENAPI_FLAGS_CSV_IMPL_FLAGS = []string{"blocked"} + // buildRuleToGenerateHiddenAPIStubFlagsFile creates a rule to create a hidden API stub flags file. // // The rule is initialized but not built so that the caller can modify it and select an appropriate @@ -345,7 +351,8 @@ func buildRuleToGenerateHiddenAPIStubFlagsFile(ctx android.BuilderContext, name, // If there are stub flag files that have been generated by fragments on which this depends then // use them to validate the stub flag file generated by the rules created by this method. if len(stubFlagSubsets) > 0 { - validFile := buildRuleValidateOverlappingCsvFiles(ctx, name, desc, outputPath, stubFlagSubsets) + validFile := buildRuleValidateOverlappingCsvFiles(ctx, name, desc, outputPath, stubFlagSubsets, + HIDDENAPI_STUB_FLAGS_IMPL_FLAGS) // Add the file that indicates that the file generated by this is valid. // @@ -904,7 +911,8 @@ func buildRuleToGenerateHiddenApiFlags(ctx android.BuilderContext, name, desc st // If there are flag files that have been generated by fragments on which this depends then use // them to validate the flag file generated by the rules created by this method. if len(flagSubsets) > 0 { - validFile := buildRuleValidateOverlappingCsvFiles(ctx, name, desc, outputPath, flagSubsets) + validFile := buildRuleValidateOverlappingCsvFiles(ctx, name, desc, outputPath, flagSubsets, + HIDDENAPI_FLAGS_CSV_IMPL_FLAGS) // Add the file that indicates that the file generated by this is valid. // @@ -968,13 +976,29 @@ func buildRuleSignaturePatternsFile( return patternsFile } -// buildRuleRemoveBlockedFlag creates a rule that will remove entries from the input path which -// only have blocked flags. It will not remove entries that have blocked as well as other flags, -// e.g. blocked,core-platform-api. -func buildRuleRemoveBlockedFlag(ctx android.BuilderContext, name string, desc string, inputPath android.Path, filteredPath android.WritablePath) { +// buildRuleRemoveSignaturesWithImplementationFlags creates a rule that will remove signatures from +// the input flags file which have only the implementation flags, i.e. are not part of an API. +// +// The implementationFlags specifies the set of default flags that identifies the signature of a +// private, implementation only, member. Signatures that match those flags are removed from the +// flags as they are implementation only. +// +// This is used to remove implementation only signatures from the signature files that are persisted +// in the sdk snapshot as the sdk snapshots should not include implementation details. The +// signatures generated by this method will be compared by the buildRuleValidateOverlappingCsvFiles +// method which treats any missing signatures as if they were implementation only signatures. +func buildRuleRemoveSignaturesWithImplementationFlags(ctx android.BuilderContext, + name string, desc string, inputPath android.Path, filteredPath android.WritablePath, + implementationFlags []string) { + rule := android.NewRuleBuilder(pctx, ctx) + implementationFlagPattern := "" + for _, implementationFlag := range implementationFlags { + implementationFlagPattern = implementationFlagPattern + "," + implementationFlag + } rule.Command(). - Text(`grep -vE "^[^,]+,blocked$"`).Input(inputPath).Text(">").Output(filteredPath). + Text(`grep -vE "^[^,]+` + implementationFlagPattern + `$"`).Input(inputPath). + Text(">").Output(filteredPath). // Grep's exit code depends on whether it finds anything. It is 0 (build success) when it finds // something and 1 (build failure) when it does not and 2 (when it encounters an error). // However, while it is unlikely it is not an error if this does not find any matches. The @@ -986,7 +1010,14 @@ func buildRuleRemoveBlockedFlag(ctx android.BuilderContext, name string, desc st // buildRuleValidateOverlappingCsvFiles checks that the modular CSV files, i.e. the files generated // by the individual bootclasspath_fragment modules are subsets of the monolithic CSV file. -func buildRuleValidateOverlappingCsvFiles(ctx android.BuilderContext, name string, desc string, monolithicFilePath android.WritablePath, csvSubsets SignatureCsvSubsets) android.WritablePath { +// +// The implementationFlags specifies the set of default flags that identifies the signature of a +// private, implementation only, member. A signature which is present in a monolithic flags subset +// defined by SignatureCsvSubset but which is not present in the flags file from the corresponding +// module is assumed to be an implementation only member and so must have these flags. +func buildRuleValidateOverlappingCsvFiles(ctx android.BuilderContext, name string, desc string, + monolithicFilePath android.WritablePath, csvSubsets SignatureCsvSubsets, + implementationFlags []string) android.WritablePath { // The file which is used to record that the flags file is valid. validFile := pathForValidation(ctx, monolithicFilePath) @@ -994,14 +1025,19 @@ func buildRuleValidateOverlappingCsvFiles(ctx android.BuilderContext, name strin rule := android.NewRuleBuilder(pctx, ctx) command := rule.Command(). BuiltTool("verify_overlaps"). - Input(monolithicFilePath) + FlagWithInput("--monolithic-flags ", monolithicFilePath) for _, subset := range csvSubsets { command. + Flag("--module-flags "). Textf("%s:%s", subset.CsvFile, subset.SignaturePatternsFile). Implicit(subset.CsvFile).Implicit(subset.SignaturePatternsFile) } + for _, implementationFlag := range implementationFlags { + command.FlagWithArg("--implementation-flag ", implementationFlag) + } + // If validation passes then update the file that records that. command.Text("&& touch").Output(validFile) rule.Build(name+"Validation", desc+" validation") @@ -1075,12 +1111,16 @@ func hiddenAPIRulesForBootclasspathFragment(ctx android.ModuleContext, contents // Generate the filtered-stub-flags.csv file which contains the filtered stub flags that will be // compared against the monolithic stub flags. filteredStubFlagsCSV := android.PathForModuleOut(ctx, hiddenApiSubDir, "filtered-stub-flags.csv") - buildRuleRemoveBlockedFlag(ctx, "modularHiddenApiFilteredStubFlags", "modular hiddenapi filtered stub flags", stubFlagsCSV, filteredStubFlagsCSV) + buildRuleRemoveSignaturesWithImplementationFlags(ctx, "modularHiddenApiFilteredStubFlags", + "modular hiddenapi filtered stub flags", stubFlagsCSV, filteredStubFlagsCSV, + HIDDENAPI_STUB_FLAGS_IMPL_FLAGS) // Generate the filtered-flags.csv file which contains the filtered flags that will be compared // against the monolithic flags. filteredFlagsCSV := android.PathForModuleOut(ctx, hiddenApiSubDir, "filtered-flags.csv") - buildRuleRemoveBlockedFlag(ctx, "modularHiddenApiFilteredFlags", "modular hiddenapi filtered flags", allFlagsCSV, filteredFlagsCSV) + buildRuleRemoveSignaturesWithImplementationFlags(ctx, "modularHiddenApiFilteredFlags", + "modular hiddenapi filtered flags", allFlagsCSV, filteredFlagsCSV, + HIDDENAPI_FLAGS_CSV_IMPL_FLAGS) // Store the paths in the info for use by other modules and sdk snapshot generation. output := HiddenAPIOutput{ diff --git a/java/java.go b/java/java.go index 713fe9492..b34d6de8a 100644 --- a/java/java.go +++ b/java/java.go @@ -2041,6 +2041,10 @@ type javaDependencyLabels struct { // and also separates dependencies into dynamic dependencies and static dependencies. // Each corresponding Bazel target type, can have a different method for handling // dynamic vs. static dependencies, and so these are returned to the calling function. +type eventLogTagsAttributes struct { + Srcs bazel.LabelListAttribute +} + func (m *Library) convertLibraryAttrsBp2Build(ctx android.TopDownMutatorContext) (*javaCommonAttributes, *javaDependencyLabels) { var srcs bazel.LabelListAttribute archVariantProps := m.GetArchVariantProperties(ctx, &CommonProperties{}) @@ -2055,11 +2059,32 @@ func (m *Library) convertLibraryAttrsBp2Build(ctx android.TopDownMutatorContext) javaSrcPartition := "java" protoSrcPartition := "proto" + logtagSrcPartition := "logtag" srcPartitions := bazel.PartitionLabelListAttribute(ctx, &srcs, bazel.LabelPartitions{ - javaSrcPartition: bazel.LabelPartition{Extensions: []string{".java"}, Keep_remainder: true}, - protoSrcPartition: android.ProtoSrcLabelPartition, + javaSrcPartition: bazel.LabelPartition{Extensions: []string{".java"}, Keep_remainder: true}, + logtagSrcPartition: bazel.LabelPartition{Extensions: []string{".logtags", ".logtag"}}, + protoSrcPartition: android.ProtoSrcLabelPartition, }) + javaSrcs := srcPartitions[javaSrcPartition] + + var logtagsSrcs bazel.LabelList + if !srcPartitions[logtagSrcPartition].IsEmpty() { + logtagsLibName := m.Name() + "_logtags" + logtagsSrcs = bazel.MakeLabelList([]bazel.Label{{Label: ":" + logtagsLibName}}) + ctx.CreateBazelTargetModule( + bazel.BazelTargetModuleProperties{ + Rule_class: "event_log_tags", + Bzl_load_location: "//build/make/tools:event_log_tags.bzl", + }, + android.CommonAttributes{Name: logtagsLibName}, + &eventLogTagsAttributes{ + Srcs: srcPartitions[logtagSrcPartition], + }, + ) + } + javaSrcs.Append(bazel.MakeLabelListAttribute(logtagsSrcs)) + var javacopts []string if m.properties.Javacflags != nil { javacopts = append(javacopts, m.properties.Javacflags...) @@ -2071,7 +2096,7 @@ func (m *Library) convertLibraryAttrsBp2Build(ctx android.TopDownMutatorContext) } commonAttrs := &javaCommonAttributes{ - Srcs: srcPartitions[javaSrcPartition], + Srcs: javaSrcs, Plugins: bazel.MakeLabelListAttribute( android.BazelLabelForModuleDeps(ctx, m.properties.Plugins), ), diff --git a/java/jdeps.go b/java/jdeps.go index eff9a3174..373433517 100644 --- a/java/jdeps.go +++ b/java/jdeps.go @@ -71,6 +71,8 @@ func (j *jdepsGeneratorSingleton) GenerateBuildActions(ctx android.SingletonCont dpInfo.Jars = android.FirstUniqueStrings(dpInfo.Jars) dpInfo.SrcJars = android.FirstUniqueStrings(dpInfo.SrcJars) dpInfo.Paths = android.FirstUniqueStrings(dpInfo.Paths) + dpInfo.Static_libs = android.FirstUniqueStrings(dpInfo.Static_libs) + dpInfo.Libs = android.FirstUniqueStrings(dpInfo.Libs) moduleInfos[name] = dpInfo mkProvider, ok := module.(android.AndroidMkDataProvider) diff --git a/java/testing.go b/java/testing.go index 82aa29b61..4000334b5 100644 --- a/java/testing.go +++ b/java/testing.go @@ -70,6 +70,10 @@ var PrepareForTestWithJavaDefaultModulesWithoutFakeDex2oatd = android.GroupFixtu defaultJavaDir + "/framework/aidl": nil, // Needed for various deps defined in GatherRequiredDepsForTest() defaultJavaDir + "/a.java": nil, + + // Needed for R8 rules on apps + "build/make/core/proguard.flags": nil, + "build/make/core/proguard_basic_keeps.flags": nil, }.AddToFixture(), // The java default module definitions. android.FixtureAddTextFile(defaultJavaDir+"/Android.bp", gatherRequiredDepsForTest()), |