Meituan-Dianping / Robust

Robust is an Android HotFix solution with high compatibility and high stability. Robust can fix bugs immediately without a reboot.
Apache License 2.0
4.4k stars 805 forks source link

关于Robust应用在sdk热更出现的问题 #468

Closed FlyMantou closed 2 years ago

FlyMantou commented 2 years ago

gradle gradle-5.4.1-all.zip 版本:3.5.3 按照博客 https://www.jianshu.com/p/b9d0b10e2dcf 的方式,将Robust修改代码,主要修改以下内容:

RobustApkHashAction: project.android.applicationVariants.each --> project.android.libraryVariants.each RobustTransform: getScopes()方法返回 return TransformManager.SCOPE_FULL_PROJECT-->return TransformManager.PROJECT_ONLY

目前插桩插件正常运行,但是自动补丁插件报错: Execution failed for task ':testsdk:transformClassesWithAutoPatchTransformForRelease'.

javassist.NotFoundException: com.meituan.robust.patch.annotaion.Modify 堆栈/日志: Caused by: javassist.NotFoundException: com.meituan.robust.patch.annotaion.Modify at javassist.ClassPool.get(ClassPool.java:452) at javassist.ClassPool$get$0.call(Unknown Source) at com.meituan.robust.autopatch.ReadAnnotation.readAnnotation(ReadAnnotation.groovy:35) at com.meituan.robust.autopatch.ReadAnnotation$readAnnotation.call(Unknown Source) at robust.gradle.plugin.AutoPatchTransform.autoPatch(AutoPatchTransform.groovy:136) at robust.gradle.plugin.AutoPatchTransform$autoPatch.callCurrent(Unknown Source) at robust.gradle.plugin.AutoPatchTransform.transform(AutoPatchTransform.groovy:97) at com.android.build.api.transform.Transform.transform(Transform.java:302) at com.android.build.gradle.internal.pipeline.TransformTask$2.call(TransformTask.java:239) at com.android.build.gradle.internal.pipeline.TransformTask$2.call(TransformTask.java:235) at com.android.builder.profile.ThreadRecorder.record(ThreadRecorder.java:106)

插件在运行时 ,通过javassist类加载Modify注解类,找不到,请问这个问题有没有什么思路?

FlyMantou commented 2 years ago

大概知道是什么原因了 ,PROJECT_ONLY作用域下,Javassist的classpath列表找不到sdk依赖的autopatchbase和patch库的class。目前手动将这两个jar包添加进auto-patch-plugin的libs目录下面,在AutoPatchTransform的transform里面通过Config.classPool.appendClassPath将路径添加进去就可以打补丁了