当前位置:   article > 正文

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

launcher2 2.4.1

在接下来几篇文章里,我将针对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

  1. /**
  2. * This is the home activity, that is the first activity that is displayed
  3. * when the device boots.
  4. */
  5. @SdkConstant(SdkConstantType.INTENT_CATEGORY)
  6. public static final String CATEGORY_HOME = "android.intent.category.HOME";

也就是说,只有在AndroidManifest.xml文件中设置过了上述属性,Android系统才会识别其为桌面应用。

有关AndroidManifest.xml文件的作用与分析将在以后的文章中涉及。


「Android.mk文件的组成」

Makefile的相关说明和主要功能可以参照百度百科(Makefile_百度百科)。

在Android源代码中,Makefile的功能就体现在编译自动化上。通过它,可以将一系列的源代码整合,编译成需要的文件。

下面是Launcher2中Android.mk文件的全部内容:

  1. #
  2. # Copyright (C) 2008 The Android Open Source Project
  3. #
  4. # Licensed under the Apache License, Version 2.0 (the "License");
  5. # you may not use this file except in compliance with the License.
  6. # You may obtain a copy of the License at
  7. #
  8. # http://www.apache.org/licenses/LICENSE-2.0
  9. #
  10. # Unless required by applicable law or agreed to in writing, software
  11. # distributed under the License is distributed on an "AS IS" BASIS,
  12. # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. # See the License for the specific language governing permissions and
  14. # limitations under the License.
  15. #
  16. LOCAL_PATH := $(call my-dir)
  17. include $(CLEAR_VARS)
  18. LOCAL_MODULE_TAGS := optional
  19. LOCAL_STATIC_JAVA_LIBRARIES := android-common android-support-v13
  20. LOCAL_SRC_FILES := $(call all-java-files-under, src) $(call all-renderscript-files-under, src)
  21. LOCAL_PACKAGE_NAME := Launcher2
  22. LOCAL_CERTIFICATE := shared
  23. LOCAL_OVERRIDES_PACKAGES := Home
  24. LOCAL_PROGUARD_FLAG_FILES := proguard.flags
  25. include $(BUILD_PACKAGE)
  26. 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文件的编写也就不在话下了。


声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/221624?site
推荐阅读
相关标签
  

闽ICP备14008679号