当前位置: 首页 > news >正文

安卓隐私指示器学习笔记

最近了解到Google 在Android12上新增了权限指示器,可以在信号栏的右侧显示当前访问录音机和Camera的应用,点击后可以跳转到相应应用的权限界面,消费者可以控制权限的开启和关闭。国内手机厂商最近几年都在增加隐私看板供能,消费者可以看到相机、录音机被其他应用访问的记录,包含次数、时长等信息。

尤其Android 14,强制要求在信号区增加隐私指示器,可见安卓在隐私保护上的决心。

我估计手动控制权限的开启和关闭,并不是这个特性和核心。关键是Google或者说安卓系统愿意把权限的调用暴露给普通的消费者,本身这个态度带来的社会效应,至少让消费者最担心的声音和图像的泄露问题,得到了缓解。

本文主要是探讨起技术实现原理:

google官方文档链接如下,中英文还是略微有些区别,注意甄别https://source.android.com/docs/core/permissions/privacy-indicators

里面关键的图:

上图可见,核心的交互模块是AppOps,AppOps并不是Android12的新事物,早在Android 4.0就有了,其内部核心的几个类,

AppOpsManager

IAppOpsService.aidl  

AppOpsService

AppOpsCheckingServiceImpl
 

普通的安卓应用可以调用下述接口,监听Ops的访问记录

appOpsManager.startWatchingMode(AppOpsManager.OPSTR_READ_MEDIA_AUDIO,  null /* all packages */, mModeListener);

其中,第二个参数,传null代表,监听所有应用,也可以传具体的包名

当关心的包名,访问了具体的Ops,监听者就会收到回调。

调试手段:

adb shell dumpsys appops可以把ops服务的内部状态dump出来

具体解释如下:

Op mode watchers:Op COARSE_LOCATION:#0: ModeCallback{7f9fe97 watchinguid=-1 flags=0x0 op=FINE_LOCATION from uid=u0a144 pid=4204}#1: ModeCallback{82529b5 watchinguid=-1 flags=0x1 op=COARSE_LOCATION from uid=1000 pid=2265}#2: ModeCallback{926d7c2 watchinguid=-1 flags=0x0 op=READ_WRITE_HEALTH_DATA from uid=1000 pid=2265}#3: ModeCallback{da82a52 watchinguid=-1 flags=0x1 op=MONITOR_LOCATION from uid=u0a21 pid=4702}#4: ModeCallback{efa62b9 watchinguid=-1 flags=0x1 op=FINE_LOCATION from uid=u0a21 pid=4702}Op FINE_LOCATION:#0: ModeCallback{59f601b watchinguid=-1 flags=0x1 op=FINE_LOCATION from uid=1000 pid=2265}#1: ModeCallback{7f9fe97 watchinguid=-1 flags=0x0 op=FINE_LOCATION from uid=u0a144 pid=4204}#2: ModeCallback{926d7c2 watchinguid=-1 flags=0x0 op=READ_WRITE_HEALTH_DATA from uid=1000 pid=2265}

这是按具体的ops排列,打印出所有的监听者,可以配合ps -A命令查看具体的pid是哪个进程

 Package mode watchers:Pkg com.microsoft.appmanager:#0: ModeCallback{5f879b8 watchinguid=-1 flags=0x0 op=SYSTEM_ALERT_WINDOW from uid=1000 pid=5190}Pkg com.youku.phone:#0: ModeCallback{4e42e95 watchinguid=-1 flags=0x0 op=SYSTEM_ALERT_WINDOW from uid=1000 pid=5190}#1: ModeCallback{cd0ffac watchinguid=-1 flags=0x0 op=REQUEST_INSTALL_PACKAGES from uid=1000 pid=5190}

这是按具体的包名排列,打印出所有的监听者,可以配合ps -A命令查看具体的pid是哪个进程

Uid u0a237:state=cchcapability=------appWidgetVisible=falsePOST_NOTIFICATION: mode=ignoreLEGACY_STORAGE: mode=allowPackage com.alphainventor.filemanager:WAKE_LOCK (allow): null=[Access: [top-s] 2023-11-14 11:33:19.924 (-7d1h1m54s148ms) duration=+42ms]READ_EXTERNAL_STORAGE (allow): null=[Access: [top-s] 2023-11-14 11:33:16.111 (-7d1h1m57s961ms)]

这是按具体的Uid(包名),打印出最近的访问记录

http://www.lryc.cn/news/245940.html

相关文章:

  • 【Jenkins】jenkins发送邮件报错:Not sent to the following valid addresses:
  • CSS3制作3D爱心动画
  • Python Opencv实践 - 全景图片拼接stitcher
  • echarts 几千条分钟级别在小时级别图标上展示
  • 操作系统的中断与异常(408常考点)
  • linux下的工具---vim
  • 代码随想录算法训练营第六十天|84. 柱状图中最大的矩形
  • P14 C++局部静态变量static延长生命周期
  • C语言:写一个函数,求字符串的长度,在main函数中输入字符串并输出其长度(指针)
  • CentOS7安装Docker运行环境
  • 单片机调试技巧--栈回溯
  • 分布式锁之基于redis实现分布式锁(二)
  • python中%s的用法(字符串变量赋值办法),长字符串换行办法
  • 【Mybatis】预编译/即时sql 数据库连接池
  • 物联网AI 无线连接学习之WiFi基础篇 802.11协议发展
  • FreeRTOS-队列Queue
  • 车内总线通信技术简述
  • 6.2 Windows驱动开发:内核枚举SSSDT表基址
  • 实时LCM的ImgPilot搭建部署
  • 开源与闭源:大模型未来的发展之争
  • linux系统初始化本地git,创建ssh-key
  • JDBC 操作 SQL Server 时如何传入列表参数
  • [算法总结] - 蓄水池采样算法
  • 【Dockerfile】将自己的项目构建成镜像部署运行
  • flink和机器学习模型的常用组合方式
  • 自动驾驶学习笔记(十二)——定位技术
  • 【MySQL系列】PolarDB入门使用
  • 第二节HarmonyOS DevEco Studio创建项目以及界面认识
  • 网页设计--第5次课后作业
  • Spring Cache框架,实现了基于注解的缓存功能。