2016-07-30 49 views
1

希望你能幫助我。我設法創建了我的本地活動項目並將其打包。在libs文件夾中,我有一個在本地活動中動態加載的共享庫(dlopen)。我知道包libs被複制到:/data/data/packagename/lib 但我怎樣才能使用dlopen訪問它?那可能嗎?我以爲我可以使用本地文件夾名稱訪問它,例如:./libMySharedLibrary,因爲它們全部位於APK/libs子文件夾中。有沒有人如何獲得正確的文件夾名稱或如何訪問這些共享庫?在APK libs文件夾中動態加載共享對象

回答

0

動態鏈接程序已經知道了你的包私人圖書館 - 只是通過基本名稱,所有應行:

dlopen("libawesome.so", RTLD_LAZY); 

附:爲了避免意外發生,您應該確保您的磁帶庫名稱是唯一的,並且不與系統衝突(這些文件位於/system/lib/vendor/lib,還檢查了64位設備上的lib64目錄)。

+0

假設我的軟件包名稱是:** com.android.example **。當我這樣做時:** adb shell run-as com.android.example **並查看**/lib **文件夾我看不到我的共享庫。我可以在.apk文件中看到共享庫,但在使用** ant installd **進行安裝後,它不在該文件夾中。共享庫應該被複制到該文件夾​​中? – yaakuro

+0

@yaakuro AFAIK原生庫被複制到['nativeLibraryDir'](https://developer.android.com/reference/android/content/pm/ApplicationInfo.html#nativeLibraryDir)。好像它並不總是你的軟件包'lib'目錄。無論如何,這個問題不是關於庫的位置,而是關於以本地代碼加載它們的正確方法。你有沒有嘗試使用'dlopen()'只有庫基名? – Sergio