HotFix icon indicating copy to clipboard operation
HotFix copied to clipboard

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

Open loseashell opened this issue 8 years ago • 3 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 的内部类

loseashell avatar Jun 11 '16 09:06 loseashell

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

aitsuki avatar Jun 11 '16 09:06 aitsuki

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

loseashell avatar Jun 11 '16 09:06 loseashell

原来如此,感谢啦

aitsuki avatar Jun 11 '16 11:06 aitsuki