开发 Android Prime Preview 范围内规避隐藏API调用限制的技术
发布时间
阅读量:
阅读量
首先不考虑Android P的具体实现细节,安卓系统若要实现对用户代码调用系统隐藏API的限制,至少需要完成以下两个判断:
- 必须明确区分某一Method(或Field)对于用户代码而言是处于隐藏状态还是公开状态。仅当该方法或字段为隐藏时,才需实施访问限制。
- 必须识别调用者的身份属性:即该调用行为是由用户代码发起,还是由系统内部代码(如Activity类)发起。只有在用户代码尝试调用时,才需进行相应限制。
针对Android P的实际代码实现,在所有通过反射机制及JNI接口获取Method与Field的环节中,均会调用特定函数以判定是否存在用户代码对系统隐藏API的访问行为(相关函数定义位于art/runtime/hidden_api.h)。一旦该函数返回true,则表明用户代码确实尝试访问了系统级别的隐藏API。在Android P(Preview1)版本中,系统将通过日志输出警告信息,但用户代码仍可成功获取到对应的Method或Field对象。而在后续版本中,此类访问行为可能导致获取结果为空。

还没有任何评论哟~
