本文主要是介绍混淆导致Crash,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
崩溃log
Caused by: java.lang.NoSuchFieldError: no "J" field "peer" in class "Lnet/sourceforge/zbar/ImageScanner;" or its superclassesat net.sourceforge.zbar.ImageScanner.init(Native Method)
2020-09-24 13:55:22.821 7445-7445/com.xiaomi.micolauncher E/AndroidRuntime: at net.sourceforge.zbar.ImageScanner.<clinit>(ImageScanner.java:38)at cn.bingoogolapple.qrcode.zbar.ZBarView.a(ZBarView.java:43)at cn.bingoogolapple.qrcode.a.f.<init>(QRCodeView.java:55)at cn.bingoogolapple.qrcode.zbar.ZBarView.<init>(ZBarView.java:37)at cn.bingoogolapple.qrcode.zbar.ZBarView.<init>(ZBarView.java:33)... 28 more
代码
public class ImageScanner
{/** C pointer to a zbar_image_scanner_t. */private long peer;static{System.loadLibrary("zbarjni");init();}private static native void init();public ImageScanner (){peer = create();}/** Create an associated peer instance. */private native long create();
错误原因:
混淆导致ImageScanner 这个类的peer 被混淆了,但是peer 应该是被c层用到
总结:
一般来说,混淆导致找不到有这些原因:
1.成员变量或者方法被C层使用
2.类、方法、变量被反射调用,例如:Json 等网络数据 混淆之后会有问题,找不到值。
这篇关于混淆导致Crash的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!