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) 【近期文章推荐】 |