2016-08-16 50 views
2

環境...的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的項目,看起來更像是一場手動戰鬥,讓所有的東西都起作用!

回答

0

一直在掙扎一段時間,但設法部署這些庫,最終很容易。

右鍵單擊解決方案資源管理器中的項目[theProject(Andorid-xx)],然後選擇添加新項目,添加您的.so庫。

右鍵單擊新添加的庫並選擇屬性,項目類型應爲庫,將內容設置爲是,這將部署該庫。