编译动态共享库、静态共享库
Android.mk是向Android NDK 构建系统描述NDK项目的GNU Makefile片段。 构建系统规定它放在jni子目录。
先看一个简单的mk文件
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := JniTest
LOCAL_SRC_FILES := JniTest.cpp
include $(BUILD_SHARED_LIBRARY)
Android.mk文档必须以LOCAL_PATH 变量的定义开头。
LOCAL_PATH := $(call my-dir)
它是Android构建系统用来定位源文件的。 my-dir 是一个宏,用于返回当前目录;
include $(CLEAR_VARS) 用于清除所有的LOCAL_name全局变量,除了LOCAL_PATH, 这样做可以避免变量定义冲突。
LOCAL_MODULE用于给模块设置一个唯一的名称。
LOCAL_SRC_FILES 可以包含多个源文件, 文件名可以用空格分隔开。
include $(BUILD_SHARED_LIBRARY) 表示构建共享库, 它指向的是/android-ndk-r10b/build/core/build-shared-library.mk代码片段。
include $(BUILD_SHARED_LIBRARY) 表示构建静态库,它指向的是/android-ndk-r10b/build/core/build-static-library.mk代码片段
include $(BUILD_EXECUTABLE) 表示编译成可执行程序
LOCAL_CPP_EXTENSION: c++默认源文件为cpp, 这个变量可以用来为C++源文件指定一个或多个文件扩展名。
LOCAL_CPP_EXTENSION := .cpp .cxx
include $(BUILD_PACKAGE) 表示编译apk
LOCAL_SRC_FILES := $(call , src) 包含local_path目录下的所有java文件
LOCAL_PACKAGE_NAME := Launcher3 标识apk的名字
其他函数宏
all-subdir-makefiles: 返回当前目录的所有子目录下的Android.mk文件列表。
this-makefile: 返回当前Android.mk文件的路径
parent-makefile: 返回当前构建文件的父Android.mk文件的路径。
all-java-files-under:
LOCAL_SRC_FILES := $(call all-java-files-under, src)
这里是指明需要编译的文件,也就是说明源码的文件列表。这里编译所有src目录下的java源码。
定义新变量
新变量最好以MY_开头, 如
MY_SRC_FILES := file.c
LOCAL_SRC_FILES := $(MY_SRC_FILES)
条件操作
ifeq ($(TARGET_ARCH), arm)
LOCAL_SRC_FILES := armonly.c
else
LOCAL_SRC_FILES := generic.c
endif