2017-06-12 139 views
0

我想用C或C++下載Android Studio NDK項目的一些工作示例,這些示例將被編譯爲.so庫(或可從中提取.so的APK)。 我試過ndkbuild與Android.mk構建和CMake與CMakeLists.txt,在Windows上的官方和非官方教程...Android Studio C++ NDK庫示例

如果我在同一個應用程序(Java)的Android上嘗試它們,它是工作,但我想在Android的Unity3D中使用NDK,我不斷收到DllNotFoundException。

我將我的AndroidUnity項目上傳到github。

+0

請從異常中發佈完整的堆棧跟蹤,而不僅僅是名稱,因爲這應該指示哪個庫丟失。 –

+0

https://gist.github.com/spixy/df250fbb22f6f1c7c57de7ee0a6a60fc – user2576489

+0

您是否看到我離開的答案? – Programmer

回答

1

首先,here是您正在尋找的示例Android項目插件。

知道如何自己做這件事非常重要。

過去,這是很難做到過,但最新的Android 工作室使得它更容易現在使用C/C++或容易產生。所以庫。更新Android Studio到最新版本,然後按照以下步驟創建一個C++插件。

.Create Android Studio中

。檢查一個新的項目包括C++詢問服務啓用C++。

enter image description here

。對下拉菜單,檢查C++ 11C++標準下拉菜單上。您將需要C++ 11來實際使用最有用的C++功能。另外,如果你需要它們,啓用異常或frtti。

enter image description here

就是這樣。

當你創建插件:

調試庫應該是:

\app\build\intermediates\cmake\debug\obj\ 

釋放庫應該是:

\app\build\intermediates\cmake\debug\obj\ 

如果你只看到調試但不是插件的發佈版本,請檢查here以瞭解如何使其顯示。你是在Android上得到DllNotFoundException


可能的原因:

。你沒包住C/C++函數各地extern "C"。您必須對.cpp文件中的每個功能執行此操作,或者您在.h文件中的功能中執行此操作。

。你把插件放在錯誤的Unity文件夾中。

在Unity項目中,在<ProjectDirectory>\app\build\intermediates\cmake\release\obj處生成的armeabi-v7a和x86插件應放置在Assets\Plugins\Android\libs\armeabi-v7a\Assets\Plugins\Android\libs\x86\處。

確保拼寫正確。有關詳細信息,請參閱this

。您從C#端正確加載它。

假設該插件的名稱是libScreenshot.a,做包括的lib前綴,也做不加載時添加.a

[DllImport("Screenshot", CallingConvention = CallingConvention.Cdecl)] 
    public static extern void takeScreenshot(); 
+0

謝謝你, 起初,我使用obj從'\ app \ build \ outputs \ ...'和我的Unity文件夾被命名爲* lib *,而不是* libs *,但它仍然不起作用。 現在它的工作 – user2576489

+0

很高興你能工作 – Programmer