Merge "Allow java_sdk_library_import to contribute to hiddenapi processing"

This commit is contained in:
Paul Duffin
2021-03-01 17:04:39 +00:00
committed by Gerrit Code Review
3 changed files with 101 additions and 13 deletions

View File

@@ -19,6 +19,7 @@ import (
"io/ioutil" "io/ioutil"
"os" "os"
"path" "path"
"path/filepath"
"reflect" "reflect"
"regexp" "regexp"
"sort" "sort"
@@ -4518,14 +4519,16 @@ func TestPrebuiltExportDexImplementationJars(t *testing.T) {
func TestBootDexJarsFromSourcesAndPrebuilts(t *testing.T) { func TestBootDexJarsFromSourcesAndPrebuilts(t *testing.T) {
transform := func(config *dexpreopt.GlobalConfig) { transform := func(config *dexpreopt.GlobalConfig) {
config.BootJars = android.CreateTestConfiguredJarList([]string{"myapex:libfoo"}) config.BootJars = android.CreateTestConfiguredJarList([]string{"myapex:libfoo", "myapex:libbar"})
} }
checkBootDexJarPath := func(t *testing.T, ctx *android.TestContext, bootDexJarPath string) { checkBootDexJarPath := func(t *testing.T, ctx *android.TestContext, stem string, bootDexJarPath string) {
t.Helper()
s := ctx.SingletonForTests("dex_bootjars") s := ctx.SingletonForTests("dex_bootjars")
foundLibfooJar := false foundLibfooJar := false
base := stem + ".jar"
for _, output := range s.AllOutputs() { for _, output := range s.AllOutputs() {
if strings.HasSuffix(output, "/libfoo.jar") { if filepath.Base(output) == base {
foundLibfooJar = true foundLibfooJar = true
buildRule := s.Output(output) buildRule := s.Output(output)
actual := android.NormalizePathForTesting(buildRule.Input) actual := android.NormalizePathForTesting(buildRule.Input)
@@ -4540,6 +4543,7 @@ func TestBootDexJarsFromSourcesAndPrebuilts(t *testing.T) {
} }
checkHiddenAPIIndexInputs := func(t *testing.T, ctx *android.TestContext, expectedInputs string) { checkHiddenAPIIndexInputs := func(t *testing.T, ctx *android.TestContext, expectedInputs string) {
t.Helper()
hiddenAPIIndex := ctx.SingletonForTests("hiddenapi_index") hiddenAPIIndex := ctx.SingletonForTests("hiddenapi_index")
indexRule := hiddenAPIIndex.Rule("singleton-merged-hiddenapi-index") indexRule := hiddenAPIIndex.Rule("singleton-merged-hiddenapi-index")
java.CheckHiddenAPIRuleInputs(t, expectedInputs, indexRule) java.CheckHiddenAPIRuleInputs(t, expectedInputs, indexRule)
@@ -4557,7 +4561,7 @@ func TestBootDexJarsFromSourcesAndPrebuilts(t *testing.T) {
src: "myapex-arm.apex", src: "myapex-arm.apex",
}, },
}, },
exported_java_libs: ["libfoo"], exported_java_libs: ["libfoo", "libbar"],
} }
java_import { java_import {
@@ -4565,13 +4569,23 @@ func TestBootDexJarsFromSourcesAndPrebuilts(t *testing.T) {
jars: ["libfoo.jar"], jars: ["libfoo.jar"],
apex_available: ["myapex"], apex_available: ["myapex"],
} }
java_sdk_library_import {
name: "libbar",
public: {
jars: ["libbar.jar"],
},
apex_available: ["myapex"],
}
` `
ctx := testDexpreoptWithApexes(t, bp, "", transform) ctx := testDexpreoptWithApexes(t, bp, "", transform)
checkBootDexJarPath(t, ctx, ".intermediates/myapex.deapexer/android_common/deapexer/javalib/libfoo.jar") checkBootDexJarPath(t, ctx, "libfoo", ".intermediates/myapex.deapexer/android_common/deapexer/javalib/libfoo.jar")
checkBootDexJarPath(t, ctx, "libbar", ".intermediates/myapex.deapexer/android_common/deapexer/javalib/libbar.jar")
// Make sure that the dex file from the prebuilt_apex contributes to the hiddenapi index file. // Make sure that the dex file from the prebuilt_apex contributes to the hiddenapi index file.
checkHiddenAPIIndexInputs(t, ctx, ` checkHiddenAPIIndexInputs(t, ctx, `
.intermediates/libbar/android_common_myapex/hiddenapi/index.csv
.intermediates/libfoo/android_common_myapex/hiddenapi/index.csv .intermediates/libfoo/android_common_myapex/hiddenapi/index.csv
`) `)
}) })
@@ -4588,7 +4602,7 @@ func TestBootDexJarsFromSourcesAndPrebuilts(t *testing.T) {
src: "myapex-arm.apex", src: "myapex-arm.apex",
}, },
}, },
exported_java_libs: ["libfoo"], exported_java_libs: ["libfoo", "libbar"],
} }
java_import { java_import {
@@ -4602,6 +4616,21 @@ func TestBootDexJarsFromSourcesAndPrebuilts(t *testing.T) {
srcs: ["foo/bar/MyClass.java"], srcs: ["foo/bar/MyClass.java"],
apex_available: ["myapex"], apex_available: ["myapex"],
} }
java_sdk_library_import {
name: "libbar",
public: {
jars: ["libbar.jar"],
},
apex_available: ["myapex"],
}
java_sdk_library {
name: "libbar",
srcs: ["foo/bar/MyClass.java"],
unsafe_ignore_missing_latest_api: true,
apex_available: ["myapex"],
}
` `
// In this test the source (java_library) libfoo is active since the // In this test the source (java_library) libfoo is active since the
@@ -4624,7 +4653,7 @@ func TestBootDexJarsFromSourcesAndPrebuilts(t *testing.T) {
src: "myapex-arm.apex", src: "myapex-arm.apex",
}, },
}, },
exported_java_libs: ["libfoo"], exported_java_libs: ["libfoo", "libbar"],
} }
java_import { java_import {
@@ -4639,13 +4668,31 @@ func TestBootDexJarsFromSourcesAndPrebuilts(t *testing.T) {
srcs: ["foo/bar/MyClass.java"], srcs: ["foo/bar/MyClass.java"],
apex_available: ["myapex"], apex_available: ["myapex"],
} }
java_sdk_library_import {
name: "libbar",
prefer: true,
public: {
jars: ["libbar.jar"],
},
apex_available: ["myapex"],
}
java_sdk_library {
name: "libbar",
srcs: ["foo/bar/MyClass.java"],
unsafe_ignore_missing_latest_api: true,
apex_available: ["myapex"],
}
` `
ctx := testDexpreoptWithApexes(t, bp, "", transform) ctx := testDexpreoptWithApexes(t, bp, "", transform)
checkBootDexJarPath(t, ctx, ".intermediates/myapex.deapexer/android_common/deapexer/javalib/libfoo.jar") checkBootDexJarPath(t, ctx, "libfoo", ".intermediates/myapex.deapexer/android_common/deapexer/javalib/libfoo.jar")
checkBootDexJarPath(t, ctx, "libbar", ".intermediates/myapex.deapexer/android_common/deapexer/javalib/libbar.jar")
// Make sure that the dex file from the prebuilt_apex contributes to the hiddenapi index file. // Make sure that the dex file from the prebuilt_apex contributes to the hiddenapi index file.
checkHiddenAPIIndexInputs(t, ctx, ` checkHiddenAPIIndexInputs(t, ctx, `
.intermediates/prebuilt_libbar/android_common_myapex/hiddenapi/index.csv
.intermediates/prebuilt_libfoo/android_common_myapex/hiddenapi/index.csv .intermediates/prebuilt_libfoo/android_common_myapex/hiddenapi/index.csv
`) `)
}) })
@@ -4655,7 +4702,7 @@ func TestBootDexJarsFromSourcesAndPrebuilts(t *testing.T) {
apex { apex {
name: "myapex", name: "myapex",
key: "myapex.key", key: "myapex.key",
java_libs: ["libfoo"], java_libs: ["libfoo", "libbar"],
} }
apex_key { apex_key {
@@ -4674,7 +4721,7 @@ func TestBootDexJarsFromSourcesAndPrebuilts(t *testing.T) {
src: "myapex-arm.apex", src: "myapex-arm.apex",
}, },
}, },
exported_java_libs: ["libfoo"], exported_java_libs: ["libfoo", "libbar"],
} }
java_import { java_import {
@@ -4688,13 +4735,30 @@ func TestBootDexJarsFromSourcesAndPrebuilts(t *testing.T) {
srcs: ["foo/bar/MyClass.java"], srcs: ["foo/bar/MyClass.java"],
apex_available: ["myapex"], apex_available: ["myapex"],
} }
java_sdk_library_import {
name: "libbar",
public: {
jars: ["libbar.jar"],
},
apex_available: ["myapex"],
}
java_sdk_library {
name: "libbar",
srcs: ["foo/bar/MyClass.java"],
unsafe_ignore_missing_latest_api: true,
apex_available: ["myapex"],
}
` `
ctx := testDexpreoptWithApexes(t, bp, "", transform) ctx := testDexpreoptWithApexes(t, bp, "", transform)
checkBootDexJarPath(t, ctx, ".intermediates/libfoo/android_common_apex10000/hiddenapi/libfoo.jar") checkBootDexJarPath(t, ctx, "libfoo", ".intermediates/libfoo/android_common_apex10000/hiddenapi/libfoo.jar")
checkBootDexJarPath(t, ctx, "libbar", ".intermediates/libbar/android_common_myapex/hiddenapi/libbar.jar")
// Make sure that the dex file from the prebuilt_apex contributes to the hiddenapi index file. // Make sure that the dex file from the prebuilt_apex contributes to the hiddenapi index file.
checkHiddenAPIIndexInputs(t, ctx, ` checkHiddenAPIIndexInputs(t, ctx, `
.intermediates/libbar/android_common_myapex/hiddenapi/index.csv
.intermediates/libfoo/android_common_apex10000/hiddenapi/index.csv .intermediates/libfoo/android_common_apex10000/hiddenapi/index.csv
`) `)
}) })
@@ -4724,7 +4788,7 @@ func TestBootDexJarsFromSourcesAndPrebuilts(t *testing.T) {
src: "myapex-arm.apex", src: "myapex-arm.apex",
}, },
}, },
exported_java_libs: ["libfoo"], exported_java_libs: ["libfoo", "libbar"],
} }
java_import { java_import {
@@ -4739,13 +4803,31 @@ func TestBootDexJarsFromSourcesAndPrebuilts(t *testing.T) {
srcs: ["foo/bar/MyClass.java"], srcs: ["foo/bar/MyClass.java"],
apex_available: ["myapex"], apex_available: ["myapex"],
} }
java_sdk_library_import {
name: "libbar",
prefer: true,
public: {
jars: ["libbar.jar"],
},
apex_available: ["myapex"],
}
java_sdk_library {
name: "libbar",
srcs: ["foo/bar/MyClass.java"],
unsafe_ignore_missing_latest_api: true,
apex_available: ["myapex"],
}
` `
ctx := testDexpreoptWithApexes(t, bp, "", transform) ctx := testDexpreoptWithApexes(t, bp, "", transform)
checkBootDexJarPath(t, ctx, ".intermediates/myapex.deapexer/android_common/deapexer/javalib/libfoo.jar") checkBootDexJarPath(t, ctx, "libfoo", ".intermediates/myapex.deapexer/android_common/deapexer/javalib/libfoo.jar")
checkBootDexJarPath(t, ctx, "libbar", ".intermediates/myapex.deapexer/android_common/deapexer/javalib/libbar.jar")
// Make sure that the dex file from the prebuilt_apex contributes to the hiddenapi index file. // Make sure that the dex file from the prebuilt_apex contributes to the hiddenapi index file.
checkHiddenAPIIndexInputs(t, ctx, ` checkHiddenAPIIndexInputs(t, ctx, `
.intermediates/prebuilt_libbar/android_common_prebuilt_myapex/hiddenapi/index.csv
.intermediates/prebuilt_libfoo/android_common_prebuilt_myapex/hiddenapi/index.csv .intermediates/prebuilt_libfoo/android_common_prebuilt_myapex/hiddenapi/index.csv
`) `)
}) })
@@ -6374,6 +6456,7 @@ func testDexpreoptWithApexes(t *testing.T, bp, errmsg string, transformDexpreopt
ctx.RegisterModuleType("prebuilt_apex", PrebuiltFactory) ctx.RegisterModuleType("prebuilt_apex", PrebuiltFactory)
ctx.RegisterModuleType("filegroup", android.FileGroupFactory) ctx.RegisterModuleType("filegroup", android.FileGroupFactory)
ctx.PreArchMutators(android.RegisterDefaultsPreArchMutators) ctx.PreArchMutators(android.RegisterDefaultsPreArchMutators)
ctx.PreArchMutators(android.RegisterComponentsMutator)
android.RegisterPrebuiltMutators(ctx) android.RegisterPrebuiltMutators(ctx)
cc.RegisterRequiredBuildComponentsForTest(ctx) cc.RegisterRequiredBuildComponentsForTest(ctx)
java.RegisterRequiredBuildComponentsForTest(ctx) java.RegisterRequiredBuildComponentsForTest(ctx)

View File

@@ -1772,6 +1772,8 @@ type SdkLibraryImport struct {
android.ApexModuleBase android.ApexModuleBase
android.SdkBase android.SdkBase
hiddenAPI
properties sdkLibraryImportProperties properties sdkLibraryImportProperties
// Map from api scope to the scope specific property structure. // Map from api scope to the scope specific property structure.
@@ -2046,6 +2048,8 @@ func (module *SdkLibraryImport) GenerateAndroidBuildActions(ctx android.ModuleCo
di := ctx.OtherModuleProvider(deapexerModule, android.DeapexerProvider).(android.DeapexerInfo) di := ctx.OtherModuleProvider(deapexerModule, android.DeapexerProvider).(android.DeapexerInfo)
if dexOutputPath := di.PrebuiltExportPath(module.BaseModuleName(), ".dexjar"); dexOutputPath != nil { if dexOutputPath := di.PrebuiltExportPath(module.BaseModuleName(), ".dexjar"); dexOutputPath != nil {
module.dexJarFile = dexOutputPath module.dexJarFile = dexOutputPath
module.initHiddenAPI(ctx, module.configurationName)
module.hiddenAPIExtractInformation(ctx, dexOutputPath, module.findScopePaths(apiScopePublic).stubsImplPath[0])
} else { } else {
// This should never happen as a variant for a prebuilt_apex is only created if the // This should never happen as a variant for a prebuilt_apex is only created if the
// prebuilt_apex has been configured to export the java library dex file. // prebuilt_apex has been configured to export the java library dex file.

View File

@@ -240,6 +240,7 @@ func CheckModuleDependencies(t *testing.T, ctx *android.TestContext, name, varia
} }
func CheckHiddenAPIRuleInputs(t *testing.T, expected string, hiddenAPIRule android.TestingBuildParams) { func CheckHiddenAPIRuleInputs(t *testing.T, expected string, hiddenAPIRule android.TestingBuildParams) {
t.Helper()
actual := strings.TrimSpace(strings.Join(android.NormalizePathsForTesting(hiddenAPIRule.Implicits), "\n")) actual := strings.TrimSpace(strings.Join(android.NormalizePathsForTesting(hiddenAPIRule.Implicits), "\n"))
expected = strings.TrimSpace(expected) expected = strings.TrimSpace(expected)
if actual != expected { if actual != expected {