| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 移动开发 -> Android app权限整改 -> 正文阅读 |
|
[移动开发]Android app权限整改 |
权限整改中,重点是定位权限,当你的app已经检查过了,使用定位的权限了,又被整改退回来了,是不是觉得脑子不够用了? 检测机构出问题了? 当然不是.因为有其它地方,间接地使用了它. 其它像相机,通讯录这些权限就不说了,不够特殊,今天说一说定位权限. 手机系统中,有一项检查隐私保护->查看应用行为记录,里面记录着app访问了哪些权限,你也许会很奇怪,我明明没有了定位操作,也没有地图为何还会访问定位权限? 首先,要看文档:官方文档权限变更:https://developer.android.com/about/versions/marshmallow/android-6.0-changes#behavior-hardware-id https://developer.android.com/guide/topics/connectivity/wifi-scan#wifi-scan-restrictions 这是官方文档,写明了为何调用wifi相关操作会需要定位权限. 从6.0以来的权限操作更新后越来越严格了. 通过源码查阅:当发生权限检查时,在context.checkPermission()方法,会最终调用AppOpsManager.java: noteOpNoThrow()方法. AppOpsManager这个类是AppOpsService对外暴露的类 , AppOpsService本身是不对外暴露的. AppOpsService是干什么的,Android6.0以后加的用于权限处理. 它调用AppOpsService.java里面的noteOperation()方法.这个方法判断是否需要记录.当你访问权限,查看是否申请时,就有可能发生记录,然后在隐私保护中的行为记录就有了.要是因为这个原因被下线,不过审,你说冤不? 返回判断: permInfo.getProtection() == PROTECTION_DANGEROUS || (permInfo.getProtectionFlags() & PROTECTION_FLAG_APPOP) != 0; 危险权限与受保护的权限要记录.定位就属于危险权限了.至少5.0以后是. 这一步一步到了AppOpsService.java中: private int noteOperationUnchecked(int code, int uid, @NonNull String packageName, @Nullable String attributionTag, int proxyUid, String proxyPackageName, @Nullable String proxyAttributionTag, @OpFlags int flags, boolean shouldCollectAsyncNotedOp, @Nullable String message, boolean shouldCollectMessage) { ...... //这里是否要记录,就是前面的判断结果了. if (shouldCollectAsyncNotedOp) { collectAsyncNotedOp(uid, packageName, code, attributionTag, flags, message, shouldCollectMessage); } } app中未使用定位,被记录了有使用定位权限了,就要检查一下,是否使用了与定位相关的权限.每访问一次都会被记录. 其它被映射为定位权限的权限声明从源码中看到:AppOpsManager.java里面声明了: OP_COARSE_LOCATION, // COARSE_LOCATION OP_COARSE_LOCATION, // FINE_LOCATION OP_COARSE_LOCATION, // GPS 这些都是同样的定位权限. OP_COARSE_LOCATION, // WIFI_SCAN OP_COARSE_LOCATION, // NEIGHBORING_CELLS OP_COARSE_LOCATION, // BLUETOOTH_SCAN OP_COARSE_LOCATION, // MONITOR_LOCATION OP_COARSE_LOCATION, // MONITOR_HIGH_POWER_LOCATION wifi也需要,打电话,蓝牙也需要. 当用到WifiManager,获取ssid,网络类型,扫描等这些操作,它自动触发了定位权限.冤死了啊.
|
|
移动开发 最新文章 |
Vue3装载axios和element-ui |
android adb cmd |
【xcode】Xcode常用快捷键与技巧 |
Android开发中的线程池使用 |
Java 和 Android 的 Base64 |
Android 测试文字编码格式 |
微信小程序支付 |
安卓权限记录 |
知乎之自动养号 |
【Android Jetpack】DataStore |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年4日历 | -2025/4/19 2:31:29- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |