android编译系统makefile(Android.mk)写法android编译系统的makefile文件Android.mk写法如下(1)Android.mk文件首先需要指定LOCAL_PATH变量,用于查找源文件。由于一般情况下Android.mk和需要编译的源文件在同一目录下,所以定义成如下形式:LOCAL_PATH:=$(call my-dir)上面的语句的意思是将LOCAL_PATH变量定义成本文件所在目录路径。(2)Android.mk中可以定义多个编译模块,每个编译模块都是以include $(CLEAR_VARS)开始以include $(BUILD_XXX)结束。include $(CLEAR_VARS)CLEAR_VARS由编译系统提供,指定让GNU MAKEFILE为你清除除LOCAL_PATH以外的所有LOCAL_XXX变量,如LOCAL_MODULE,LOCAL_SRC_FILES,LOCAL_SHARED_LIBRARIES,LOCAL_STATIC_LIBRARIES等。include $(BUILD_STATIC_LIBRARY)表示编译成静态库include $(BUILD_SHARED_LIBRARY)表示编译成动态库。include $(BUILD_EXECUTABLE)表示编译成可执行程序(3)举例如下(frameworks/base/libs/audioflinger/Android.mk):LOCAL_PATH:= $(call my-dir)include $(CLEAR_VARS)  模块一ifeq ($(AUDIO_POLICY_TEST),true)  ENABLE_AUDIO_DUMP := trueendifLOCAL_SRC_FILES:= \    AudioHardwareGeneric.cpp \    AudioHardwareStub.cpp \    AudioHardwareInterface.cppifeq ($(ENABLE_AUDIO_DUMP),true)  LOCAL_SRC_FILES += AudioDumpInterface.cpp  LOCAL_CFLAGS += -DENABLE_AUDIO_DUMPendifLOCAL_SHARED_LIBRARIES := \    libcutils \    libutils \    libbinder \    libmedia \    libhardware_legacyifeq ($(strip $(BOARD_USES_GENERIC_AUDIO)),true)  LOCAL_CFLAGS += -DGENERIC_AUDIOendifLOCAL_MODULE:= libaudiointerfaceifeq ($(BOARD_HAVE_BLUETOOTH),true)  LOCAL_SRC_FILES += A2dpAudioInterface.cpp  LOCAL_SHARED_LIBRARIES += liba2dp  LOCAL_CFLAGS += -DWITH_BLUETOOTH -DWITH_A2DP  LOCAL_C_INCLUDES += $(call include-path-for, bluez)endifinclude $(BUILD_STATIC_LIBRARY)  模块一编译成静态库include $(CLEAR_VARS)  模块二LOCAL_SRC_FILES:=               \    AudioPolicyManagerBase.cppLOCAL_SHARED_LIBRARIES := \    libcutils \    libutils \    libmediaifeq ($(TARGET_SIMULATOR),true) LOCAL_LDLIBS += -ldlelse LOCAL_SHARED_LIBRARIES += libdlendifLOCAL_MODULE:= libaudiopolicybaseifeq ($(BOARD_HAVE_BLUETOOTH),true)  LOCAL_CFLAGS += -DWITH_A2DPendififeq ($(AUDIO_POLICY_TEST),true)  LOCAL_CFLAGS += -DAUDIO_POLICY_TESTendifinclude $(BUILD_STATIC_LIBRARY) 模块二编译成静态库include $(CLEAR_VARS) 模块三LOCAL_SRC_FILES:=               \    AudioFlinger.cpp            \    AudioMixer.cpp.arm          \    AudioResampler.cpp.arm      \    AudioResamplerSinc.cpp.arm  \    AudioResamplerCubic.cpp.arm \    AudioPolicyService.cppLOCAL_SHARED_LIBRARIES := \    libcutils \    libutils \    libbinder \    libmedia \    libhardware_legacyifeq ($(strip $(BOARD_USES_GENERIC_AUDIO)),true)  LOCAL_STATIC_LIBRARIES += libaudiointerface libaudiopolicybase  LOCAL_CFLAGS += -DGENERIC_AUDIOelse  LOCAL_SHARED_LIBRARIES += libaudio libaudiopolicyendififeq ($(TARGET_SIMULATOR),true) LOCAL_LDLIBS += -ldlelse LOCAL_SHARED_LIBRARIES += libdlendifLOCAL_MODULE:= libaudioflingerifeq ($(BOARD_HAVE_BLUETOOTH),true)  LOCAL_CFLAGS += -DWITH_BLUETOOTH -DWITH_A2DP  LOCAL_SHARED_LIBRARIES += liba2dpendififeq ($(AUDIO_POLICY_TEST),true)  LOCAL_CFLAGS += -DAUDIO_POLICY_TESTendififeq ($(TARGET_SIMULATOR),true)    ifeq ($(HOST_OS),linux)        LOCAL_LDLIBS += -lrt -lpthread    endifendififeq ($(BOARD_USE_LVMX),true)    LOCAL_CFLAGS += -DLVMX    LOCAL_C_INCLUDES += vendor/nxp    LOCAL_STATIC_LIBRARIES += liblifevibes    LOCAL_SHARED_LIBRARIES += liblvmxservice#    LOCAL_SHARED_LIBRARIES += liblvmxipcendifinclude $(BUILD_SHARED_LIBRARY) 模块三编译成动态库(4)编译一个应用程序(APK)  LOCAL_PATH := $(call my-dir)  include $(CLEAR_VARS)     # Build all java files in the java subdirectory-->直译(建立在java子目录中的所有Java文件)  LOCAL_SRC_FILES := $(call all-subdir-java-files)     # Name of the APK to build-->直译(创建APK的名称)  LOCAL_PACKAGE_NAME := LocalPackage     # Tell it to build an APK-->直译(告诉它来建立一个APK)  include $(BUILD_PACKAGE)(5)编译一个依赖于静态Java库(static.jar)的应用程序  LOCAL_PATH := $(call my-dir)  include $(CLEAR_VARS)     # List of static libraries to include in the package  LOCAL_STATIC_JAVA_LIBRARIES := static-library     # Build all java files in the java subdirectory  LOCAL_SRC_FILES := $(call all-subdir-java-files)     # Name of the APK to build  LOCAL_PACKAGE_NAME := LocalPackage     # Tell it to build an APK  include $(BUILD_PACKAGE)(6)编译一个需要用平台的key签名的应用程序  LOCAL_PATH := $(call my-dir)  include $(CLEAR_VARS)     # Build all java files in the java subdirectory  LOCAL_SRC_FILES := $(call all-subdir-java-files)     # Name of the APK to build  LOCAL_PACKAGE_NAME := LocalPackage     LOCAL_CERTIFICATE := platform     # Tell it to build an APK  include $(BUILD_PACKAGE)(7)编译一个需要用特定key前面的应用程序  LOCAL_PATH := $(call my-dir)  include $(CLEAR_VARS)     # Build all java files in the java subdirectory  LOCAL_SRC_FILES := $(call all-subdir-java-files)     # Name of the APK to build  LOCAL_PACKAGE_NAME := LocalPackage     LOCAL_CERTIFICATE := vendor/example/certs/app     # Tell it to build an APK  include $(BUILD_PACKAGE)(8)添加一个预编译应用程序  LOCAL_PATH := $(call my-dir)  include $(CLEAR_VARS)     # Module name should match apk name to be installed.  LOCAL_MODULE := LocalModuleName  LOCAL_SRC_FILES := $(LOCAL_MODULE).apk  LOCAL_MODULE_CLASS := APPS  LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)     include $(BUILD_PREBUILT)(9)添加一个静态JAVA库  LOCAL_PATH := $(call my-dir)  include $(CLEAR_VARS)     # Build all java files in the java subdirectory  LOCAL_SRC_FILES := $(call all-subdir-java-files)     # Any libraries that this library depends on  LOCAL_JAVA_LIBRARIES := android.test.runner     # The name of the jar file to create  LOCAL_MODULE := sample     # Build a static jar file.  include $(BUILD_STATIC_JAVA_LIBRARY)(10)Android.mk的编译模块中间可以定义相关的编译内容,也就是指定相关的变量如下:LOCAL_AAPT_FLAGSLOCAL_ACP_UNAVAILABLE LOCAL_ADDITIONAL_JAVA_DIR  LOCAL_AIDL_INCLUDES LOCAL_ALLOW_UNDEFINED_SYMBOLS LOCAL_ARM_MODE LOCAL_ASFLAGS LOCAL_ASSET_DIR LOCAL_ASSET_FILES 在Android.mk文件中编译应用程序(BUILD_PACKAGE)时设置此变量,表示资源文件,                  通常会定义成LOCAL_ASSET_FILES += $(call find-subdir-assets) LOCAL_BUILT_MODULE_STEM  LOCAL_C_INCLUDES 额外的C/C++编译头文件路径,用LOCAL_PATH表示本文件所在目录                 举例如下:                 LOCAL_C_INCLUDES += extlibs/zlib-1.2.3                 LOCAL_C_INCLUDES += $(LOCAL_PATH)/src  LOCAL_CC 指定C编译器LOCAL_CERTIFICATE  签名认证LOCAL_CFLAGS 为C/C++编译器定义额外的标志(如宏定义),举例:LOCAL_CFLAGS += -DLIBUTILS_NATIVE=1 LOCAL_CLASSPATH LOCAL_COMPRESS_MODULE_SYMBOLS LOCAL_COPY_HEADERS install应用程序时需要复制的头文件,必须同时定义LOCAL_COPY_HEADERS_TO LOCAL_COPY_HEADERS_TO install应用程序时复制头文件的目的路径LOCAL_CPP_EXTENSION 如果你的C++文件不是以cpp为文件后缀,你可以通过LOCAL_CPP_EXTENSION指定C++文件后缀名                     如:LOCAL_CPP_EXTENSION := .cc                    注意统一模块中C++文件后缀必须保持一致。LOCAL_CPPFLAGS 传递额外的标志给C++编译器,如:LOCAL_CPPFLAGS += -ffriend-injectionLOCAL_CXX 指定C++编译器 LOCAL_DX_FLAGSLOCAL_EXPORT_PACKAGE_RESOURCESLOCAL_FORCE_STATIC_EXECUTABLE 如果编译的可执行程序要进行静态链接(执行时不依赖于任何动态库),则设置LOCAL_FORCE_STATIC_EXECUTABLE:=true                               目前只有libc有静态库形式,这个只有文件系统中/sbin目录下的应用程序会用到,这个目录下的应用程序在运行时通常                              文件系统的其它部分还没有加载,所以必须进行静态链接。 LOCAL_GENERATED_SOURCES LOCAL_INSTRUMENTATION_FORLOCAL_INSTRUMENTATION_FOR_PACKAGE_NAMELOCAL_INTERMEDIATE_SOURCESLOCAL_INTERMEDIATE_TARGETSLOCAL_IS_HOST_MODULELOCAL_JAR_MANIFESTLOCAL_JARJAR_RULESLOCAL_JAVA_LIBRARIES 编译java应用程序和库的时候指定包含的java类库,目前有core和framework两种                     多数情况下定义成:LOCAL_JAVA_LIBRARIES := core framework                     注意LOCAL_JAVA_LIBRARIES不是必须的,而且编译APK时不允许定义(系统会自动添加) LOCAL_JAVA_RESOURCE_DIRS LOCAL_JAVA_RESOURCE_FILES LOCAL_JNI_SHARED_LIBRARIES LOCAL_LDFLAGS 传递额外的参数给连接器(务必注意参数的顺序) LOCAL_LDLIBS 为可执行程序或者库的编译指定额外的库,指定库以"-lxxx"格式,举例:             LOCAL_LDLIBS += -lcurses -lpthread             LOCAL_LDLIBS += -Wl,-z,origin  LOCAL_MODULE 生成的模块的名称(注意应用程序名称用LOCAL_PACKAGE_NAME而不是LOCAL_MODULE)LOCAL_MODULE_PATH 生成模块的路径 LOCAL_MODULE_STEM  LOCAL_MODULE_TAGS 生成模块的标记  LOCAL_NO_DEFAULT_COMPILER_FLAGS LOCAL_NO_EMMA_COMPILE LOCAL_NO_EMMA_INSTRUMENT LOCAL_NO_STANDARD_LIBRARIES LOCAL_OVERRIDES_PACKAGES LOCAL_PACKAGE_NAME APK应用程序的名称 LOCAL_POST_PROCESS_COMMAND LOCAL_PREBUILT_EXECUTABLES 预编译including $(BUILD_PREBUILT)或者$(BUILD_HOST_PREBUILT)时所用,指定需要复制的可执行文件LOCAL_PREBUILT_JAVA_LIBRARIES LOCAL_PREBUILT_LIBS 预编译including $(BUILD_PREBUILT)或者$(BUILD_HOST_PREBUILT)时所用, 指定需要复制的库.LOCAL_PREBUILT_OBJ_FILES LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES   LOCAL_PRELINK_MODULE 是否需要预连接处理(默认需要,用来做动态库优化)LOCAL_REQUIRED_MODULES 指定模块运行所依赖的模块(模块安装时将会同步安装它所依赖的模块) LOCAL_RESOURCE_DIRLOCAL_SDK_VERSIONLOCAL_SHARED_LIBRARIES 可链接动态库 LOCAL_SRC_FILES 编译源文件 LOCAL_STATIC_JAVA_LIBRARIES LOCAL_STATIC_LIBRARIES 可链接静态库  LOCAL_UNINSTALLABLE_MODULE LOCAL_UNSTRIPPED_PATH LOCAL_WHOLE_STATIC_LIBRARIES 指定模块所需要载入的完整静态库(这些精通库在链接是不允许链接器删除其中无用的代码) LOCAL_YACCFLAGS OVERRIDE_BUILT_MODULE_PATH
本文转自:<span style="font-family: Arial, Helvetica, sans-serif;">http://www.cnblogs.com/hesiming/archive/2011/03/15/1984444.html</span>

更多相关文章

  1. 在android机器上安装GCC 编译环境
  2. android反编译工具(ApkDec-Release-0.1)-正式版
  3. 使用 Eclipse PhoneGap 构建 Android(安卓)应用程序入门
  4. Android——TV真机调试apk(android:sharedUserId="android.uid.sy
  5. Android软件安全风险及规范
  6. 开发Android应用的时候遇到的问题
  7. Android(安卓)是什么
  8. Android——编译release版签名系统
  9. 详解Android核心模块及相关技术

随机推荐

  1. 编译android出现"too many open files"的
  2. OpenGL ES 画正方形
  3. android反射的应用
  4. Android下载文件保存到路径
  5. 可循环显示图像的Android(安卓)Gallery组
  6. android获取设备屏幕分辨率的方法
  7. android actionBar右上角 menu 显示三个
  8. Android使用Fragment嵌套Fragment的模式
  9. android PreferenceActivity 配置Activit
  10. Android中FTP上传、下载