当前位置:   article > 正文

Android 14 没有申请QUERY_ALL_PACKAGES权限,为何依旧弹出读取您的应用列表权限申请弹框?_提前向用户弹窗申请开启【读取已安装应用列表】权限,

提前向用户弹窗申请开启【读取已安装应用列表】权限,

先说当前遇到的问题

近期我们很多甲方反馈在适配Android 14 的过程中,某些14机型在应用启动时弹出读取您的应用列表权限申请弹框?但我们明明是没有申请QUERY_ALL_PACKAGES权限的,怎么回事呢?

但对于小贷或者其他金融应用,Applist数据对于风控来说是至为重要的,难道Google对于这部分数据要求这么严格了?对于无QUERY_ALL_PACKAGES权限获取Applist数据的文章及Applist数据重要性的分析,大家可以先打卡下这篇文章:

QUERY_ALL_PACKAGES权限不给了!!!我们如何获取用户应用安装列表?

问题定位

作为一个程序猿,遇事儿不要慌,Google or 百度 == result。 在经历了很长时间搜索以后,没有发现什么结果。还是先人说的对,纸上得来终觉浅,绝知此事要躬行。既然我们没有申请权限,那必然是代码被检测出问题了。项目在启动时初始化了很多的三方库和自研库,项目中肯定是某些代码触发了Google安全机制,导致了此问题。那个就一个库一个库的在项目中移除,以此来定位具体原因。

最终发现,有两个底层库会触发应用列表权限申请弹框。而这两个库都调用了getInstalledPackages方法来获取某些app信息。

分析弹权限弹窗可能原因是:在Android 14手机版本中,对于未在应用中声明QUERY_ALL_PACKAGES权限却执行相关操作的应用,系统会预防性的介入,显示权限请求对话框,提示用户该应用正在尝试进行可能侵犯隐私的操作。这有可能是系统对未授权的行为的一种保护措施。

知道原因了,那就开始动手解决,先确定解决方案。

尝试方案

方案一:通过 api 直接调用不行,那通过反射拿到目标类和方法直接调试试,具体实践步骤及核心代码如下:

1. 拿到PackageManager类对象,通过目标类的class属性,调用getClass()方法,获取class 对象

2. 通过class 对象获取目标方法

3. 传参调用

  1. PackageManager mPm = Util.getContext().getPackageManager();
  2. Class<? extends PackageManager> mPClass = mPm.getClass();
  3. Method method = mPClass.getMethod("getInstalledPackages", int.class);
  4. method.setAccessible(true);
  5. List<PackageInfo> packages = (List<PackageInfo>) method.invoke(mPm, 0);

未能解决问题,依旧会有应用列表权限申请弹框

方案二:通过反射拿到类,动态拼接方法名的方式试试,因为确实有的检测会扫描我们的某些关键词,方法名分开以后,在字节码层代码会发生响应的变化。核心代码如下

  1. public String getA() {
  2. return "get";
  3. }
  4. public String getB() {
  5. return "Installed";
  6. }
  7. public String getC() {
  8. return "Packages";
  9. }
  10. PackageManager mPm = Util.getContext().getPackageManager();
  11. Class<? extends PackageManager> mPClass = mPm.getClass();
  12. Method method = mPClass.getMethod(getA() + getB() + getC()), int.class);
  13. method.setAccessible(true);
  14. List<PackageInfo> packages = (List<PackageInfo>) method.invoke(mPm, 0);

未能解决问题,依旧会有应用列表权限申请弹框

最终确定方案

其实不管我们之前有没有声明QUERY_ALL_PACKAGES权限,我们在隐私协议和权限声明中肯定是有披露Applist收集的。我们只要不让这个弹框在一开始弹出,而是在Google审核人员看到披露信息以后,随着我们申请的其他权限弹出,尽可能满足合规要求,就不会有太大问题。实际效果视频如下:

抱歉,csdn无法直接传视频在文章中(只支持哔哩哔哩视频、优酷视频链接),烦请大家移步公众号链接查看视频,造成不便,烦请担待:

Android 14 没有申请QUERY_ALL_PACKAGES权限,为何依旧弹出读取您的应用列表权限申请弹框?

出海共济 

出海之路,路远且艰。更多金融出海解决方案,欢迎关注公众号 互金出海百晓通 ,欢迎大家一起探讨更多合规问题,稳健航行世界之海。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/代码探险家/article/detail/754505
推荐阅读
相关标签
  

闽ICP备14008679号