proguard报错AbstractMethodError

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)