環境...的Android NativeActivity的引用一個動態庫,無法部署
我有一個全新的Visual Studio 2015年的Android NDK解決方案。 這包含2個項目(由visual studio生成的默認模板代碼):
- 本地活動。這是我想要放置Android特定代碼的地方。它有一些默認的代碼,使屏幕顏色在綠色和黑色之間變淡。
- 「包裝」項目,以幫助部署。
我已將此成功部署到英特爾HAXM虛擬設備以及通過USB連接的實際設備。迄今爲止都很好。
然後我添加了一個Android動態庫項目(.so) - 這是我想要放置核心代碼(平臺不可知)的地方。 我從本地活動項目添加了對此Core庫的引用。
一切編譯和鏈接正常。我仍然可以創建一個.APK文件。
其他信息:
- 的Android SDK 5.1(安卓-22)
- 的Android NDK 21
- 鏘3.8
- C++ 11
- 沒有使用讓文件或搖籃
問題...
現在,每當我部署到虛擬/真實設備我得到以下錯誤(來自logcat中獲取)
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.NATester/android.app.NativeActivity}: java.lang.IllegalArgumentException: Unable to load native library: /data/app/com.NATester-2/lib/x86/libNATester.so
事情我都試過...
- 改變核心庫,靜態(.a)中
- 檢查Android設備查看文件是否存在 - 它確實存在。
- 手動將.APK部署到Android設備。
一些文章建議使用Java代碼來加載庫 - 我想避免調用Java代碼例如System.LoadLibrary,因爲這看起來像一個黑客 - 我覺得應該有可能在Android上有一個純粹的C++應用程序。我不能成爲唯一遇到這個問題的人?!
這看起來相關,但老又爲了什麼一定是很常見的情況 不必要的黑客 - Can't load native shared library with dependencies in a native activity app - https://github.com/ikonst/android-dl
爲了什麼它的價值,我是一個經驗豐富的C#開發人員使用Visual Studio(15歲)。 因此,我在開發應用程序時將許多事情視爲理所當然 - 這是我的第一個使用C++/Android的項目,看起來更像是一場手動戰鬥,讓所有的東西都起作用!