Merge changes from topic "enable-hidden-api" into main am: e100a884e3

Original change: https://android-review.googlesource.com/c/platform/build/soong/+/2617274

Change-Id: I2840b6d745b8bd0e032c34dda364ac6378da9f74
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Jihoon Kang
2023-10-12 17:38:48 +00:00
committed by Automerger Merge Worker
4 changed files with 67 additions and 9 deletions

View File

@@ -316,6 +316,60 @@ func TestBootclasspathFragment_StubLibs(t *testing.T) {
android.AssertPathsRelativeToTopEquals(t, "widest dex stubs jar", expectedWidestPaths, info.TransitiveStubDexJarsByScope.StubDexJarsForWidestAPIScope())
}
func TestFromTextWidestApiScope(t *testing.T) {
result := android.GroupFixturePreparers(
prepareForTestWithBootclasspathFragment,
PrepareForTestWithJavaSdkLibraryFiles,
android.FixtureModifyConfig(func(config android.Config) {
config.SetBuildFromTextStub(true)
}),
FixtureWithLastReleaseApis("mysdklibrary", "android-non-updatable"),
FixtureConfigureApexBootJars("someapex:mysdklibrary"),
).RunTestWithBp(t, `
bootclasspath_fragment {
name: "myfragment",
contents: ["mysdklibrary"],
additional_stubs: [
"android-non-updatable",
],
hidden_api: {
split_packages: ["*"],
},
}
java_sdk_library {
name: "mysdklibrary",
srcs: ["a.java"],
shared_library: false,
public: {enabled: true},
system: {enabled: true},
}
java_sdk_library {
name: "android-non-updatable",
srcs: ["b.java"],
compile_dex: true,
public: {
enabled: true,
},
system: {
enabled: true,
},
test: {
enabled: true,
},
module_lib: {
enabled: true,
},
}
`)
fragment := result.ModuleForTests("myfragment", "android_common")
dependencyStubDexFlag := "--dependency-stub-dex=out/soong/.intermediates/default/java/android-non-updatable.stubs.test_module_lib/android_common/dex/android-non-updatable.stubs.test_module_lib.jar"
stubFlagsCommand := fragment.Output("modular-hiddenapi/stub-flags.csv").RuleParams.Command
android.AssertStringDoesContain(t,
"Stub flags generating command does not include the expected dependency stub dex file",
stubFlagsCommand, dependencyStubDexFlag)
}
func TestSnapshotWithBootclasspathFragment_HiddenAPI(t *testing.T) {
result := android.GroupFixturePreparers(
prepareForTestWithBootclasspathFragment,

View File

@@ -38,10 +38,14 @@ type HiddenAPIScope struct {
// The option needed to passed to "hiddenapi list".
hiddenAPIListOption string
// The name sof the source stub library modules that contain the API provided by the platform,
// The names of the source stub library modules that contain the API provided by the platform,
// i.e. by modules that are not in an APEX.
nonUpdatableSourceModule string
// The names of from-text stub library modules that contain the API provided by the platform,
// i.e. by modules that are not in an APEX.
nonUpdatableFromTextModule string
// The names of the prebuilt stub library modules that contain the API provided by the platform,
// i.e. by modules that are not in an APEX.
nonUpdatablePrebuiltModule string
@@ -86,6 +90,9 @@ func (l *HiddenAPIScope) scopeSpecificStubModule(ctx android.BaseModuleContext,
if ctx.Config().AlwaysUsePrebuiltSdks() {
return l.nonUpdatablePrebuiltModule
} else {
if l.nonUpdatableFromTextModule != "" && ctx.Config().BuildFromTextStub() {
return l.nonUpdatableFromTextModule
}
return l.nonUpdatableSourceModule
}
} else {
@@ -117,8 +124,9 @@ var (
hiddenAPIListOption: "--test-stub-classpath",
})
ModuleLibHiddenAPIScope = initHiddenAPIScope(&HiddenAPIScope{
name: "module-lib",
sdkKind: android.SdkModule,
name: "module-lib",
sdkKind: android.SdkModule,
nonUpdatableFromTextModule: "android-non-updatable.stubs.test_module_lib",
})
CorePlatformHiddenAPIScope = initHiddenAPIScope(&HiddenAPIScope{
name: "core-platform",
@@ -647,7 +655,7 @@ func (s StubDexJarsByModule) addStubDexJar(ctx android.ModuleContext, module and
// public version is provided by the art.module.public.api module. In those cases it is necessary
// to treat all those modules as they were the same name, otherwise it will result in multiple
// definitions of a single class being passed to hidden API processing which will cause an error.
if name == scope.nonUpdatablePrebuiltModule || name == scope.nonUpdatableSourceModule {
if name == scope.nonUpdatablePrebuiltModule || name == scope.nonUpdatableSourceModule || name == scope.nonUpdatableFromTextModule {
// Treat all *android-non-updatable* modules as if they were part of an android-non-updatable
// java_sdk_library.
// TODO(b/192067200): Remove once android-non-updatable is a java_sdk_library or equivalent.

View File

@@ -491,6 +491,7 @@ func gatherRequiredDepsForTest() string {
"android-non-updatable.stubs.system.from-text": systemDroidstubs,
"android-non-updatable.stubs.test.from-text": testDroidstubs,
"android-non-updatable.stubs.module_lib.from-text": moduleLibDroidstubs,
"android-non-updatable.stubs.test_module_lib": moduleLibDroidstubs,
}
for _, droidstubs := range droidstubsStructs {

View File

@@ -472,11 +472,6 @@ func NewConfig(ctx Context, args ...string) Config {
}
}
if ret.BuildFromTextStub() {
// TODO(b/271443071): support hidden api check for from-text stub build
ret.environ.Set("UNSAFE_DISABLE_HIDDENAPI_FLAGS", "true")
}
bpd := ret.BazelMetricsDir()
if err := os.RemoveAll(bpd); err != nil {
ctx.Fatalf("Unable to remove bazel profile directory %q: %v", bpd, err)