繁体   English   中英

需要将现有的c ++代码集成到Android NDK的说明

[英]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 ),还支持armv7ax86mips和最近支持的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/armeabilibs/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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM