从android 9开始,系统增加了反射调用限制,有反射调用时有如下错误提示:
office:writer: Accessing hidden field Landroid/graphics/Matrix;->native_instance:J (blocked, reflection, denied)
System.err: java.lang.NoSuchFieldException: No field native_instance in class Landroid/graphics/Matrix; (declaration of 'android.graphics.Matrix' appears in /system/framework/framework.jar)
System.err: at java.lang.Class.getDeclaredField(Native Method)
如果想彻底关闭,按照下面的方法进行关闭后重编系统。
找到art/runtime/native/dalvik_system_ZygoteHooks.cc
注掉下面的检查行(如下图):
//api_enforcement_policy = hiddenapi::EnforcementPolicyFromInt(
// (runtime_flags & HIDDEN_API_ENFORCEMENT_POLICY_MASK) >> API_ENFORCEMENT_POLICY_SHIFT);

自Android9Pie开始,系统对反射调用进行了限制,导致访问隐藏字段如`native_instance`时出现错误。为解决这个问题,文章提到可以通过修改`art/runtime/native/dalvik_system_ZygoteHooks.cc`文件,注释掉隐藏API强制执行策略检查的代码行来关闭此限制。这样做可能涉及系统安全性和稳定性,请谨慎操作。
937

被折叠的 条评论
为什么被折叠?



