diff options
Diffstat (limited to 'java')
-rw-r--r-- | java/dex.go | 7 | ||||
-rw-r--r-- | java/sdk_library.go | 16 | ||||
-rw-r--r-- | java/sdk_library_test.go | 32 | ||||
-rw-r--r-- | java/test_spec_test.go | 3 |
4 files changed, 53 insertions, 5 deletions
diff --git a/java/dex.go b/java/dex.go index aa017834d..dab0836ff 100644 --- a/java/dex.go +++ b/java/dex.go @@ -106,7 +106,7 @@ func (d *dexer) effectiveOptimizeEnabled() bool { var d8, d8RE = pctx.MultiCommandRemoteStaticRules("d8", blueprint.RuleParams{ Command: `rm -rf "$outDir" && mkdir -p "$outDir" && ` + - `$d8Template${config.D8Cmd} ${config.D8Flags} --output $outDir $d8Flags --no-dex-input-jar $in && ` + + `$d8Template${config.D8Cmd} ${config.D8Flags} $d8Flags --output $outDir --no-dex-input-jar $in && ` + `$zipTemplate${config.SoongZipCmd} $zipFlags -o $outDir/classes.dex.jar -C $outDir -f "$outDir/classes*.dex" && ` + `${config.MergeZipsCmd} -D -stripFile "**/*.class" $mergeZipsFlags $out $outDir/classes.dex.jar $in && ` + `rm -f "$outDir/classes*.dex" "$outDir/classes.dex.jar"`, @@ -137,13 +137,12 @@ var r8, r8RE = pctx.MultiCommandRemoteStaticRules("r8", Command: `rm -rf "$outDir" && mkdir -p "$outDir" && ` + `rm -f "$outDict" && rm -f "$outConfig" && rm -rf "${outUsageDir}" && ` + `mkdir -p $$(dirname ${outUsage}) && ` + - `$r8Template${config.R8Cmd} ${config.R8Flags} -injars $in --output $outDir ` + + `$r8Template${config.R8Cmd} ${config.R8Flags} $r8Flags -injars $in --output $outDir ` + `--no-data-resources ` + `-printmapping ${outDict} ` + `-printconfiguration ${outConfig} ` + `-printusage ${outUsage} ` + - `--deps-file ${out}.d ` + - `$r8Flags && ` + + `--deps-file ${out}.d && ` + `touch "${outDict}" "${outConfig}" "${outUsage}" && ` + `${config.SoongZipCmd} -o ${outUsageZip} -C ${outUsageDir} -f ${outUsage} && ` + `rm -rf ${outUsageDir} && ` + diff --git a/java/sdk_library.go b/java/sdk_library.go index fb2781213..fbfe509b8 100644 --- a/java/sdk_library.go +++ b/java/sdk_library.go @@ -1993,6 +1993,7 @@ func (module *SdkLibrary) createXmlFile(mctx android.DefaultableHookContext) { Min_device_sdk *string Max_device_sdk *string Sdk_library_min_api_level *string + Uses_libs_dependencies []string }{ Name: proptools.StringPtr(module.xmlPermissionsModuleName()), Lib_name: proptools.StringPtr(module.BaseModuleName()), @@ -2002,6 +2003,7 @@ func (module *SdkLibrary) createXmlFile(mctx android.DefaultableHookContext) { Min_device_sdk: module.commonSdkLibraryProperties.Min_device_sdk, Max_device_sdk: module.commonSdkLibraryProperties.Max_device_sdk, Sdk_library_min_api_level: &moduleMinApiLevelStr, + Uses_libs_dependencies: module.usesLibraryProperties.Uses_libs, } mctx.CreateModule(sdkLibraryXmlFactory, &props) @@ -2968,6 +2970,11 @@ type sdkLibraryXmlProperties struct { // // This value comes from the ApiLevel of the MinSdkVersion property. Sdk_library_min_api_level *string + + // Uses-libs dependencies that the shared library requires to work correctly. + // + // This will add dependency="foo:bar" to the <library> section. + Uses_libs_dependencies []string } // java_sdk_library_xml builds the permission xml file for a java_sdk_library. @@ -3076,6 +3083,13 @@ func formattedOptionalAttribute(attrName string, value *string) string { return fmt.Sprintf(` %s=\"%s\"\n`, attrName, *value) } +func formattedDependenciesAttribute(dependencies []string) string { + if dependencies == nil { + return "" + } + return fmt.Sprintf(` dependency=\"%s\"\n`, strings.Join(dependencies, ":")) +} + func (module *sdkLibraryXml) permissionsContents(ctx android.ModuleContext) string { libName := proptools.String(module.properties.Lib_name) libNameAttr := formattedOptionalAttribute("name", &libName) @@ -3085,6 +3099,7 @@ func (module *sdkLibraryXml) permissionsContents(ctx android.ModuleContext) stri implicitUntilAttr := formattedOptionalSdkLevelAttribute(ctx, "on-bootclasspath-before", module.properties.On_bootclasspath_before) minSdkAttr := formattedOptionalSdkLevelAttribute(ctx, "min-device-sdk", module.properties.Min_device_sdk) maxSdkAttr := formattedOptionalSdkLevelAttribute(ctx, "max-device-sdk", module.properties.Max_device_sdk) + dependenciesAttr := formattedDependenciesAttribute(module.properties.Uses_libs_dependencies) // <library> is understood in all android versions whereas <apex-library> is only understood from API T (and ignored before that). // similarly, min_device_sdk is only understood from T. So if a library is using that, we need to use the apex-library to make sure this library is not loaded before T var libraryTag string @@ -3118,6 +3133,7 @@ func (module *sdkLibraryXml) permissionsContents(ctx android.ModuleContext) stri implicitUntilAttr, minSdkAttr, maxSdkAttr, + dependenciesAttr, ` />\n`, `</permissions>\n`}, "") } diff --git a/java/sdk_library_test.go b/java/sdk_library_test.go index 82f8a4d50..a136818ca 100644 --- a/java/sdk_library_test.go +++ b/java/sdk_library_test.go @@ -1665,3 +1665,35 @@ func TestStaticDepStubLibrariesVisibility(t *testing.T) { } `) } + +func TestSdkLibraryDependency(t *testing.T) { + result := android.GroupFixturePreparers( + prepareForJavaTest, + PrepareForTestWithJavaSdkLibraryFiles, + FixtureWithPrebuiltApis(map[string][]string{ + "30": {"bar", "foo"}, + }), + ).RunTestWithBp(t, + ` + java_sdk_library { + name: "foo", + srcs: ["a.java", "b.java"], + api_packages: ["foo"], + } + + java_sdk_library { + name: "bar", + srcs: ["c.java", "b.java"], + libs: [ + "foo", + ], + uses_libs: [ + "foo", + ], + } +`) + + barPermissions := result.ModuleForTests("bar.xml", "android_common").Rule("java_sdk_xml") + + android.AssertStringDoesContain(t, "bar.xml java_sdk_xml command", barPermissions.RuleParams.Command, `dependency=\"foo\"`) +} diff --git a/java/test_spec_test.go b/java/test_spec_test.go index 22a8e60ee..39aff4cef 100644 --- a/java/test_spec_test.go +++ b/java/test_spec_test.go @@ -86,7 +86,8 @@ func TestTestSpec(t *testing.T) { // Tests for all_test_spec singleton. singleton := result.SingletonForTests("all_test_specs") rule := singleton.Rule("all_test_specs_rule") - expectedCmd := "out/soong/host/linux-x86/bin/metadata -rule test_spec -inputFile out/soong/all_test_spec_paths.rsp -outputFile out/soong/ownership/all_test_specs.pb" + prebuiltOs := result.Config.PrebuiltOS() + expectedCmd := "out/soong/host/" + prebuiltOs + "/bin/metadata -rule test_spec -inputFile out/soong/all_test_spec_paths.rsp -outputFile out/soong/ownership/all_test_specs.pb" expectedOutputFile := "out/soong/ownership/all_test_specs.pb" expectedInputFile := "out/soong/.intermediates/module-name/intermediateTestSpecMetadata.pb" if !strings.Contains( |