chenenyu/Router

开启混淆后运行报错 java.lang.AbstractMethodError

artharyoung opened this issue · 4 comments

使用的1.8.1版本,R8开启
项目中没有直接添加androidx.startup:startup-runtime依赖
查看External Libraries里使用的是androidx.startup:startup-runtime:1.1.1
应该是Jetpack库自动添加的

使用如下配置强制跟Router使用的1.1.0版本保持一直,编译安装后,仍然运行报错
configurations.all {
resolutionStrategy{
force 'androidx.startup:startup-runtime:1.1.0'
}

}

java.lang.RuntimeException: Unable to get provider androidx.startup.InitializationProvider: androidx.startup.StartupException: java.lang.AbstractMethodError: abstract method "java.util.List androidx.startup.Initializer.dependencies()"
at android.app.ActivityThread.installProvider(ActivityThread.java:7215)
at android.app.ActivityThread.installContentProviders(ActivityThread.java:6699)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6600)
at android.app.ActivityThread.-wrap2(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066)
at android.os.Handler.dispatchMessage(Handler.java:108)
at android.os.Looper.loop(Looper.java:166)
at android.app.ActivityThread.main(ActivityThread.java:7529)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:245)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:921)

感谢反馈,我试下

测试没有发现这个问题,1.1.0和1.1.1都可以的。而且startup库是自带混淆的,如果你不放心,可以手动keep一下startup库的所有代码

抱歉,是AGP 7.2.1 的问题,降到7.1.3没问题了。

编译成功打开APP,但是路由跳转时会闪退。新建一个demo单独接入又没法复现。Google搜了一下应该是R8的bug,但是不知道是哪个类引起的,加了一条混淆过滤,暂时解决了。AGP的坑真的多

-keep class com.chenenyu.router.matcher.** { *; }

错误日志:
java.lang.AbstractMethodError: abstract method "boolean p2.g.a(android.content.Context, android.net.Uri, java.lang.String, com.chenenyu.router.RouteRequest)"
at o2.f.a(IntentProcessor.java:34)
at m2.e.b(RealInterceptorChain.java:7)
at o2.g.a(IntentValidator.java:9)
at m2.e.b(RealInterceptorChain.java:7)
at o2.c.a(BaseValidator.java:11)
at m2.e.b(RealInterceptorChain.java:7)
at m2.f.h(RealRouter.java:4)
at m2.f.b(RealRouter.java:1)

出错的位置在com.chenenyu.router.matcher.Matcher接口的match方法