本文主要是介绍Android 解决 No static method in class La/a/a/a; or its super classes,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
错误堆栈:
Process: com.chaozh.iReader, PID: 24217java.lang.NoSuchMethodError: No static method getDrawable(Landroid/content/Context;I)Landroid/graphics/drawable/Drawable; in class La/a/a/a; or its super classes (declaration of 'a.a.a.a' appears in base.apk!classes2.dex)at com.zhangyue.bookstore4.ui.widget.ZyTitleBar.setNavigationIconDefault(ZyTitleBar.java:547)at com.zhangyue.bookstore4.ui.fragment.ShoppingCartFragment.onViewCreated(ShoppingCartFragment.java:1260)at com.zhangyue.iReader.ui.fragment.base.CoverFragmentManager$3.run(CoverFragmentManager.java:660)at com.zhangyue.iReader.app.IreaderApplication.runOnUiThread(IreaderApplication.java:141)at com.zhangyue.iReader.ui.fragment.base.CoverFragmentManager.replaceFragment(CoverFragmentManager.java:599)at com.zhangyue.iReader.ui.presenter.LoadPluginPresenter$1$1.run(LoadPluginPresenter.java:155)at android.os.Handler.handleCallback(Handler.java:790)at android.os.Handler.dispatchMessage(Handler.java:99)at android.os.Looper.loop(Looper.java:192)at android.app.ActivityThread.main(ActivityThread.java:6800)at java.lang.reflect.Method.invoke(Native Method)at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:825)
错误原因:
目前报错的是我们的一个插件,报错说a.a.a.a 里面没有getDrawable 这个方法。
我们看下插件里面究竟有没有这个方法:
我们看到里面是有这个方法的!
那怎么可能查不到?
突然想到之前主工程里面也有其他的一个jar,里面有a.a.a.a 这个类,他这个类里面确实没有这个方法!
解决方法
全都是因为混淆,两个jar 包 都被混淆成了a.a.a.a!所以已经加载了第一个a.a.a.a之后,第二个就不会再加载,但是第一个里面并没有第二个的方法!
那怎么办?
对其中一个jar 混淆的时候,改变一下包的前缀。
在proguard-project.txt 增加下面这句话:
-repackageclasses 'zy'
我们再看下打完之后的包:
a 就会变成我们指定的zy.
下面给出proguard 文档的官网:
https://www.guardsquare.com/en/products/proguard/manual/examples#repacking
里面还有很多好玩的功能,比如混淆期间 ,去掉log 代码。Removing logging code,大家有时间可以自行研究。
这篇关于Android 解决 No static method in class La/a/a/a; or its super classes的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!