AS混淆錯(cuò)誤和使用官網(wǎng):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'
// 混淆協(xié)議
configuration 'proguard-rules.pro'
}
然后運(yùn)行的時(shí)候報(bào)錯(cuò)了:
java.lang.AbstractMethodError: abstract method "void android.hardware.camera2.CameraDevice$StateCallback.onOpened(android.hardware.camera2.CameraDevice)"
找到該問(wèn)題的具體引用到了android.jar中的代碼嘉冒,一開(kāi)始以為是android.jar沒(méi)有引入,其實(shí)AS混淆的時(shí)候自動(dòng)引用了议街,重復(fù)添加會(huì)報(bào)錯(cuò)的
截圖_20181025161426.png
網(wǎng)上一些辦法:
-keep class android.hardware.camera2.CameraDevice{*;}
等等類似的埋心,到我這邊都無(wú)效菱蔬,目前的解決方案是在自己的項(xiàng)目創(chuàng)建一個(gè)新的對(duì)象繼承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{*;}
問(wèn)題就解決了惰蜜。
大家有什么好的方法可以留言 謝謝哦(_)