2017-06-12 123 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