luckybilly / CC

业界首个支持渐进式组件化改造的Android组件化开源框架,支持跨进程调用。Componentize your android project gradually.
https://luckybilly.github.io/CC-website/
Apache License 2.0
4.04k stars 636 forks source link

AutoRegister 编译时注册错误,2. 修改为 demo 依赖 b,a 独立运行 #10

Closed kassadin closed 6 years ago

kassadin commented 6 years ago

修改项目 demo build.gradle

//    compile project(':demo_component_a')
    compile project(':demo_component_b')

demo 依赖 b, a 独立运行

错误 1

  1. clean run demo
:demo:transformClassesWithAuto-registerForDebug
start auto-register transform...

register scan all class cost time: 345 ms

insert register code to file:D:\github_repo\CC\demo\build\intermediates\transforms\auto-register\debug\0.jar
com/billy/cc/demo/component/b/ComponentB
com/billy/cc/demo/lifecycle/LifecycleComponent

codeInsertToClassName:com/billy/cc/core/component/ComponentManager.class

register insert code cost time: 14 ms
register cost time: 359 ms

:demo:transformClassesWithDexBuilderForDebug

b 的 action 没有注册进去

demo 调用b 没反应,因为action 没注册进去 a 未 安装,所以也没反应

  1. run a 或 clean run a

:demo_component_a:transformClassesWithAuto-registerForDebug
start auto-register transform...

register scan all class cost time: 226 ms

insert register code to file:D:\github_repo\CC\demo_component_a\build\intermediates\transforms\auto-register\debug\0.jar
com/billy/cc/demo/component/a/ComponentA

codeInsertToClassName:com/billy/cc/core/component/ComponentManager.class

register insert code cost time: 19 ms
register cost time: 245 ms

:demo_component_a:transformClassesWithDexBuilderForDebug

A 正常,但调不起来,可能是权限问题,没去试

错误 2

  1. clean build
    
    :demo_component_a:transformClassesWithAuto-registerForDebug
    start auto-register transform...

register scan all class cost time: 220 ms

insert register code to file:D:\github_repo\CC\demo_component_a\build\intermediates\transforms\auto-register\debug\0.jar com/billy/cc/demo/component/a/ComponentA

codeInsertToClassName:com/billy/cc/core/component/ComponentManager.class

The specified register class not found:com/billy/cc/demo/component/b/ComponentB register insert code cost time: 16 ms register cost time: 236 ms

:demo_component_a:transformClassesWithDexBuilderForDebug // // 省略 // :demo:transformClassesWithAuto-registerForDebug start auto-register transform...

register scan all class cost time: 328 ms

insert register code to file:D:\github_repo\CC\demo\build\intermediates\transforms\auto-register\debug\0.jar com/billy/cc/demo/component/a/ComponentA com/billy/cc/demo/component/b/ComponentB com/billy/cc/demo/lifecycle/LifecycleComponent

codeInsertToClassName:com/billy/cc/core/component/ComponentManager.class insert register code to file:D:\github_repo\CC\demo\build\intermediates\transforms\auto-register\debug\14.jar com/billy/cc/demo/component/b/processor/CheckAndLoginProcessor com/billy/cc/demo/component/b/processor/GetDataProcessor com/billy/cc/demo/component/b/processor/GetNetworkDataProcessor com/billy/cc/demo/component/b/processor/LoginProcessor com/billy/cc/demo/component/b/processor/ShowActivityProcessor

codeInsertToClassName:com/billy/cc/demo/component/b/ComponentB.class

register insert code cost time: 22 ms register cost time: 350 ms

:demo:transformClassesWithDexBuilderForDebug


a 正常

demo 将 a 也注册了

点击demo 任意按钮崩溃

FATAL EXCEPTION: main Process: com.billy.cc.demo, PID: 30079 java.lang.NoClassDefFoundError: Failed resolution of: Lcom/billy/cc/demo/component/a/ComponentA; at com.billy.cc.core.component.ComponentManager.(ComponentManager.java:27) at com.billy.cc.core.component.ComponentManager.call(Unknown Source:0) at com.billy.cc.core.component.CC.call(CC.java:558) at com.billy.cc.demo.MainActivity.onClick(MainActivity.java:73) at android.view.View.performClick(View.java:6256) at android.view.View$PerformClick.run(View.java:24697) at android.os.Handler.handleCallback(Handler.java:789) at android.os.Handler.dispatchMessage(Handler.java:98) at android.os.Looper.loop(Looper.java:164) at android.app.ActivityThread.main(ActivityThread.java:6541) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767) Caused by: java.lang.ClassNotFoundException: Didn't find class "com.billy.cc.demo.component.a.ComponentA" on path: DexPathList[[zip file "/data/app/com.billy.cc.demo-mqT17mT7WX75xV-GDvINqw==/base.apk"],nativeLibraryDirectories=[/data/app/com.billy.cc.demo-mqT17mT7WX75xV-GDvINqw==/lib/x86, /system/lib, /system/vendor/lib]] at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:93) at java.lang.ClassLoader.loadClass(ClassLoader.java:379) at java.lang.ClassLoader.loadClass(ClassLoader.java:312) at com.billy.cc.core.component.ComponentManager.(ComponentManager.java:27)  at com.billy.cc.core.component.ComponentManager.call(Unknown Source:0)  at com.billy.cc.core.component.CC.call(CC.java:558)  at com.billy.cc.demo.MainActivity.onClick(MainActivity.java:73)  at android.view.View.performClick(View.java:6256)  at android.view.View$PerformClick.run(View.java:24697)  at android.os.Handler.handleCallback(Handler.java:789)  at android.os.Handler.dispatchMessage(Handler.java:98)  at android.os.Looper.loop(Looper.java:164)  at android.app.ActivityThread.main(ActivityThread.java:6541)  at java.lang.reflect.Method.invoke(Native Method)  at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767) 

luckybilly commented 6 years ago

@kassadin 谢谢反馈,这是AutoRegister在同时编译多个app时的bug,AutoRegister V1.2.0已修复