如何使用 Gnu makefile 为库编写 Android.mk
我想使用庞大的第三方本机库制作一个 Android 应用程序,这些库使用 Gnu 构建工具(gnu makefile)。
我的问题是如何为这些库编写“Android.mk”文件,以便使用 Android 构建系统或 Android NDK 构建它们。
提前致谢
I want to make an Android application using huge third party native libraries which use the Gnu build tools (gnu makefile).
My question is how to write the "Android.mk" files for these libraries in order to build them using the Android build system or the Android NDK.
Thanks in advance
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
据我了解,您需要将 makefile 转换为 android 格式:(
并使用 ndk_buidl 来构建它们
As far as i understand, you need to convert the makefiles to android format :(
and use ndk_buidl to build them
唯一可行的方法是编写 NDK makefile。许多大型库都是以这种方式移植的。通常您应该运行
configure
脚本来生成 config.h 和 config.mak 文件。您将使用 config.mak 列出您的源。网上有一些教程可用于移植一些使用 Android NDK 构建的流行库。我在 freetype、ffmpeg、SDL、DevIL 等方面取得了成功。The only feasible way will be to write the NDK makefiles. Many big libraries has been ported that way. Normally you should run the
configure
script to generate the config.h and config.mak files. You'll use the config.mak to list your sources. There are tutorials over the net for porting some popular libraries to be built with Android's NDK. I had success with freetype, ffmpeg, SDL, DevIL and more.您可以使用以下技巧:下载 agcc,然后使用以下命令编译您的库
./configure CC=agcc CXX=agcc --host=arm-linux-androideabi &&制作
。之后创建简单的jni/Android.mk
,如下所示:之后,您可以使用 ndk-build 脚本构建您的 so 库。
You can use following trick: download agcc, then compile your library with
./configure CC=agcc CXX=agcc --host=arm-linux-androideabi && make
. After that create simplejni/Android.mk
like this:After that you can build your so library with ndk-build script.
最新版本的 ndk 允许您生成一个独立的工具链,它封装了大部分 android 的独特性,以便它可以像普通的 gcc 和支持程序一样被调用。这在某种程度上适合与现有项目构建系统一起使用 - 尽管假设能够在主机上执行目标功能测试代码的配置脚本将会失败,就像它们在任何交叉编译情况下一样。
More recent releases of the ndk allow you to generate a stand-alone toolchain which encapsulates most of the android uniqueness so that it can be invoked more like a normal gcc and support programs. This is somewhat suitable for use with existing project build systems - though configure scripts which assume the ability to execute target feature test code on the host will fail, just as they do in any cross compilation case.