簡體   English   中英

如何在另一個Android應用程序中調用Android ndk build .so文件?

[英]How to call a Android ndk build .so file in another Android application?

我有一個要求,我必須使用Android中的NDK構建來構建.so文件,並且必須在其他Android應用程序中調用.so文件中的某些方法。

到目前為止我嘗試過的。

我已經從Android項目的lib文件夾中提取了.so文件,並將其放到我應調用該.so文件的其他應用程序li​​bs文件夾中。 我使用了以下代碼:

注意:我正在使用ECLIPSE

static {
        System.loadLibrary("NativeCode");
    }

並且嘗試了完整的庫路徑

static {
        System.loadLibrary("fullpath\NativeCode");
    }

兩種情況都給出unsatisfiedLinkError,這表示它沒有獲取我的.so文件的路徑。

您需要將libNativeCode.so放在根目錄的jni文件夾中,而不是在libslib文件夾中

這是一個很好的教程: http : //www3.ntu.edu.sg/home/ehchua/programming/android/android_ndk.html

另外,您可以使用以下命令:

    adb shell
    $echo $PATH

它會做的是顯示如下路徑:

/ sbin目錄:/供應商/ bin中:/系統/ sbin目錄:/系統/ bin中:/系統/ XBIN

您可以將.so放在/system/system/bin/system/sbin等任何文件夾中。 (請記住,但是您需要手動復制它,對於應用程序這樣做不是一個好主意)

編輯:由於簽名,您不能在應用程序中調用任何JNI函數。 您需要有一個JNI包裝器(一個.so JNI庫,該庫又使用.h頭文件來調用另一個庫的JNI函數)。 這是因為JNI對簽名非常敏感。 因此,按照我之前的建議,請按照本教程操作!

為了使您的.so庫可以使用loadLibrary()加載,您必須將libNativeCode.so庫復制到jniLibs / architecture文件夾中。

該文件夾應位於Android應用程序模塊的src / main / jniLibs / armeabi-v7a下(假設您使用的是Android Studio)。

復制庫后,將以下行添加到位於app模塊文件夾的build.gradle中:

assert file("./src/main/jniLibs/armeabi-v7a/libNativeCode.so").exists()

完成上述步驟后,應正確加載lib。

如果libNativeCode.so位於錯誤的路徑,則Gradle構建將失敗。

祝好運,

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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