android - 混淆的 openCV 库的 NoSuchMethodError

标签 android opencv proguard android-proguard

我正在为我的应用程序使用适用于 Android 的 OpenCV 库。我使用 minifyproguard 作为我的应用程序的发布版本。这是我的 proguard-rules.pro:

-dontwarn okio.**
-dontwarn org.joda.convert.**
-dontwarn org.joda.time.**
-keep class org.joda.time.** { *; }
-keep interface org.joda.time.** { *;}
-keep class android.support.v7.widget.** { *; }
-keep class com.crashlytics.** { *; }
-dontwarn com.crashlytics.**
-keepattributes *Annotation*
-keepattributes SourceFile,LineNumberTable
-keep public class * extends java.lang.Exception
-keep class com.theartofdev.edmodo.cropper.*
-ignorewarnings

在将应用程序用作发布版本时,我有时会遇到此错误:

Fatal Exception: java.lang.NoSuchMethodError: no non-static method "Lorg/opencv/core/CvException;.<init>(Ljava/lang/String;)V"
       at org.opencv.core.Mat.n_submat(Mat.java)
       at org.opencv.core.Mat.submat(Mat.java:839)
       at one.realnote.app.ImageAnchor.registerForDetectionAndTraking1(ImageAnchor.java:600)
.
.
.

如果我反编译发布的 apk,我得到的是 CvException.java 的内容:

package org.opencv.core;


public class CvException extends RuntimeException {
    private static final long serialVersionUID = 0x1L;
}

它没有 init 方法或者像异常所说的构造函数。正确的类内容应该是这样的:

package org.opencv.core;

public class CvException extends RuntimeException {

    private static final long serialVersionUID = 1L;

    public CvException(String msg) {
        super(msg);
    }

    @Override
    public String toString() {
        return "CvException [" + super.toString() + "]";
    }
}

那么我如何告诉我的混淆器保留 CvException 类,甚至更好地保留所有 OpenCv 代码,既不混淆也不缩小它?

提前致谢!

最佳答案

我认为你必须在你的 proguard 文件中添加这一行:

-keep class org.opencv.** { *; }

您不需要混淆 opencv 模块!

关于android - 混淆的 openCV 库的 NoSuchMethodError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51597470/

相关文章:

Python3并行处理opencv视频帧

c++ - Opencv:对于非标准尺寸的图像,imdecode() 失败

android - Android Studio 中混淆文件夹结构、包

android - 使用 Proguard 时来源不明

Android Proguard 编译错误

java - 在 Android 中使用 android.net 或 java.net 哪个 Socket API 进行 UDP 通信?

c - HSV 转换与 cvCvtColor() 问题

android - 在 GLSurfaceView 上绘制 2D

java - 相机打开时如何释放相机?

android - SyncAdapter 同步自定义应用程序数据?