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{*;}
问题就解决了。
大家有什么好的方法可以留言 谢谢哦(_)
网友评论