1. LOCAL_MODULE_TAGS解释:

控制此模块在什么情况下编译,一般为下面写法:

 

LOCAL_MODULE_TAGS:= optional

可选择的几个值:

user:指该模块只在user版本下才编译 

eng: 指该模块只在eng版本下才编译 

tests: 指该模块只在tests版本下才编译 

optional:指该模块在所有版本下都编译

 

2. include $(CLEAR_VARS)

 

许多名为LOCAL_XXX的变量(比如:LOCAL_MODULE,LOCAL_SRC_FILES,LOCAL_STATIC_LIBRARIES,,,),

但LOCAL_PATH是例外,它不会被清除。这些变量的清除是必须的,因为所有的控制文件是在单一的GNU make

执行环境中解析的,在这里所有的变量都是全局的。

 

3.LOCAL_PATH

   这个变量用来设置当前文件的路径。必须在Android.mk的开始处定义它,比如:

     

    LOCAL_PATH := $(call my-dir)

    

   这个变量不会被$(CLEAR_VARS)消除,所以每个Android.mk仅需一个定义(以防你在

   同一个文件里定义几个组件)。

 

4. LOCAL_MODULE := xxx

此mk文件生成的程序名称,包括动态库,静态库和可执行程序,如果为动态库,会生成libxxx.so文件

 

5. LOCAL_SRC_FILES := xxx.c

 

   生成目标程序/库需要的源文件(*.c, *.cpp,*.java)列表

6. include $(BUILD_SHARED_LIBRARY) 

   编译此模块为动态库

7. include $(BUILD_STATIC_LIBRARY) 

   生成静态库

8. include $(BUILD_EXECUTABLE)

   生成可执行程序

 

9. LOCAL_SHARED_LIBRARIES

    程序依赖的动态库列表,例如

    LOCAL_SHARED_LIBRARIES := \

libutils

10. LOCAL_STATIC_LIBRARIES

    程序依赖的静态库列表

11. LOCAL_CFLAGS += -Wall -Werror

     编译c文件的参数,如设置Wall,优化级别等编译器参数。

12. LOCAL_C_INCLUDES +=

    头文件列表

13. include $(BUILD_HOST_STATIC_LIBRARY)

生成宿主机静态库











android.mk 模板:







LOCAL_PATH:= $(call my-dir)







#源文件列表



common_SRC_FILES := \



xxx.cpp \



xxxx.cpp






#头文件列表



common_C_INCLUDES := \



xxx.h






#依赖的动态库列表



common_SHARED_LIBRARIES := \



xxx











include $(CLEAR_VARS)







LOCAL_SRC_FILES := $(common_SRC_FILES) #common_SRC_FILES 为变量,保存源文件列表



LOCAL_C_INCLUDES += $(common_C_INCLUDES) #头文件列表



LOCAL_SHARED_LIBRARIES += $(common_SHARED_LIBRARIES)



LOCAL_CFLAGS += -fvisibility=hidden #此处根据需要调整参数







LOCAL_MODULE:= xxx #生成的程序名







include $(BUILD_STATIC_LIBRARY) #此处有三个选择:可执行程序,动态库,静态库调,用上面提到的三个宏

谢绝转载。