Merge "Merge Android 12"

This commit is contained in:
Xin Li
2021-10-07 23:50:21 +00:00
committed by Gerrit Code Review
10 changed files with 106 additions and 252 deletions

View File

@@ -289,6 +289,7 @@ func getFinalCodenamesMap(config Config) map[string]int {
"P": 28,
"Q": 29,
"R": 30,
"S": 31,
}
// TODO: Differentiate "current" and "future".
@@ -331,6 +332,7 @@ func getApiLevelsMap(config Config) map[string]int {
"P": 28,
"Q": 29,
"R": 30,
"S": 31,
}
for i, codename := range config.PlatformVersionActiveCodenames() {
apiLevelsMap[codename] = previewAPILevelBase + i

View File

@@ -175,6 +175,7 @@ func createCcSdkVariantRules() []Rule {
"tools/test/graphicsbenchmark/apps/sample_app",
"tools/test/graphicsbenchmark/functional_tests/java",
"vendor/xts/gts-tests/hostsidetests/gamedevicecert/apps/javatests",
"external/libtextclassifier/native",
}
platformVariantPropertiesAllowedList := []string{

View File

@@ -145,6 +145,7 @@ type variableProperties struct {
Arc struct {
Cflags []string `android:"arch_variant"`
Exclude_srcs []string `android:"arch_variant"`
Header_libs []string `android:"arch_variant"`
Include_dirs []string `android:"arch_variant"`
Shared_libs []string `android:"arch_variant"`
Static_libs []string `android:"arch_variant"`

View File

@@ -141,11 +141,6 @@ type apexBundleProperties struct {
// Default: true.
Compressible *bool
// For native libraries and binaries, use the vendor variant instead of the core (platform)
// variant. Default is false. DO NOT use this for APEXes that are installed to the system or
// system_ext partition.
Use_vendor *bool
// If set true, VNDK libs are considered as stable libs and are not included in this APEX.
// Should be only used in non-system apexes (e.g. vendor: true). Default is false.
Use_vndk_as_stable *bool
@@ -654,10 +649,7 @@ func (a *apexBundle) getImageVariation(ctx android.BottomUpMutatorContext) strin
var prefix string
var vndkVersion string
if deviceConfig.VndkVersion() != "" {
if proptools.Bool(a.properties.Use_vendor) {
prefix = cc.VendorVariationPrefix
vndkVersion = deviceConfig.PlatformVndkVersion()
} else if a.SocSpecific() || a.DeviceSpecific() {
if a.SocSpecific() || a.DeviceSpecific() {
prefix = cc.VendorVariationPrefix
vndkVersion = deviceConfig.VndkVersion()
} else if a.ProductSpecific() {
@@ -676,9 +668,6 @@ func (a *apexBundle) getImageVariation(ctx android.BottomUpMutatorContext) strin
}
func (a *apexBundle) DepsMutator(ctx android.BottomUpMutatorContext) {
// TODO(jiyong): move this kind of checks to GenerateAndroidBuildActions?
checkUseVendorProperty(ctx, a)
// apexBundle is a multi-arch targets module. Arch variant of apexBundle is set to 'common'.
// arch-specific targets are enabled by the compile_multilib setting of the apex bundle. For
// each target os/architectures, appropriate dependencies are selected by their
@@ -1240,42 +1229,6 @@ func apexFlattenedMutator(mctx android.BottomUpMutatorContext) {
}
}
// checkUseVendorProperty checks if the use of `use_vendor` property is allowed for the given APEX.
// When use_vendor is used, native modules are built with __ANDROID_VNDK__ and __ANDROID_APEX__,
// which may cause compatibility issues. (e.g. libbinder) Even though libbinder restricts its
// availability via 'apex_available' property and relies on yet another macro
// __ANDROID_APEX_<NAME>__, we restrict usage of "use_vendor:" from other APEX modules to avoid
// similar problems.
func checkUseVendorProperty(ctx android.BottomUpMutatorContext, a *apexBundle) {
if proptools.Bool(a.properties.Use_vendor) && !android.InList(a.Name(), useVendorAllowList(ctx.Config())) {
ctx.PropertyErrorf("use_vendor", "not allowed to set use_vendor: true")
}
}
var (
useVendorAllowListKey = android.NewOnceKey("useVendorAllowList")
)
func useVendorAllowList(config android.Config) []string {
return config.Once(useVendorAllowListKey, func() interface{} {
return []string{
// swcodec uses "vendor" variants for smaller size
"com.android.media.swcodec",
"test_com.android.media.swcodec",
}
}).([]string)
}
// setUseVendorAllowListForTest returns a FixturePreparer that overrides useVendorAllowList and
// must be called before the first call to useVendorAllowList()
func setUseVendorAllowListForTest(allowList []string) android.FixturePreparer {
return android.FixtureModifyConfig(func(config android.Config) {
config.Once(useVendorAllowListKey, func() interface{} {
return allowList
})
})
}
var _ android.DepIsInSameApex = (*apexBundle)(nil)
// Implements android.DepInInSameApex
@@ -1928,13 +1881,7 @@ func (a *apexBundle) GenerateAndroidBuildActions(ctx android.ModuleContext) {
// system libraries.
if !am.DirectlyInAnyApex() {
// we need a module name for Make
name := cc.ImplementationModuleNameForMake(ctx)
if !proptools.Bool(a.properties.Use_vendor) {
// we don't use subName(.vendor) for a "use_vendor: true" apex
// which is supposed to be installed in /system
name += cc.Properties.SubName
}
name := cc.ImplementationModuleNameForMake(ctx) + cc.Properties.SubName
if !android.InList(name, a.requiredDeps) {
a.requiredDeps = append(a.requiredDeps, name)
}
@@ -2118,7 +2065,7 @@ func (a *apexBundle) GenerateAndroidBuildActions(ctx android.ModuleContext) {
// the same library in the system partition, thus effectively sharing the same libraries
// across the APEX boundary. For unbundled APEX, all the gathered files are actually placed
// in the APEX.
a.linkToSystemLib = !ctx.Config().UnbundledBuild() && a.installable() && !proptools.Bool(a.properties.Use_vendor)
a.linkToSystemLib = !ctx.Config().UnbundledBuild() && a.installable()
// APEXes targeting other than system/system_ext partitions use vendor/product variants.
// So we can't link them to /system/lib libs which are core variants.
@@ -2327,10 +2274,6 @@ func (a *apexBundle) checkMinSdkVersion(ctx android.ModuleContext) {
if a.testApex || a.vndkApex {
return
}
// Meaningless to check min_sdk_version when building use_vendor modules against non-Trebleized targets
if proptools.Bool(a.properties.Use_vendor) && ctx.DeviceConfig().VndkVersion() == "" {
return
}
// apexBundle::minSdkVersion reports its own errors.
minSdkVersion := a.minSdkVersion(ctx)
android.CheckMinSdkVersion(a, ctx, minSdkVersion)
@@ -2950,7 +2893,6 @@ func makeApexAvailableBaseline() map[string][]string {
"libstagefright_amrwbdec",
"libstagefright_amrwbenc",
"libstagefright_bufferpool@2.0.1",
"libstagefright_bufferqueue_helper",
"libstagefright_enc_common",
"libstagefright_flacdec",
"libstagefright_foundation",

View File

@@ -17,9 +17,9 @@
package apex
import (
"android/soong/android"
"github.com/google/blueprint"
"android/soong/android"
)
func init() {

View File

@@ -1509,7 +1509,6 @@ func TestApexDependsOnLLNDKTransitively(t *testing.T) {
apex {
name: "myapex",
key: "myapex.key",
use_vendor: true,
native_shared_libs: ["mylib"],
updatable: false,
`+tc.minSdkVersion+`
@@ -1543,7 +1542,6 @@ func TestApexDependsOnLLNDKTransitively(t *testing.T) {
}
}
`,
setUseVendorAllowListForTest([]string{"myapex"}),
withUnbundledBuild,
)
@@ -1557,13 +1555,13 @@ func TestApexDependsOnLLNDKTransitively(t *testing.T) {
ensureListEmpty(t, names(apexManifestRule.Args["provideNativeLibs"]))
ensureListContains(t, names(apexManifestRule.Args["requireNativeLibs"]), "libbar.so")
mylibLdFlags := ctx.ModuleForTests("mylib", "android_vendor.29_arm64_armv8-a_shared_"+tc.apexVariant).Rule("ld").Args["libFlags"]
ensureContains(t, mylibLdFlags, "libbar/android_vendor.29_arm64_armv8-a_shared_"+tc.shouldLink+"/libbar.so")
mylibLdFlags := ctx.ModuleForTests("mylib", "android_arm64_armv8-a_shared_"+tc.apexVariant).Rule("ld").Args["libFlags"]
ensureContains(t, mylibLdFlags, "libbar/android_arm64_armv8-a_shared_"+tc.shouldLink+"/libbar.so")
for _, ver := range tc.shouldNotLink {
ensureNotContains(t, mylibLdFlags, "libbar/android_vendor.29_arm64_armv8-a_shared_"+ver+"/libbar.so")
ensureNotContains(t, mylibLdFlags, "libbar/android_arm64_armv8-a_shared_"+ver+"/libbar.so")
}
mylibCFlags := ctx.ModuleForTests("mylib", "android_vendor.29_arm64_armv8-a_static_"+tc.apexVariant).Rule("cc").Args["cFlags"]
mylibCFlags := ctx.ModuleForTests("mylib", "android_arm64_armv8-a_static_"+tc.apexVariant).Rule("cc").Args["cFlags"]
ver := tc.shouldLink
if tc.shouldLink == "current" {
ver = strconv.Itoa(android.FutureApiLevelInt)
@@ -2657,119 +2655,6 @@ func TestFilesInSubDirWhenNativeBridgeEnabled(t *testing.T) {
})
}
func TestUseVendor(t *testing.T) {
ctx := testApex(t, `
apex {
name: "myapex",
key: "myapex.key",
native_shared_libs: ["mylib"],
use_vendor: true,
updatable: false,
}
apex_key {
name: "myapex.key",
public_key: "testkey.avbpubkey",
private_key: "testkey.pem",
}
cc_library {
name: "mylib",
srcs: ["mylib.cpp"],
shared_libs: ["mylib2"],
system_shared_libs: [],
vendor_available: true,
stl: "none",
apex_available: [ "myapex" ],
}
cc_library {
name: "mylib2",
srcs: ["mylib.cpp"],
system_shared_libs: [],
vendor_available: true,
stl: "none",
apex_available: [ "myapex" ],
}
`,
setUseVendorAllowListForTest([]string{"myapex"}),
)
inputsList := []string{}
for _, i := range ctx.ModuleForTests("myapex", "android_common_myapex_image").Module().BuildParamsForTests() {
for _, implicit := range i.Implicits {
inputsList = append(inputsList, implicit.String())
}
}
inputsString := strings.Join(inputsList, " ")
// ensure that the apex includes vendor variants of the direct and indirect deps
ensureContains(t, inputsString, "android_vendor.29_arm64_armv8-a_shared_apex10000/mylib.so")
ensureContains(t, inputsString, "android_vendor.29_arm64_armv8-a_shared_apex10000/mylib2.so")
// ensure that the apex does not include core variants
ensureNotContains(t, inputsString, "android_arm64_armv8-a_shared_apex10000/mylib.so")
ensureNotContains(t, inputsString, "android_arm64_armv8-a_shared_apex10000/mylib2.so")
}
func TestUseVendorNotAllowedForSystemApexes(t *testing.T) {
testApexError(t, `module "myapex" .*: use_vendor: not allowed`, `
apex {
name: "myapex",
key: "myapex.key",
use_vendor: true,
}
apex_key {
name: "myapex.key",
public_key: "testkey.avbpubkey",
private_key: "testkey.pem",
}
`,
setUseVendorAllowListForTest([]string{""}),
)
// no error with allow list
testApex(t, `
apex {
name: "myapex",
key: "myapex.key",
use_vendor: true,
updatable: false,
}
apex_key {
name: "myapex.key",
public_key: "testkey.avbpubkey",
private_key: "testkey.pem",
}
`,
setUseVendorAllowListForTest([]string{"myapex"}),
)
}
func TestUseVendorFailsIfNotVendorAvailable(t *testing.T) {
testApexError(t, `dependency "mylib" of "myapex" missing variant:\n.*image:vendor`, `
apex {
name: "myapex",
key: "myapex.key",
native_shared_libs: ["mylib"],
use_vendor: true,
updatable: false,
}
apex_key {
name: "myapex.key",
public_key: "testkey.avbpubkey",
private_key: "testkey.pem",
}
cc_library {
name: "mylib",
srcs: ["mylib.cpp"],
system_shared_libs: [],
stl: "none",
}
`)
}
func TestVendorApex(t *testing.T) {
ctx := testApex(t, `
apex {
@@ -2944,41 +2829,6 @@ func TestApex_withPrebuiltFirmware(t *testing.T) {
}
}
func TestAndroidMk_UseVendorRequired(t *testing.T) {
ctx := testApex(t, `
apex {
name: "myapex",
key: "myapex.key",
use_vendor: true,
native_shared_libs: ["mylib"],
updatable: false,
}
apex_key {
name: "myapex.key",
public_key: "testkey.avbpubkey",
private_key: "testkey.pem",
}
cc_library {
name: "mylib",
vendor_available: true,
apex_available: ["myapex"],
}
`,
setUseVendorAllowListForTest([]string{"myapex"}),
)
apexBundle := ctx.ModuleForTests("myapex", "android_common_myapex_image").Module().(*apexBundle)
data := android.AndroidMkDataForTest(t, ctx, apexBundle)
name := apexBundle.BaseModuleName()
prefix := "TARGET_"
var builder strings.Builder
data.Custom(&builder, name, prefix, "", data)
androidMk := builder.String()
ensureContains(t, androidMk, "LOCAL_REQUIRED_MODULES += libc libm libdl\n")
}
func TestAndroidMk_VendorApexRequired(t *testing.T) {
ctx := testApex(t, `
apex {

View File

@@ -22,7 +22,6 @@ import (
"android/soong/android"
"android/soong/java"
"github.com/google/blueprint"
"github.com/google/blueprint/proptools"
)
@@ -138,10 +137,6 @@ func (p *prebuiltCommon) checkForceDisable(ctx android.ModuleContext) bool {
// to build the prebuilts themselves.
forceDisable = forceDisable || ctx.Config().UnbundledBuild()
// Force disable the prebuilts when coverage is enabled.
forceDisable = forceDisable || ctx.DeviceConfig().NativeCoverageEnabled()
forceDisable = forceDisable || ctx.Config().IsEnvTrue("EMMA_INSTRUMENT")
// b/137216042 don't use prebuilts when address sanitizer is on, unless the prebuilt has a sanitized source
sanitized := ctx.Module().(sanitizedPrebuilt)
forceDisable = forceDisable || (android.InList("address", ctx.Config().SanitizeDevice()) && !sanitized.hasSanitizedSource("address"))
@@ -985,17 +980,6 @@ func (a *ApexSet) GenerateAndroidBuildActions(ctx android.ModuleContext) {
for _, overridden := range a.prebuiltCommonProperties.Overrides {
a.compatSymlinks = append(a.compatSymlinks, makeCompatSymlinks(overridden, ctx)...)
}
if ctx.Config().InstallExtraFlattenedApexes() {
// flattened apex should be in /system_ext/apex
flattenedApexDir := android.PathForModuleInstall(&systemExtContext{ctx}, "apex", a.BaseModuleName())
a.postInstallCommands = append(a.postInstallCommands,
fmt.Sprintf("$(HOST_OUT_EXECUTABLES)/deapexer --debugfs_path $(HOST_OUT_EXECUTABLES)/debugfs extract %s %s",
a.outputApex.String(),
flattenedApexDir.ToMakePath().String(),
))
a.hostRequired = []string{"deapexer", "debugfs"}
}
}
type systemExtContext struct {

View File

@@ -3455,6 +3455,7 @@ func DefaultsFactory(props ...interface{}) android.Module {
&android.ProtoProperties{},
// RustBindgenProperties is included here so that cc_defaults can be used for rust_bindgen modules.
&RustBindgenClangProperties{},
&prebuiltLinkerProperties{},
)
// Bazel module must be initialized _before_ Defaults to be included in cc_defaults module.

View File

@@ -25,12 +25,18 @@ var VndkMustUseVendorVariantList = []string{
"android.hardware.authsecret-unstable-ndk_platform",
"android.hardware.automotive.occupant_awareness-V1-ndk",
"android.hardware.automotive.occupant_awareness-V1-ndk_platform",
"android.hardware.automotive.occupant_awareness-ndk_platform",
"android.hardware.gnss-V1-ndk",
"android.hardware.gnss-V1-ndk_platform",
"android.hardware.gnss-ndk_platform",
"android.hardware.gnss-unstable-ndk_platform",
"android.hardware.health.storage-V1-ndk",
"android.hardware.health.storage-V1-ndk_platform",
"android.hardware.health.storage-ndk_platform",
"android.hardware.health.storage-unstable-ndk_platform",
"android.hardware.identity-V2-ndk",
"android.hardware.identity-V2-ndk_platform",
"android.hardware.identity-V3-ndk",
"android.hardware.identity-V3-ndk_platform",
"android.hardware.identity-ndk_platform",
"android.hardware.light-V1-ndk",
"android.hardware.light-V1-ndk_platform",
@@ -44,8 +50,9 @@ var VndkMustUseVendorVariantList = []string{
"android.hardware.oemlock-V1-ndk_platform",
"android.hardware.oemlock-ndk_platform",
"android.hardware.oemlock-unstable-ndk_platform",
"android.hardware.power-V1-ndk",
"android.hardware.power-V1-ndk_platform",
"android.hardware.power-V2-ndk",
"android.hardware.power-V2-ndk_platform",
"android.hardware.power-ndk_platform",
"android.hardware.power.stats-V1-ndk",
"android.hardware.power.stats-V1-ndk_platform",
@@ -82,20 +89,21 @@ var VndkMustUseVendorVariantList = []string{
"android.hardware.security.sharedsecret-V1-ndk_platform",
"android.hardware.security.sharedsecret-ndk_platform",
"android.hardware.security.sharedsecret-unstable-ndk_platform",
"android.hardware.vibrator-V1-ndk",
"android.hardware.vibrator-V1-ndk_platform",
"android.hardware.vibrator-V2-ndk",
"android.hardware.vibrator-V2-ndk_platform",
"android.hardware.vibrator-ndk_platform",
"android.hardware.weaver-V1-ndk",
"android.hardware.weaver-V1-ndk_platform",
"android.hardware.weaver-ndk_platform",
"android.hardware.weaver-unstable-ndk_platform",
"android.system.suspend-V1-ndk",
"android.system.keystore2-V1-ndk",
"android.hardware.wifi.hostapd-V1-ndk",
"android.hardware.wifi.hostapd-V1-ndk_platform",
"android.system.keystore2-V1-ndk_platform",
"android.system.keystore2-ndk_platform",
"android.system.keystore2-unstable-ndk_platform",
"android.system.suspend-V1-ndk",
"android.system.suspend-V1-ndk_platform",
"libbinder",
"libcrypto",

View File

@@ -20,6 +20,8 @@ import (
)
var legacyCorePlatformApiModules = []string{
"AAECarSystemUI",
"AAECarSystemUI-tests",
"ArcSettings",
"ahat-test-dump",
"android.car",
@@ -30,28 +32,33 @@ var legacyCorePlatformApiModules = []string{
"api-stubs-docs",
"art_cts_jvmti_test_library",
"art-gtest-jars-MyClassNatives",
"BackupEncryption",
"BackupFrameworksServicesRoboTests",
"backuplib",
"BandwidthEnforcementTest",
"BlockedNumberProvider",
"BluetoothInstrumentationTests",
"BluetoothMidiLib",
"BluetoothMidiService",
"CarDeveloperOptions",
"BTTestApp",
"CallEnhancement",
"CapCtrlInterface",
"CarService",
"CarServiceTest",
"car-apps-common",
"car-service-test-lib",
"car-service-test-static-lib",
"CertInstaller",
"com.qti.location.sdk",
"com.qti.media.secureprocessor",
"ConnectivityManagerTest",
"ContactsProvider",
"CorePerfTests",
"core-tests-support",
"cronet_impl_common_java",
"cronet_impl_native_java",
"cronet_impl_platform_java",
"CtsAppExitTestCases",
"CtsContentTestCases",
"CtsIkeTestCases",
"CtsAppExitTestCases",
"CtsLibcoreWycheproofBCTestCases",
"CtsMediaTestCases",
"CtsNetTestCases",
@@ -64,8 +71,10 @@ var legacyCorePlatformApiModules = []string{
"DeviceInfo",
"DiagnosticTools",
"DisplayCutoutEmulationEmu01Overlay",
"DocumentsUIGoogleTests",
"DocumentsUIPerfTests",
"DocumentsUITests",
"DocumentsUIUnitTests",
"DownloadProvider",
"DownloadProviderTests",
"DownloadProviderUi",
@@ -75,10 +84,12 @@ var legacyCorePlatformApiModules = []string{
"ethernet-service",
"EthernetServiceTests",
"ExternalStorageProvider",
"ExtServices",
"ExtServices-core",
"framework-all",
"face-V1-0-javalib",
"FloralClocks",
"framework-jobscheduler",
"framework-minus-apex",
"framework-minus-apex-intdefs",
"FrameworkOverlayG6QU3",
"FrameworksCoreTests",
"FrameworksIkeTests",
"FrameworksNetCommonTests",
@@ -87,29 +98,50 @@ var legacyCorePlatformApiModules = []string{
"FrameworksServicesTests",
"FrameworksMockingServicesTests",
"FrameworksUtilTests",
"FrameworksWifiTests",
"GtsIncrementalInstallTestCases",
"GtsIncrementalInstallTriggerApp",
"GtsInstallerV2TestCases",
"HelloOslo",
"hid",
"hidl_test_java_java",
"hwbinder",
"ims",
"imssettings",
"izat.lib.glue",
"KeyChain",
"ksoap2",
"LocalSettingsLib",
"LocalTransport",
"lockagent",
"mediaframeworktest",
"MediaProvider",
"mediatek-ims-base",
"MmsService",
"MtpDocumentsProvider",
"ModemTestMode",
"MtkCapCtrl",
"MtpService",
"MultiDisplayProvider",
"my.tests.snapdragonsdktest",
"NetworkSetting",
"NetworkStackIntegrationTestsLib",
"NetworkStackNextIntegrationTests",
"NetworkStackNextTests",
"NetworkStackTests",
"NetworkStackTestsLib",
"NfcNci",
"online-gcm-ref-docs",
"online-gts-docs",
"PerformanceMode",
"platform_library-docs",
"PowerStatsService",
"PrintSpooler",
"pxp-monitor",
"QColor",
"qcom.fmradio",
"QDCMMobileApp",
"Qmmi",
"QPerformance",
"remotesimlockmanagerlibrary",
"RollbackTest",
"sam",
"saminterfacelibrary",
"sammanagerlibrary",
"service-blobstore",
"service-connectivity-pre-jarjar",
"service-jobscheduler",
@@ -123,21 +155,50 @@ var legacyCorePlatformApiModules = []string{
"services.usb",
"Settings-core",
"SettingsGoogle",
"SettingsGoogleOverlayCoral",
"SettingsGoogleOverlayFlame",
"SettingsLib",
"SettingsOverlayG020A",
"SettingsOverlayG020B",
"SettingsOverlayG020C",
"SettingsOverlayG020D",
"SettingsOverlayG020E",
"SettingsOverlayG020E_VN",
"SettingsOverlayG020F",
"SettingsOverlayG020F_VN",
"SettingsOverlayG020G",
"SettingsOverlayG020G_VN",
"SettingsOverlayG020H",
"SettingsOverlayG020H_VN",
"SettingsOverlayG020I",
"SettingsOverlayG020I_VN",
"SettingsOverlayG020J",
"SettingsOverlayG020M",
"SettingsOverlayG020N",
"SettingsOverlayG020P",
"SettingsOverlayG020Q",
"SettingsOverlayG025H",
"SettingsOverlayG025J",
"SettingsOverlayG025M",
"SettingsOverlayG025N",
"SettingsOverlayG5NZ6",
"SettingsProvider",
"SettingsProviderTest",
"SettingsRoboTests",
"Shell",
"ShellTests",
"SimContact",
"SimContacts",
"SimSettings",
"sl4a.Common",
"StatementService",
"SystemUI-core",
"SystemUISharedLib",
"SystemUI-tests",
"tcmiface",
"Telecom",
"TelecomUnitTests",
"telephony-common",
"TelephonyProvider",
"TelephonyProviderTests",
"TeleService",
"testables",
@@ -147,12 +208,16 @@ var legacyCorePlatformApiModules = []string{
"time_zone_distro_installer-tests",
"time_zone_distro-tests",
"time_zone_updater",
"TMobilePlanProvider",
"TvProvider",
"uiautomator-stubs-docs",
"uimgbamanagerlibrary",
"UsbHostExternalManagementTestApp",
"UserDictionaryProvider",
"UxPerformance",
"WallpaperBackup",
"wifi-service",
"WallpaperBackupAgentTests",
"WfdCommon",
}
var legacyCorePlatformApiLookup = make(map[string]struct{})