解析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_PATH:= $(call my-dir)  include $(CLEAR_VARS) LOCAL_STATIC_JAVA_LIBRARIES := xsocket jacks...
  • mo_hen_
  • mo_hen_
  • 2016年10月18日 18:26
  • 3770

AndroidNDK初步开发之如何调用jni生成.so文件、Android.mk配置及第三方so不被删除的方法(二)

这节将要说明AndroidNDK开发中如何调用JNI生成.so文件的,还有Android.mk的配置问题和如何在使用eclipse将项目进行build时能够导出第三方的.so文件而不被删除的方法。...
  • ruxishanshi
  • ruxishanshi
  • 2016年01月15日 18:41
  • 1175

android使用mk文件的进阶

最近在搞android上的rtmp协议的播放,将ffmpeg编译成几个.so动态链接库之后(后面再说如何在android下编译ffmpeg源代码),就可以引用头文件并直接写自己的jni接口了,做完这些...
  • zcl1359205840
  • zcl1359205840
  • 2016年08月18日 17:45
  • 1127

Android.mk 编写规则简介

一个Android.mk file用来向编译系统描述你的源代码。具体来说:该文件是GNU Makefile的一小部分,会被编译系统解析一次或多次。你可以在每一个Android.mk file中定义一个...
  • liukun321
  • liukun321
  • 2013年04月25日 10:24
  • 5286

Android.mk的用法和基础

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

Android.mk语法解释

大家在编写Android的Native代码时,经常会接触到一个叫做Android.mk的文件。 虽然编译的时候都用到的是make,但是这个Android.mk文件里的语法还跟一般的make文件语法不...
  • Roland_Sun
  • Roland_Sun
  • 2014年06月13日 11:09
  • 2546

Android.mk文件解析

ifeq ($(MTK_FM_SUPPORT),yes) LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE_TAGS := ...
  • lyp19910608
  • lyp19910608
  • 2016年01月21日 21:38
  • 306

Android.mk文件的语法解析

这是RDA8810(Android4.2.2)的Browser模块的Android.mk文件 LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) ...
  • silence_cdsn
  • silence_cdsn
  • 2014年11月27日 14:29
  • 3967

Android.mk文件解析(一)

贴代码: test.h int adds(int a,int b); int subs(int a,int b); test.c #include "test.h" ...
  • u014552288
  • u014552288
  • 2014年06月23日 17:54
  • 319

Android.mk文件解析

一、一个简单的Android.mk文件如下: LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := native-i...
  • woliuyunyicai
  • woliuyunyicai
  • 2015年06月10日 15:43
  • 1305
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:解析Android.mk文件
举报原因:
原因补充:

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