首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > 移动开发 >

Makefile学习(九)

2012-08-14 
Makefile学习(9)最近忙啊,好久没有写博客了,都不知道如何写了,今天就随便写点,不要介意哈!我们就了解一下A

Makefile学习(9)

最近忙啊,好久没有写博客了,都不知道如何写了,今天就随便写点,不要介意哈!


我们就了解一下Android.mk文件中的内容啦!


LOCAL_PATH:= $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE_TAGS := optionalLOCAL_SRC_FILES := $(call all-java-files-under, src)LOCAL_STATIC_JAVA_LIBRARIES := com.android.phone.commonLOCAL_PACKAGE_NAME := ContactsLOCAL_CERTIFICATE := sharedLOCAL_PROGUARD_FLAGS := -include $(LOCAL_PATH)/proguard.flagsinclude $(BUILD_PACKAGE)# Use the folloing include to make our test apk.include $(call all-makefiles-under,$(LOCAL_PATH))

?

我们对以上代码解释一下:

1.? LOCAL_PATH := $(call my-dir)

作用:用于在查找源文件。其中“my-dir”是由编译系统提供的宏函数,用于返回当前的路径(即包含Android.mk的文件目录)。



2.? include $(CLEAR_VARS)

作用:清除许多LOCAL_XXX变量(例如:LOCAL_MODULE,LOCAL_SRC_FILES等等)。其中“CLEAR_VARS”是由编译系统提供的。我们可以在android的目录下的/build/core/config.mk文件中看到其定义,为CLEAR_VARS :=$(BUILD_SYSTEM)/clear_vars.mk。



3. LOCAL_MODULE_TAGS := optional

作用:指定该模块在哪个版本下编译。LOCAL_MODULE_TAGS :=user/ eng /tests/ optional

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

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

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

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

?

4. LOCAL_SRC_FILES := $(call all-java-files-under, src)

这是要编译的源代码文件列表。只要列出要传递给编译器的文件,因为编译系统会自动计算依赖。

all-java-files-under在definitions.mk中定义(在build/core中)

?

5. LOCAL_STATIC_JAVA_LIBRARIES := com.android.phone.common

作用:引入第三方jar包

语法:LOCAL_STATIC_JAVA_LIBRARIES :=library_name

其中library_name可以理解为一个命名空间

所以引入com.android.phone.common,这样就可以使用com.android.phone.common中的类文件了。

?

?

6. LOCAL_PACKAGE_NAME := Contacts

这个变量表示了这个包的名字,即这个文件最终生成的apk的名称

?

?

7.LOCAL_CERTIFICATE := shared

指定签名时以那种密钥签名。有platform、shared、media、testkey

?

8. LOCAL_PROGUARD_FLAGS := -include $(LOCAL_PATH)/proguard.flags

作用主要是压缩、优化、混淆类文件,具体的功能还不理解。

?

9. include $(BUILD_PACKAGE)

作用是将该目录下的模块编译成package(即apk文件),默认存在/system/app下。

如果是include $(BUILD_SHARED_LIBRARY),表示将目录下的文件编译为共享库文件(即so档),默认存在/system/lib下。

?


10. include $(call all-makefiles-under,$(LOCAL_PATH))

表示需要build该目录下的子目录的文件,这样编译系统就会在当前目录下的子目录寻找Android.mk来编译so库等其他程序。

?

?

就写到这了,其中有些也不是很了解。后续继续深入学习!!!!!

?

?

?

?

?


热点排行