概述
Android 底层代码中,使用 Android.mk 文件来进行编译代码,类似于我们平常接触的 gradle。底层的编译,由一套 NDK Build 系统构成,而 mk 文件用来告知 NDK 关于 Source 的信息。
本质上,Android.mk只是GNU MakeFile的一个片段,编译系统在编译的时候有可能会多次解释Android.mk文件,所以要尽量少在脚本里面申明变量,也不要假设任何没有在脚本中定义的条件。
GNU 是什么?
Unix 系统被发明之后,大家用的很爽。但是后来开始收费和商业闭源了。一个叫 RMS 的大叔觉得很不爽,于是发起 GNU 计划,模仿 Unix 的界面和使用方式,从头做一个开源的版本。经过一些列的演变,其就是后来的Linux。
1. 模块
mk 语法允许将 Source 打包成一个模块,模块又分为:
- 动态库:可以被 install/copy 到应用程序包(apk)
- 静态库:可以被链接入动态库
一个 mk 中能定义一个或者多个模块,也可以将同一份 Source 加入到多个模块中。
2. 示例解析
看一个简单的例子:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := hello-jni
LOCAL_SRC_FILES := hello-jni.c
include $