[英]No implementation found for native method in android studio
我想通過 OpenCV android 在我的應用程序中集成一些過濾器。 我已經設置了 JNI 文件,用於調用本機方法的類。 但是每次運行應用程序時都會出現此錯誤。
java.lang.UnsatisfiedLinkError: No implementation found for void com.digitec.owtofthebox.cartoonify.lib.Native.setSketchTexture(long)
我的 jniFile.cpp
#include <jni.h>
#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include "filters.h"
extern "C" {
ImageFilters* filters = ImageFilters::getInstance();
JNIEXPORT void JNICALL Java_com_digitec_owtofthebox_cartoonify_lib_Native_setScaleFactor(JNIEnv* env, jobject, jdouble scaleFactor)
{
filters->setScaleFactor((double)scaleFactor);
}
JNIEXPORT void JNICALL Java_com_digitec_owtofthebox_cartoonify_lib_Native_setSketchTexture(JNIEnv* env, jobject, jlong sketchTexture)
{
filters->setSketchTexture(*(Mat*)sketchTexture);
}
JNIEXPORT void JNICALL Java_com_digitec_owtofthebox_cartoonify_lib_Native_setSketchFlip(JNIEnv* env, jobject, jboolean sketchFlip)
{
filters->setSketchFlip((bool)sketchFlip);
}
JNIEXPORT void JNICALL Java_com_digitec_owtofthebox_cartoonify_lib_Native_colorCartoonFilter(JNIEnv* env, jobject, jlong addrSrc, jlong addrDst, jint thickness, jint threshold)
{
filters->applyColorCartoon(*(Mat*)addrSrc, *(Mat*)addrDst, (int)thickness, (int)threshold);
}
JNIEXPORT void JNICALL Java_com_digitec_owtofthebox_cartoonify_lib_Native_grayCartoonFilter(JNIEnv* env, jobject, jlong addrSrc, jlong addrDst, jint thickness, jint threshold)
{
filters->applyGrayCartoon(*(Mat*)addrSrc, *(Mat*)addrDst, (int)thickness, (int)threshold);
}
JNIEXPORT void JNICALL Java_com_digitec_owtofthebox_cartoonify_lib_Native_pencilSketchFilter(JNIEnv* env, jobject, jlong addrSrc, jlong addrDst, jint sketchBlend, jint contrast)
{
filters->applyPencilSketch(*(Mat*)addrSrc, *(Mat*)addrDst, (int)sketchBlend, (int)contrast);
}
JNIEXPORT void JNICALL Java_com_digitec_owtofthebox_cartoonify_lib_Native_colorSketchFilter(JNIEnv* env, jobject, jlong addrSrc, jlong addrDst, jint sketchBlend, jint contrast)
{
filters->applyColorSketch(*(Mat*)addrSrc, *(Mat*)addrDst, (int)sketchBlend, (int)contrast);
}
JNIEXPORT void JNICALL Java_com_digitec_owtofthebox_cartoonify_lib_Native_pixelArtFilter(JNIEnv* env, jobject, jlong addrSrc, jlong addrDst, jint pixelSize, jint numColors)
{
filters->applyPixelArt(*(Mat*)addrSrc, *(Mat*)addrDst, (int)pixelSize, (int)numColors);
}
JNIEXPORT void JNICALL Java_com_digitec_owtofthebox_cartoonify_lib_Native_oilPaintFilter(JNIEnv* env, jobject, jlong addrSrc, jlong addrDst, jint radius, jint levels)
{
filters->applyOilPaint(*(Mat*)addrSrc, *(Mat*)addrDst, (int)radius, (int)levels);
}
}
我的母語班
public class Native{
public static native void setScaleFactor(double scaleFactor);
public static native void setSketchTexture(long texMatAddr);
public static native void setSketchFlip(boolean flip);
public static native void colorCartoonFilter(long srcMatAddr, long dstMatAddr, int thickness, int threshold);
public static native void grayCartoonFilter(long srcMatAddr, long dstMatAddr, int thickness, int threshold);
public static native void pencilSketchFilter(long srcMatAddr, long dstMatAddr, int sketchBlend, int contrast);
public static native void colorSketchFilter(long srcMatAddr, long dstMatAddr, int sketchBlend, int contrast);
public static native void pixelArtFilter(long srcMatAddr, long dstMatAddr, int pixelSize, int colorNum);
public static native void oilPaintFilter(long srcMatAddr, long dstMatAddr, int radius, int levels);
}
我還需要什么。 我查看了其他帖子,有關 cmake 的一些內容,但無法理解。
您無需了解 CMake 的工作原理。 您需要做的就是按照此鏈接中的圖片操作: https : //kcwong-joe.medium.com/how-to-import-opencv-4-5-2-in-android-studio-d9114179628f
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.