Advertisement

开发 Android Prime Preview 范围内规避隐藏API调用限制的技术

阅读量:

首先不考虑Android P的具体实现细节,安卓系统若要实现对用户代码调用系统隐藏API的限制,至少需要完成以下两个判断:

  1. 必须明确区分某一Method(或Field)对于用户代码而言是处于隐藏状态还是公开状态。仅当该方法或字段为隐藏时,才需实施访问限制。
  2. 必须识别调用者的身份属性:即该调用行为是由用户代码发起,还是由系统内部代码(如Activity类)发起。只有在用户代码尝试调用时,才需进行相应限制。

针对Android P的实际代码实现,在所有通过反射机制及JNI接口获取Method与Field的环节中,均会调用特定函数以判定是否存在用户代码对系统隐藏API的访问行为(相关函数定义位于art/runtime/hidden_api.h)。一旦该函数返回true,则表明用户代码确实尝试访问了系统级别的隐藏API。在Android P(Preview1)版本中,系统将通过日志输出警告信息,但用户代码仍可成功获取到对应的Method或Field对象。而在后续版本中,此类访问行为可能导致获取结果为空。

![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://ad.itadn.com/c/weblog/blog-img/images/2025-05-31/nBp4cFCWQj7Vz9oyZtxlHmvaNefR.

全部评论 (0)

还没有任何评论哟~