java.lang.IllegalAccessError: Class ref in pre-verified class resolved to unexpected implementation

        利用XposedBridge框架开发,对系统接口进行Hook。编译出的xposed模块,在系统启动加载时失败,报错误如下:

Loading modules from /data/app/com.alta.audiopolicyloader-1.apk
I/Xposed  (   58):   Loading class com.alta.audiopolicyloader.AudioPolicyLoader
W/dalvikvm(   58): Class resolved by unexpected DEX: Lcom/alta/audiopolicyloader/AudioPolicyLoader;(0xadaf9900):0xa6923000 ref [Lde/robv/android/xposed/IXposedHookLoadPackage;] Lde/robv/android/xposed/IXposedHookLoadPackage;(0xada60f68):0xa6da3000
W/dalvikvm(   58): (Lcom/alta/audiopolicyloader/AudioPolicyLoader; had used a different Lde/robv/android/xposed/IXposedHookLoadPackage; during pre-verification)
I/dalvikvm(   58): Failed resolving Lcom/alta/audiopolicyloader/AudioPolicyLoader; interface 1356 'Lde/robv/android/xposed/IXposedHookLoadPackage;'
W/dalvikvm(   58): Link of class 'Lcom/alta/audiopolicyloader/AudioPolicyLoader;' failed
I/Xposed  (   58): java.lang.IllegalAccessError: Class ref in pre-verified class resolved to unexpected implementation
I/Xposed  (   58): 	at dalvik.system.DexFile.defineClassNative(Native Method)
I/Xposed  (   58): 	at dalvik.system.DexFile.defineClass(DexFile.java:222)
I/Xposed  (   58): 	at dalvik.system.DexFile.loadClassBinaryName(DexFile.java:215)
I/Xposed  (   58): 	at dalvik.system.DexPathList.findClass(DexPathList.java:322)
I/Xposed  (   58): 	at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:54)
I/Xposed  (   58): 	at java.lang.ClassLoader.loadClass(ClassLoader.java:497)
I/Xposed  (   58): 	at java.lang.ClassLoader.loadClass(ClassLoader.java:457)
I/Xposed  (   58): 	at de.robv.android.xposed.XposedBridge.loadModule(XposedBridge.java:421)
I/Xposed  (   58): 	at de.robv.android.xposed.XposedBridge.loadModules(XposedBridge.java:386)
I/Xposed  (   58): 	at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:120)
I/Xposed  (   58): 	at dalvik.system.NativeStart.main(Native Method)
模块用Gradle进行编译的,build.gradle文件是手动编写的。

问题原因】:本模块中编译以来的XposedBridge.jar包,在系统运行的时候已经加载,与本模块中打包进去的XposedBridge接口   发生冲突。

解决方法】:修改build.gradle文件,将对XposedBridge.jar的依赖关系由compile改为provided,如下:

dependencies {
    provided files('libs/XposedBridgeApi-54.jar')
    compile 'com.android.support:appcompat-v7:19.1.0'
}
        导致该问题发生的原因,也是自己疏忽了Xposed installer在加载时,已经将XposedBridge加载完毕。因此,基于该框架开发时,只需要编译时依赖,运行时不需要。

        切记,gradle之所以提供compile和provided两种jar包依赖方式,原是有此类考量的。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

何雷 — 智能汽车

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值