1. 时间节点
2022年7月
2. 解读邮件内容
意思是App中使用的权限QUERY_ALL_PACKAGES不符合Google Play 对该权限的定义 support.google.com/googleplay/…

接下来聊聊项目中关于这个需求以及权限的使用
3. 需求内容
抓取本地非系统App List
4. 具体使用
1、清单文件里面申明了
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"
tools:ignore="QueryAllPackagesPermission" />
2、使用此权限进行本地App List的抓取
/**
* 获取本地App list
*/
@RequiresPermission(android.Manifest.permission.QUERY_ALL_PACKAGES)
fun getLocalAppList(packageManager: PackageManager): List<AppInfo> {
val installApps: MutableList<BooAppInfo> = ArrayList()
var booAppInfo: BooAppInfo
var installedThirdApk: String
var packageName: String
var installTime: String
var lastUpdateTime: String
val packageInfoList = packageManager.getInstalledPackages(0)
if (packageInfoList == null || packageInfoList.size == 0) {
return installApps
}
for (i in packageInfoList.indices) {
val packageInfo = packageInfoList[i] //过滤掉系统app
if (ApplicationInfo.FLAG_SYSTEM and packageInfo.applicationInfo.flags != 0) {
continue
}
installedThirdApk = packageInfo.applicationInfo.loadLabel(packageManager).toString()
packageName = packageInfo.packageName
try {
if (packageInfo.applicationInfo.loadIcon(packageManager) == null) {
continue
}
} catch (e: OutOfMemoryError) {
}
SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale("utf-8")).apply {
installTime = this.format(packageInfo.firstInstallTime).orEmpty()
lastUpdateTime = this.format(packageInfo.lastUpdateTime).orEmpty()
}
appInfo = AppInfo()
appInfo.appName = installedThirdApk
appInfo.packageName = packageName
appInfo.firstInstallDate = installTime
appInfo.lastUpdateDate = lastUpdateTime
appInfo.versionName = packageInfo.versionName
appInfo.versionCode = packageInfo.versionCode.toString()
installApps.add(appInfo)
}
return installApps
}
3、由于此权限在Google Play 已认定为权限权限
support.google.com/googleplay/…

4、所以在Google Play Console 已对该权限做了申明





5. 解决思路
1. 去除清单中配置的权限申明,通过使用queries配置来达到抓取App List目的
去除此行代码
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"
tools:ignore="QueryAllPackagesPermission" />
增加此行代码
<queries>
<intent>
<action android:name="android.intent.action.MAIN"/>
<!--<category android:name="android.intent.category.LAUNCHER"/>-->
</intent>
</queries>
2. 第1步做完之后,重新打包,送审Google Play
如果最新包审核通过之后,警告还在,那么可以通过主动联系Google Play,说明下 我们已经去除了该权限,为什么警告还在,等个1天多,这个问题就解决了
官方参考文档
developer.android.com/training/pa…
3. 对抓取的App List数据影响大吗?
经过测试在之前使用QUERY_ALL_PACKAGES抓取的App List和最新使用queries配置抓取的App List相差不大,我们测试的结果在10个左右,差别的app 基本是系统级别的App,所以我们认定该方法可以替换之前的。
4. 其他不太靠谱 可以尝试的方法
还是保持原有的权限申明,重新定义在Google Play Console 的用途描述,以及重新修改用途,录制新的视频,试试。