android - NoSuchMethodError 用于混淆的 openCV 库
问题描述
我正在为我的应用程序使用适用于 Android 的 OpenCV 库。我使用minify
andproguard
作为我的应用程序的发布版本。这是我的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() + "]";
}
}
那么我如何告诉我的 proguard 离开 CvException 类,甚至更好地保留所有 OpenCv 代码,就像它一样,既不混淆也不缩小它呢?
提前致谢!
解决方案
我认为你必须在你的 proguard 文件中添加这一行:
-keep class org.opencv.** { *; }
您不需要混淆 opencv 模块!
推荐阅读
- python - 将 PNG 文件加载到 TensorFlow 中
- c++ - 交叉编译项目本地的 Eigen 库错误:找不到 -lroot/testappt/local/eigen
- php - 用非英文字符更新 MySQL 表不起作用,排序规则和字符集都设置为 utf8 或 utf8mb4
- php - Laravel 的 CSV 导入验证不断验证值不存在
- docker - Setting CORS in Azure Functions running inside docker container
- spring - Can I move Spring Boot logging settings out of application.properties file and into an untracked file?
- autohotkey - Compiled autohotkey file does not run, uncompiled works
- latex - Render latex preview of equation like in latex export (with preceeding/trailing newline)
- laravel - How can i upload images without waiting user to upload images Laravel
- javascript - 如何修复:警告:无法对未安装的组件执行 React 状态更新