[英]Need directions to integrate already existing c++ code to Android NDK
我已经有其他人编写的一些C ++代码(与微控制器进行交互)。 我学习了android和NDK,并轻松编写了小样本程序。 现在,我需要将两者集成。
因此,我应该如何开始进行集成部分? NDK实际上如何工作? 假设我现在分为三部分,A-C ++代码,B-NDK本机接口代码,C-Android Activity / Class。
1)我应该编译A(g ++ linaro),然后将目标文件放置在Android项目中以供C通过B调用吗?
(要么)
2)是否应该使用g ++(linaro)一起编译A和B,然后将.so文件复制到Android Eclipse项目中? (不知道在普通的Eclipse中模仿NDK-build命令会多么复杂)。
(要么)
3)将A复制到Android Eclipse项目中并生成java.h文件,然后使用A和B同时生成.so文件。(在这种方法中,我需要找到正确的位置,将整个CPP项目文件放入Android / NDK中蚀项目)。
PS:我试图找到可以做到这一点的例子,但是似乎只是找到了简单的基本例子,我已经很容易地创建了。 我需要集成部分的帮助,如果您知道(Android / NDK / Eclipse / already_existing_C ++ _ code),请向我发布教程。
您应该使用Android工具链编译A。 请注意,Android不仅支持ARM(又名armeabi ),还支持armv7a , x86 , mips和最近支持的armeabi-v7a-hard 。 很快, x86-64将发布 。
您可以使用Android 独立工具链编译A,而无需采用NDK构建系统。
您可以将B编译为A的一部分,也可以单独编译。 在后一种情况下,只需在Java静态构造函数中将A加载到B之前:
{
loadLibrary("A");
loadLibrary("B");
}
因为libB.so将依赖libA.so。
您可以在APK中打包libA.so和libB.so(在libs/armeabi
, libs/x86
等文件夹中)
首先,我建议您阅读Android NDK文档 。 为了使用NDK工具链将C ++代码编译到JNI的共享库中,编写Android.mk并不难。 最困难的部分可能是Android libc(仿生)与普通Linux libc不同。
因此,尝试首先使用NDK工具链编译A-C ++代码。 如果失败,则应将其移植到Android libc,或者应使用linaro工具链对其进行编译和静态链接。 查看使用NDK工具链链接静态小精灵库的文档。 但是二进制文件在Linux上不起作用,因为Android Linux内核与linaro不同。
无论如何,如果您要编译共享库,可以轻松将其集成到Android项目。 只需将共享库放入libs / [arch],例如libs / armeabi-v7a / libfoo.so。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.