开启混淆后运行报错 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方法