赞
踩
目录
LOCAL_SRC_FILES:= helloworld.c
include$(BUILD_SHARED_LIBRARY)
ifeq ($(strip $(SYSTEMUI_SUPPORT)),yes)
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
LOCAL_PRIVILEGED_MODULE := true
Android.mk file用来向编译系统描述你的源代码。具体来说:-该文件是GNU Makefile的一小部分,会被编译系统解析一次或更多次的build系统。这个文件的语法允许把你的源代码组织成模块,如:静态库、共享库(将被安装/复制到您的应用软件包);我们可以在每一个Android.mk file中定义一个或多个模块,也可以在几个模块中使用同一个源代码文件。
下面这是一个生成共享库的mk文件实例。
LOCAL_PATH:= $(call my-dir)
include$(CLEAR_VARS)
LOCAL_MODULE:=helloworld
LOCAL_SRC_FILES:= helloworld.c
include$(BUILD_SHARED_LIBRARY)
我们来解释一下这几行代码:
Android.mk file必须定义好LOCAL_PATH变量。它用于在开发树中查找源文件。函数’my-dir’, 由编译系统提供,用于返回当前路径(即包含Android.mk file文件的目录)。
CLEAR_VARS由编译系统提供,指定让GNU MAKEFILE为你清除许多LOCAL_XXX变量(例如 LOCAL_MODULE, LOCAL_SRC_FILES,LOCAL_STATIC_LIBRARIES, 等等...),
除LOCAL_PATH 。这是必要的,因为所有的编译控制文件都在同一个GNU MAKE执行环境中,所有的变量都是全局的。
LOCAL_MODULE变量是必须定义的,它是你在Android.mk文件中描述的每个模块的标识。它必须是唯一的,而且不包含任何空格。注意编译系统会自动产生合适的前缀和后缀,例如一个被命名为'foo'的共享库模块,将会生成'libfoo.so'文件。
LOCAL_SRC_FILES变量包含将要编译打包进模块中的源文件列表。
需要编译成什么模块类型,BUILD_SHARED_LIBRARY是编译系统提供的变量,它表示的是生成一个动态库;它指向一个GNU Makefile脚本(应该就是在build/core目录下的shared_library.mk)。
- LOCAL_PATH := $(call my-dir)
- ifeq ($(strip $(SYSTEMUI_SUPPORT)),yes)
- include $(CLEAR_VARS)
- LOCAL_MODULE_TAGS := optional
- LOCAL_MODULE_CLASS := APPS
- LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
- LOCAL_CERTIFICATE := platform
- LOCAL_MODULE := SystemUI
- ifeq ($(TARGET_BUILD_VARIANT),user)
- LOCAL_SRC_FILES := $(LOCAL_MODULE)-release.apk
- else
- LOCAL_SRC_FILES := $(LOCAL_MODULE)-debug.apk
- endif
- LOCAL_MULTILIB := both
- LOCAL_PRIVILEGED_MODULE := true
- include $(BUILD_PREBUILT)
- endif
接着分析下新增的部分变量:
ifneq : 判断语句,用于比较两个参数,如果两个参数不等,则该语句通过。
- # 如果a和b不相等,则do something
- ifneq ($(a), $(b))
- # do something
- endif
这里是判断是否需要继续执行;
LOCAL_MODULE_TAGS,表示模块在什么版本中编译,optional 是模块在所有版本下都编译。
LOCAL_MODULE_CLASS 定义模块的分类。根据分类,生成的模块文件会安装到目标系统相应的目录下。例如:APPS:安装到/system/app下;SHARED_LIBRARIES:安装到/system/lib下;EXECUTABLES:安装到/system/bin下;ETC:安装到/system/etc下;
LOCAL_MODULE_SUFFIX 指定当前模块的后缀。一旦指定,系统在产生目标文件时,会以模块名加后缀来创建目标文件。这里是指定为apk。
LOCAL_CERTIFICATE 签名认证,platform表示使用平台签名文件签名。
指定编译目标为 32位 或 64位,它的值可以是32,64,both,表示可以编译的apk可以运行在32位、64位,或者32&64位硬件平台。
LOCAL_PRIVILEGED_MODULE 与编译、安装、权限管理等几个方面都有关系,不设置或者设置为false,安装位置为system/app;为true,安装位置为system/priv-app。
最后感谢您抽出宝贵的时间阅读本文,如有错误的地方欢迎提出一起讨论!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。