簡體   English   中英

在android studio中找不到本機方法的實現

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM