1 原理:
https://zhuanlan.zhihu.com/p/44131114 这篇文章主要以编译,运行的角度解析
https://blog.csdn.net/Invoker123/article/details/107396759 主要以功能实现流程方面就行解析
2 新增接口
在Framework中新增AIDL接口,默认是non-sdk的接口,APK在调用使用时会因Restrictions on non-SDK interfaces功能导致Crash,日志中有如下打印信息
Accessing hidden method 类完整路径 -> 方法名()V (blacklist, linking, denied)
若要要解决此类问题,可以增加AIDL注释。修改方法属性,注释的使用可参考官方文档https://source.android.google.cn/devices/architecture/aidl/aidl-annotations中对注释的描述
使用@UnsupportedAppUsage这个注释修饰方法,经过验证不会在报以上问题
3 禁用此功能
官方文档上有介绍,可通过修改设置数据库来控制此功能,修改方法因Android版本而存在差异,在代码中通过观察者模式可以动态的生效修改,但实测会有一些问题,建议每次修改完成后重启机器
若想要ROM默认就禁用掉此功能可以通过2种方法进行修改
- 修改ActivityManagerService.java 的getValidEnforcementPolicy函数读取设置数据库的默认值
- 在SettingsProvider数据库中增加默认值,此项修改代码比方法一种的工作量要大一些(ASOP的代码中没有此项的默认配置,需要手动添加,并且增加配置项)
序号 | 常亮值 | 含义 | 备注 |
1 | HIDDEN_API_ENFORCEMENT_DEFAULT | 默认配置,功能同HIDDEN_API_ENFORCEMENT_ENABLED | |
2 | HIDDEN_API_ENFORCEMENT_DISABLED | 关闭非API接口限制,APK可以正常访问 | |
3 | HIDDEN_API_ENFORCEMENT_JUST_WARN | 关闭非API接口限制,APK可以正常访问,若涉及非API接口限制将在日志中打印相关警告信息 | 若要关闭非API接口限制,建议使用此项,方便APK通过日志进行整改 |
4 | HIDDEN_API_ENFORCEMENT_ENABLED | 打开非API接口限制,APK访问非API接口限制将会发生异常,同时日志中打印相关错误信息 |