美文网首页
proguard报错AbstractMethodError

proguard报错AbstractMethodError

作者: 攻城狮Song | 来源:发表于2018-10-25 16:20 被阅读19次

    AS混淆错误和使用官网:https://www.guardsquare.com/en/products/proguard/manual/troubleshooting#duplicateclass

    混淆配置:

    task makeJar(type: proguard.gradle.ProGuardTask, dependsOn: "build") {
        // 未混淆的jar路径
    //    injars 'build/intermediates/bundles/release/classes.jar'
    //    injars 'build/intermediates/packaged-classes/release/classes.jar'
        injars 'build/intermediates/intermediate-jars/release/classes.jar'
        // 混淆后的jar输出路径
        outjars 'build/outputs/camera2-1.1.0.jar'
        // 混淆协议
        configuration 'proguard-rules.pro'
    }
    

    然后运行的时候报错了:

     java.lang.AbstractMethodError: abstract method "void android.hardware.camera2.CameraDevice$StateCallback.onOpened(android.hardware.camera2.CameraDevice)"
    

    找到该问题的具体引用到了android.jar中的代码,一开始以为是android.jar没有引入,其实AS混淆的时候自动引用了,重复添加会报错的


    截图_20181025161426.png

    网上一些办法:

    -keep class android.hardware.camera2.CameraDevice{*;}
    等等类似的,到我这边都无效,目前的解决方案是在自己的项目创建一个新的对象继承StateCallback

    import android.hardware.camera2.CameraDevice;
    import android.support.annotation.NonNull;
    
    public class CameraCallBack extends CameraDevice.StateCallback {
        @Override
        public void onOpened(@NonNull CameraDevice cameraDevice) {
    
        }
    
        @Override
        public void onDisconnected(@NonNull CameraDevice cameraDevice) {
    
        }
    
        @Override
        public void onError(@NonNull CameraDevice cameraDevice, int i) {
    
        }
    }
    

    然后在proguard-rules.pro添加

    -keep class [PackageName].CameraCallBack{*;}
    

    问题就解决了。
    大家有什么好的方法可以留言 谢谢哦(_)

    相关文章

      网友评论

          本文标题:proguard报错AbstractMethodError

          本文链接:https://www.haomeiwen.com/subject/oqlctqtx.html