如何为Android编译自己的C ++库?

时间:2011-02-08 20:19:44

标签: c++ android android-ndk

我用C ++编写并测试了一个库。如果我直接添加源文件,代码甚至可以在我的Android应用程序中运行。虽然我有为常见操作系统编译静态和动态库的经验,但我没有为这样的移动系统编译经验。我已经做了一些研究,我仍然有点迷失到如何处理这个问题。例如,我不确定是构建一个用于ndk-build的makefile还是直接调用Android的一个编译器。

我确实看到this question,但它与我的情况不太匹配。我只想运行build并让它吐出libfoo.a(我也想生成libfoo.so,但libfoo.a现在对我更感兴趣。)该问题获胜答案中的例子暗示它将构建库作为构建最终应用程序的一个步骤/模块。我尝试这样做只是为了看,但我没有运气。

有人可以指导我这项工作吗?

澄清 - 我不想构建库并立即将其传输到应用程序中。我想要一个.a或.so文件,我可以在多个未来的Android应用程序中链接。

2 个答案:

答案 0 :(得分:3)

使用空代码创建一个虚拟java文件,并确保C ++代码中有一个android_main函数。使用ndk-build构建。生成的apk将使您的库成为一个应用程序。

请参阅android-ndk-r5 / samples目录中的示例,查看示例native-bitmap以获得一些想法。

答案 1 :(得分:1)

如果我理解正确的共享库是不可接受的并且你想要是静态的(但为什么这么重要呢?),最简单的方法可能只是提供可以添加到a的源代码。项目

最终,ndk构建系统并没有什么特别之处,除了它知道正确的命令,以便为各种各样的安卓机器人体系结构构建必要的文件。如果你真的想做一些不同的事情,可以在创建共享库时记录android构建系统的操作,然后编写自己的Makefile,执行类似的步骤来创建静态库。但是,只要基础假设或目标集合在新的Android版本中发生变化,您就必须更新Makefile。