浅谈Android.mk
前段时间学习了 Android.mk 的编写,然而拖延症犯了,一直拖到现在才总结。文章若有不对之处,欢迎指正,谢谢~
这里借前辈的一句话:
IDE 和 makefile 代表了两种不同的思想:IDE 强调的是简化计算机与用户的交互;而 makefile 体现的是自动化。
Android.mk 简介
前段时间,在项目中遇到需要编写 Android.mk 文件,所以学习了下如何编写 Android.mk 。下面我们来看看 维基百科
和 百度百科
对其的主要解释。
维基百科
在软件开发中,make 是一个工具程序,经由读取叫做 makefile 的文件,自动化建构软件。它是一种转化文件形式的工具,转换的目标称为 target;与此同时,它也检查文件的依赖关系,如果需要的话,它会调用一些外部软件来完成任务。它的依赖关系检查系统非常简单,主要根据依赖文件的修改时间进行判断。大多数情况下,它被用来编译,生成,然后把结果代码连接起来生成可执行文件或者库文件。它使用叫做 makefile 的文件来确定一个 target 文件的依赖关系,然后把生成这个 target 的相关命令传给 shell 去执行。
百度百科
一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile 定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为 makefile 就像一个 Shell 脚本一样,其中也可以执行操作系统的命令。
makefile 带来的好处就是——“自动化编译”,一旦写好,只需要一个 make 命令,整个工程完全自动编译,极大的提高了软件开发的效率。make 是一个命令工具,是一个解释 makefile 中指令的命令工具,一般来说,大多数的 IDE 都有这个命令,比如:Delphi 的 make,Visual C++ 的 nmake,Linux 下 GNU 的 make。可见,makefile 都成为了一种在工程方面的编译方法。
Make 工具最主要也是最基本的功能就是通过 makefile 文件来描述源程序之间的相互关系并自动维护编译工作。而 makefile 文件需要按照某种语法进行编写,文件中需要说明如何编译各个源文件并连接生成可执行文件,并要求定义源文件之间的依赖关系。makefile 文件是许多编译器–包括 Windows NT 下的编译器–维护编译信息的常用方法,只是在集成开发环境中,用户通过友好的界面修改 makefile 文件而已。
通过上述两个摘要,我们大概能够了解到:Android 使用的是 GNU
的 make
,而 Android.mk
是 makefile 的一小部分,因此 Android.mk 是 GNU 的 makefile 格式。正如上面所说,makefile 很强大的。
我们开始吧!
注:因我是开发 Android TV ,平台是 MStar ,所以以下代码可能跟 Android 原生的有所差异,但绝不影响学习!
Android.mk 案例讲解
这里先讲解一个源码中的 Android.mk
,下面是 SystemUI
的 Android.mk
原文件,进行讲解 :
(注:案例有点长,耐心看完必有收获)
|
|
到此,案例已经解析完。
编译
编译成一个 APK(无依赖)
|
|
编译成一个 APK(依赖一个Java Jar包)
|
|
编译成一个需要 key 签名的 APK
|
|
添加一个预编译 APK
|
|
在实践后,已完成 Android.mk 的编写。希望通过学习,能够帮助你一点点~
参考资料:
android编译系统的makefile文件Android.mk写法
android makefile(android.mk)分析(序)
作者简介:
刘广明(@cnLGMing),一步一步往上爬。
文章若有不对之处,欢迎指正,谢谢~
版权声明:原创作品,转载时请务必注明原始出处。