现在的位置: 首页 > 移动开发 > 正文

Android4.1标准桌面应用(Launcher2)分析之Android.mk

2019年10月10日 移动开发 ⁄ 共 3289字 ⁄ 字号 评论关闭

在接下来几篇文章里,我将针对Android4.1中的Launcher2应用进行解析。对应用中涉及到的相关技术点进行分析整理。

「Launcher2是什么?」

Launcher2是Anroid提供的桌面应用程序,官方提供的中文名叫“启动器”。

通过Launcher2,用户可以可视化的管理屏幕与应用程序。以我们比较熟悉的Windows为例,Launcher2的作用就相当于桌面和任务栏。

安装Launcher2之后,手机设置的画面 Launcher2初次启动时的画面 Launcher2默认主屏幕的排列布局

Android系统中,根据应用的不同作用,同时也为了方便对应用的管理,在Intent中将应用的种类做了区分定义。

其中,在Intent.java中有一个叫“CATEGORY_HOME”的字符串,它就是用来判断应用程序是否属于一个桌面应用。

android-4.1.2_r1/frameworks/base/core/java/android/content/Intent.java

    /**
     * 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文件的全部内容:

#
# 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文件的编写也就不在话下了。

抱歉!评论已关闭.