Android.mk在android的系统开发中毫无疑问是很重要的,它的作用比较强大,可以将c/c++代码编译成可执行程序,动态库,静态库,当然也可以将Java代码编译成二进制代码,jar包,apk等等,一下就列举几个例子来说明是如何使用的:
1,编写方法: 抄模板,个人不建议默写,android源码中的模板遍地都是,所以不用担心不会写
2,Android.mk的写法实际是基于Makefile的,所以基本的规则还是不能有悖于Makfile,Makefile的一个规则是:
目标 :依赖
编译规则 #注意规则前面有一个tab
3,简单的模板:hardware/ril/rild/Android.mk
#获取Androd.mk所在路径
LOCAL_PATH:= $(call my-dir)
#清空以LOCAL_xxx的变量, 除了LOCAL_PATH
include $(CLEAR_VARS)
#指定源文件
LOCAL_SRC_FILES:= \
rild.c
#指定目标文件
LOCAL_MODULE:= rild
#编译规则
include $(BUILD_EXECUTABLE)
-------------------------------------------------------------------
c/c++代码编译成elf可执行程序:
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES:= \
hello.c
# optional表示在任何模式下都会编译
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE:= hello_elf
include $(BUILD_EXECUTABLE)
-----------------------------------------------------------------
编译成动态库
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES:= myled_jni.cpp
LOCAL_SHARED_LIBRARIES := \
libutils
LOCAL_MODULE:=libled_jni
include $(BUILD_SHARED_LIBRARY)
-----------------------------------------------------------------------------------------------------------------------------------
预编译: 表示拷贝
prebuilt/android-arm/gdbserver$ vim Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES := ADV7123.pdf
LOCAL_MODULE := ADV7123.pdf
#指定目标文件安装路径
LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)
LOCAL_MODULE_CLASS := ETC
LOCAL_MODULE_TAGS := optional
#预编译方式
include $(BUILD_PREBUILT)