【发布时间】:2021-11-17 12:23:49
【问题描述】:
我正在将我的 Android 应用迁移为兼容 TargetSDK 30。 对此的限制\更改之一是包可见性限制: https://developer.android.com/about/versions/11/privacy/package-visibility
Google 要求应用在清单中声明查询元素,如下所示:
<queries>
<!-- Specific apps you interact with, eg: -->
<package android:name="packageid" />
没有这个条目,函数调用就像
context.getPackageManager.getApplicationInfo("packageid",0);
将产生NameNotFouncException。
我已经验证这对于我明确查询的大多数应用程序都是正确的,包括谷歌地图应用程序,并将这些应用程序的包 ID 添加到清单可以解决问题。
但是我看到为 gms packageId 调用这个函数:即
context.getPackageManager.getApplicationInfo("com.google.android.gms",0)
我不需要在 <queries> 中声明它作为清单的一部分!!尽管应用程序已迁移到 targetSdk = 30 并在 Android-11/Android-12 设备上运行,但这些函数仍返回正确的值。
我认为某些 android 库正在通过清单合并为 com.google.android.gms 自动注入 <queries>,但反编译清单显示没有此类条目。
我很想知道为什么这个包从 tarsget30 SDK 包可见性限制中被跳过,以及是否还有其他这样的包。这是错误还是未记录的功能?
【问题讨论】:
标签: android android-12 target-sdk google.android.gms