解析Android.mk文件

原创 2015年07月09日 11:56:36

以Browser为例。

一般情况下,   Android.mk和需要编译的源文件放在同一目录下。

LOCAL_PATH 变量用于查找源文件, 宏函数my-dir由编译系统提供,用于返回当前路径。
LOCAL_PATH := $(call my-dir)      //将LOCAL_PATH 变量定义成本文件所在的目录

Android.mk中可以定义多个编译模块,每个编译模块都是以include $(CLEAR_VARS)开始,include $(BUILD_XXX)结束。

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)表示编译成可执行文件

include $(CLEAR_VARS)

LOCAL_PACKAGE_NAME := MBrowser2        //APK的名称
LOCAL_MODULE_TAGS := optional   

解析:LOCAL_MODULE_TAGS =user eng tests optional
user :指该模块只在user版本下才编译
eng:指该模块只在eng版本下才编译
tests :指该模块只在tests 版本下才编译
optional:指该模块在所有版本下都编译

LOCAL_CERTIFICATE := platform
LOCAL_PROGUARD_FLAG_FILES := proguard.flags
LOCAL_OVERRIDES_PACKAGES := Browser

LOCAL_CERTIFICATE 后面是签名文件的文件名,说明Browser.apk是一个需要platform key签名的apk。
(1)系统中所有使用android.uid.system作为共享UID的APK,都会首先在mannifest节点中增加android:sharedUserId="android.uid.system",然后在Android.mk中增加LOCAL_CERTIFICATE := platform
(2)系统中所有使用android.uid.shared作为共享UID的APK,都会首先在mannifest节点中增加android:sharedUserId="android.uid.shared",然后在Android.mk中增加LOCAL_CERTIFICATE := shared
(3)系统中所有使用android.uid.media作为共享UID的APK,都会首先在mannifest节点中增加android:sharedUserId="android.uid.media",然后在Android.mk中增加LOCAL_CERTIFICATE := media

LOCAL_PROGUARD_FLAG_FILES 在源码中进行混淆编译 也可以为null
LOCAL_OVERRIDES_PACKAGES  使其他的模块不参加编译,此处即使Browser不加入编译

LOCAL_SRC_FILES := \
    $(call all-java-files-under, src) \
    src/com/android/browser/EventLogTags.logtags

如果要包含的是java源码的话,可以调用all-java-files-under得到。(这种形式来包含LOCAL_PATH目录下的所有Java文件);
当涉及到C/C++时,LOCAL_SRC_FILES 变量就必须包含将要编译打包进模块中的C或 C++源代码文件。
在这里可以不用列出头文件和包含文件夹,因为编译系统将会自动为你找出依赖型的文件;仅仅列出直接传递给编译器的源代码文件就好。all-java-files-under宏的定义在build/core/definitions.mk中。

LOCAL_STATIC_JAVA_LIBRARIES := \
    android-common \
    guava \
    android-support-v13 \
    android-support-v4

LOCAL_STATIC_JAVA_LIBRARIES  依赖的静态jar包(jar包是使用include$(BUIDE_STATIC_JAVA_LIBRARY)生成的)。

LOCAL_JAVA_LIBRARIES := \
    android.policy \
    com.mstar.android

LOCAL_JAVA_LIBRARIES 依赖的共享jar包

LOCAL_JNI_SHARED_LIBRARIES := libbrowser2util_jni

LOCAL_JNI_SHARED_LIBRARIES 定义了要包含的so库文件的名字,如果程序没有采用jni,不需要LOCAL_JNI_SHARED_LIBRARIES ,这样在编译的时候,NDK自动会把这个libbrowser2util_jni打包进apk中。

LOCAL_EMMA_COVERAGE_FILTER := *,-com.android.common.*

# We need the sound recorder for the Media Capture API.
LOCAL_REQUIRED_MODULES := SoundRecorder libbrowser2util_jni

LOCAL_REQUIRED_MODULES 指定模块运行所依赖的模块(模块安装时将会同步安装它所依赖的模块)
SoundRecorder 表示该模块需要SoundRecorder模块,在系统编译的时候就会将SoundRecorder放入到system.img中,如果单独编译mm的话就不会关心SoundRecorder

include $(BUILD_PACKAGE)       //用来编译生成package/app下的apk

#========================================================================

include $(call all-makefiles-under,$(LOCAL_PATH))       //告诉编译器继续向目录深处递归的一种规定写法


相关文章推荐

关于android.mk中的LOCAL_OVERRIDES_PACKAGES 说明

关于android.mk中的LOCAL_OVERRIDES_PACKAGES需要说明一下,此变量可以使其他的模块不加入编译, 如: 源码中DeskClock的android.mk有 LOCAL_O...

生成android.mk文件

  • 2015年10月09日 11:00
  • 19KB
  • 下载

opus NDK 编译 Android.mk文件

  • 2014年11月29日 12:28
  • 5KB
  • 下载

android.mk文件解析

一个Android.mk file用来向编译系统描述你的源代码。具体来说:该文件是GNU Makefile的一小部分,会被编译系统解析一次或多次。你可以在每一个Android.mk file中定义一个...
  • lkx94
  • lkx94
  • 2016年02月18日 17:59
  • 162

Android.mk文件的语法解析

这是RDA8810(Android4.2.2)的Browser模块的Android.mk文件 LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) ...

Android.mk编译文件解析

一、Android.mk编译文件是用来向Android NDK编译系统描述你的C,C++源代码文件的。 简单的例子: --------------- 在描述语法细节之前,咱们...
  • nanaqx
  • nanaqx
  • 2015年06月16日 13:34
  • 231

Android.mk文件解析(一)

贴代码: test.h int adds(int a,int b); int subs(int a,int b); test.c #include "test.h" ...

Android.mk文件分析

  • 2016年02月18日 11:05
  • 70KB
  • 下载

Android中的Android.mk文件解析

在Android开发过程中,遇
  • ljtyzhr
  • ljtyzhr
  • 2014年10月09日 12:30
  • 499

Android下Android.mk文件解析

android.mk,makefile, linux
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:解析Android.mk文件
举报原因:
原因补充:

(最多只允许输入30个字)