http://blog.csdn.net/fzl8808/article/details/9294063
「Launcher2是什么?」
Launcher2是Anroid提供的桌面应用程序,官方提供的中文名叫“启动器”。
通过Launcher2,用户可以可视化的管理屏幕与应用程序。以我们比较熟悉的Windows为例,Launcher2的作用就相当于桌面和任务栏。
| | |
安装Launcher2之后,手机设置的画面 | Launcher2初次启动时的画面 | Launcher2默认主屏幕的排列布局 |
其中,在Intent.java中有一个叫“CATEGORY_HOME”的字符串,它就是用来判断应用程序是否属于一个桌面应用。
android-4.1.2_r1/frameworks/base/core/java/android/content/Intent.java
[java] view plaincopy
/**
* This is the home activity, that is the first activity that is displayed
* when the device boots.
*/
@SdkConstant(SdkConstantType.INTENT_CATEGORY)
public static final String CATEGORY_HOME = "android.intent.category.HOME";
也就是说,只有在AndroidManifest.xml文件中设置过了上述属性,Android系统才会识别其为桌面应用。
有关AndroidManifest.xml文件的作用与分析将在以后的文章中涉及。
「Android.mk文件的组成」
Makefile的相关说明和主要功能可以参照百度百科(Makefile_百度百科)。
在Android源代码中,Makefile的功能就体现在编译自动化上。通过它,可以将一系列的源代码整合,编译成需要的文件。
下面是Launcher2中Android.mk文件的全部内容:
[html] view plaincopy
#
# Copyright (C) 2008 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_STATIC_JAVA_LIBRARIES := android-common android-support-v13
LOCAL_SRC_FILES := $(call all-java-files-under, src) $(call all-renderscript-files-under, src)
LOCAL_PACKAGE_NAME := Launcher2
LOCAL_CERTIFICATE := shared
LOCAL_OVERRIDES_PACKAGES := Home
LOCAL_PROGUARD_FLAG_FILES := proguard.flags
include $(BUILD_PACKAGE)
include $(call all-makefiles-under,$(LOCAL_PATH))
对上述文件中出现的定义语句,下面一一进行讲解。
LOCAL_PATH := $(call my-dir)
Makefile在执行的时候,需要指定相应的编译路径。
作用:将本Makefile所在的路径作为编译路径。
include $(CLEAR_VARS)
这是一个开始标记,与include $(BUILD_PACKAGE)匹配。Android系统允许一个Android.mk文件中编译多个模块,模块的起始是include $(CLEAR_VARS),模块的结尾是include $(BUILD_PACKAGE)。其中,BUILD_PACKAGE只是其中的一种类型,用于编译应用程序。
作用:清除LOCAL_PATH之外的所有变量的定义。
LOCAL_MODULE_TAGS := optional
因为Android系统在编译的时候,可以指定不同的形式进行编译。所以也可以对模块进行设置,控制其编译的时机。
作用:设置模块什么时候允许编译。
其中,可以设置的类型有以下几种:
user:指该只在user版本下才编译
eng: 指该模块只在eng版本下才编译
tests: 指该模块只在tests版本下才编译
optional:指该模块在所有版本下都编译
LOCAL_STATIC_JAVA_LIBRARIES := android-common android-support-v13
作用:指定本模块如果编译必须具备的静态java库(以*.jar存在)。通常在本应用中引用了第三方API的时候,会将其做此定义。
LOCAL_SRC_FILES := $(call all-java-files-under, src) $(call all-renderscript-files-under, src)
作用:指定应用的代码文件。其中需要说明的是$(call all-java-files-under, src)和$(call all-renderscript-files-under, src)这两个命令。
$(call all-java-files-under, src):返回src文件夹下的所有java文件
$(call all-renderscript-files-under, src):返回src文件夹下的所有RenderScript文件(点击打开链接)
除此之外,在需要的时候,还可以通过定义LOCAL_RES_FILES来指定应用的资源文件。
LOCAL_PACKAGE_NAME := Launcher2
作用:指定本模块编译后生成的文件的名称。
这是指定的文件名称可以与本工程的文件夹名称不同,如:LOCAL_PACKAGE_NAME := HomeApp 也是可以的。
LOCAL_CERTIFICATE := shared
作用:指定本模块签名的类型。shared是home、contacts相关的签名。
有关签名的类型可以参照该文章(Android权限之sharedUserId和签名 )。
LOCAL_OVERRIDES_PACKAGES := Home
作用:指定本应用覆盖的其他应用。当你不希望这两个应用并存的时候,可以使用。
LOCAL_PROGUARD_FLAG_FILES := proguard.flags
作用:指定编译中不需要混淆的方法或变量(proguard.flags)。
以上就是Launcher2中出现的Makefile的用法,在此之外,还有许多在本应用中没有出现的定义方法。
在其他应用中,需要用定义什么变量、设置什么值,就是根据具体应用具体分析了。
总之,MK文件的作用就是实现编译的自动化,所有的定义都是为了编译的正常进行。只要了解了这一点,MK文件的编写也就不在话下了。