aitsuki / HotFix

Android热补丁修复框架,自动生成带签名的补丁包

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

项目中如果有使用AIDL方式的进程间通信的功能会报错

loseashell opened this issue · comments

AndroidStudio 2.1.1
Gradle Version 2.10
Android Plugin Version 2.1.0
项目中如果有使用AIDL方式的进程间通信的功能会报错,编译项目时没有混淆,没有自动打包,使用的是这个阶段的方式:Android热补丁动态修复技术(三)—— 使用Javassist注入字节码,完成热补丁框架雏形(可使用) ,打印信息如下:
================injectClass!==========com.test.myapplication.ITestAidlInterface$Stub$Proxy
================injectClass!==========com.test.myapplication.ITestAidlInterface$Stub
================injectClass!==========com.test.myapplication.ITestAidlInterface
Error:Execution failed for task ':TestDemo:transformClassesWithPreDexForDebug'.

0

其中ITestAidlInterface 是AIDL自动生成的class,Stub 和Proxy 是 ITestAidlInterface 的内部类

这个是因为javassist没有引入IBinder这个类的library,这个步骤中我并没有添加android.jar到javassist中。
github上这个项目能运行么

刚刚找到原因了,ITestAidlInterface 是接口,接口是没有构造函数的,所有不能在构造函数注入,在Inject.groovy—>private static void injectClass(String className, String path) 方法添加一句代码
if( c.isInterface()) {
return
}
这样就可以编译通过了

原来如此,感谢啦