[英]android cannot find corresponding jni function
public native static int convertVideoFrame(ByteBuffer src,
ByteBuffer dest,
int destFormat,
int width,
int height,
int padding,
int swap);
Android
讓我找不到對應的JNI
函數。
這樣的文件位於正確的體系結構圖中的jniLib中。
這與我的軟件包名稱有關,他試圖在我的軟件包中而不是在so庫中找到它?
當我運行它時,我得到:
No implementation found for native Lorg/telegram/Utilities;.
convertVideoFrame:(Ljava/nio/ByteBuffer;Ljava/nio/ByteBuffer;IIIII)I
如果移動或重命名聲明了本機方法的java類,則必須再次編譯.so文件,您需要在c文件中更改相應的本機方法名稱。 在我們的例子中,jni文件夾中有video.c文件 。 我們需要根據將使用此方法的java類的包名稱來更新方法名稱,並在方法名稱前添加“ Java_ ”作為前綴。 希望這個幫助。
這是jni中的常見問題。
您的本機函數android類無法找到您在虛擬機上引用的函數。
有不同的方法來重現此錯誤:
有些設備使用armeabi,armeabi-V7等。因此,請嘗試在兩個版本中交叉編譯並放入jniLib中,並為每種體系結構創建文件夾。
首先,檢查您在JNI中使用的命名法是否正確。 如果您的Java包名稱是foo.com,並且您定義本機函數的類是JniManager.java,而您的函數是yourFunction
JNIEXPORT jint JNICALL
Java_foo_com_JniManger_yourFunction(JNIEnv *env,jobject instance);
如果您使用的是.h文件,請使用extern“ C”。
extern "C"
{
JNIEXPORT jint JNICALL Java_foo_com_JniManger_yourFunction(JNIEnv*env,jobject instance);
JNIEXPORT jint JNICALL Java_foo_com_JniManger_yourFunction(JNIEnv*env,jobject instance)
{
//your body
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.