簡體   English   中英

android找不到對應的jni函數

[英]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類無法找到您在虛擬機上引用的函數。

有不同的方法來重現此錯誤:

  1. 您的目標架構:

有些設備使用armeabi,armeabi-V7等。因此,請嘗試在兩個版本中交叉編譯並放入jniLib中,並為每種體系結構創建文件夾。

  1. 確保您的函數名稱正確

首先,檢查您在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.

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