在上一篇博客,Android-XML格式描述,介绍来XML在Android中的格式;

Android-系统解析AndroidManifest,是分析Android系统是如何去解析AndroidManifest.xml里面的xml数据的,可以肯定的是Android系统是使用Android-Xml,PullParser,解析,这种方式解析的;

对于Android APP应用程序开发来说,AndroidManifest.xml里面所配置的内容,至关重要,在安装.apk文件的时候,Android操作系统是如何解析AndroidManifest.xml里面内容的呢:

AndroidManifest.xml 内容结构:

包相关信息(包名,版本code,版本name,等等) 
应用相关信息(应用图标,应用名称,等等) 
Activity相关信息(Activity名称,等等)


模拟Android系统的安装程序,安装过程中对AndroidManifest的对象封装:

/**
* Android操作系统是如何去解析分解AndroidManifest
*/
private void androidOSDecompositionAndroidManifest() {
try {
/**
* 当应用程序安装的时候,Android操作系统的安装程序,就会去解析AndroidManifest.xml文件里面的信息
* Android操作系统的安装程序,该如何去解析呢,肯定是以面向对象的思想方式去封装。
*/ /**
* Android操作系统的安装程序在安装之前,就已经对所有应用进行了包管理:
*/
// package管理:管理Android里面所有的应用
PackageManager pm = getPackageManager(); // 首先获取已经安装OK的应用程序的package包,它把包的信息进行了对象实体的封装PackageInfo
List<PackageInfo> packageInfos = pm.getInstalledPackages(0); // 指定包名,获取包信息
PackageInfo packageInfo = pm.getPackageInfo("com.liudeli.day3.android_manifest", 0);
// 得到包名
String packageName = packageInfo.packageName;
// 得到版本号信息
int versionCode = packageInfo.versionCode;
String versionName = packageInfo.versionName; // 在包的里面,有applicationInfo,获取应用信息
ApplicationInfo applicationInfo = packageInfo.applicationInfo;
// 获取应用图标
Drawable icon = applicationInfo.loadIcon(pm);
// 获取应用名称
CharSequence label = applicationInfo.loadLabel(pm); // 我们从表面上看,以为ApplicationInfo 里面有Activity信息,其实不是这样的
// Activity信息是在packageInfo里面
ActivityInfo[] activityInfos = packageInfo.activities;
ActivityInfo activityInfo = activityInfos[0];
// 得到Activity的名字
String name = activityInfo.name; } catch (Exception e) {
e.printStackTrace();
}
}

AndroidManifest 里面package的配置: 

模拟Android系统安装程序的package对象封装: 

AndroidManifest 里面application的配置: 

模拟Android系统安装程序的application对象封装: 

AndroidManifest 里面activity的配置: 

模拟Android系统安装程序的activity对象封装:

我们从表面上看,以为ApplicationInfo 里面有Activity信息,其实不是这样的 
Activity信息是在packageInfo里面 

Android-系统解析AndroidManifest的更多相关文章

  1. Android源代码解析之(十三)--&gt;apk安装流程

    转载请标明出处:一片枫叶的专栏 上一篇文章中给大家分析了一下android系统启动之后调用PackageManagerService服务并解析系统特定文件夹.解析apk文件并安装的过程,这个安装过程实 ...

  2. Android系统init进程启动及init.rc全解析

    转:https://blog.csdn.net/zhonglunshun/article/details/78615980 服务启动机制system/core/init/init.c文件main函数中 ...

  3. Android系统Recovery工作原理之使用update.zip升级过程分析(八)---解析并执行升级脚本updater-script【转】

    本文转载自:http://blog.csdn.net/mu0206mu/article/details/7465551  Android系统Recovery工作原理之使用update.zip升级过程分 ...

  4. Android View系统解析(下)

    转载请注明出处:http://blog.csdn.net/singwhatiwanna/article/details/38426471(来自singwhatiwanna的csdn博客) Androi ...

  5. Android核心服务解析篇(三)——Android系统的启动

    从大的方面来说.Android系统的启动能够分为两个部分:第一部分是Linux核心的启动,第二部分是Android系统的启动. 第一部分主要包含系统引导,核心和驱动程序等,因为它们不属于本篇要讲的内容 ...

  6. android系统架构解析

    以上是我在这个课题下的一些参考博客或者网页链接.里面有对于android架构的一些较好的分析理解,接下来是楼主在阅读后自己的一些整理. Android采用层次化系统架构,官方公布的标准架构如下图所示. ...

  7. 深入浅出 - Android系统移植与平台开发(六)- 为Android启动加速

    作者:唐老师,华清远见嵌入式学院讲师. Android的启动速度一直以来是他的诟病,虽然现在Android设备的硬件速度越来越快,但是随着新 版本的出现,其启动速度一直都比较慢,当然,作为程序员,我们 ...

  8. Android系统在新进程中启动自定义服务过程(startService)的原理分析

    在编写Android应用程序时,我们一般将一些计算型的逻辑放在一个独立的进程来处理,这样主进程仍然可以流畅地响应界面事件,提高用户体验.Android系统为我们提供了一个Service类,我们可以实现 ...

  9. android系统如何自适应屏幕大小

    1.屏幕相关概念 1.1分辨率 是指屏幕上有横竖各有多少个像素 1.2屏幕尺寸 指的是手机实际的物理尺寸,比如常用的2.8英寸,3.2英寸,3.5英寸,3.7英寸 android将屏幕大小分为四个级别 ...

  10. Android系统默认Home应用程序(Launcher)的启动过程源码分析

    在前面一篇文章中,我们分析了Android系统在启动时安装应用程序的过程,这些应用程序安装好之后,还须要有一个Home应用程序来负责把它们在桌面上展示出来,在Android系统中,这个默认的Home应 ...

随机推荐

  1. Containerpilot 配置文件 之 Telemetry

    如果提供telemetry选项,ContainerPilot将公开可用于刮擦性能telemetry的Prometheus HTTP客户端界面. telemetry接口被公告为consul服务. tel ...

  2. Ubuntu下面网络固定ip

    https://jingyan.baidu.com/article/e5c39bf5bbe0e739d7603396.html

  3. SpringMVC 文件上传 MultipartFile

    本的SpringMVC的搭建在我的上一篇文章里已经写过了,这篇文章主要说明一下如何使用SpringMVC进行表单上的文件上传以及多个文件同时上传的步骤 SpringMVC 基础教程 框架分析:http ...

  4. clear(), evict(), flush()三种方法的用法实例

    先贴代码: @Before public void init() { System.out.println("Test开始之前执行"); Configuration configu ...

  5. tf.get_variable()

    1. tf.Variable()W = tf.Variable(<initial-value>, name=<optional-name>)1用于生成一个初始值为initial ...

  6. java非常好用的读取文件的流的代码

    学过java的都知道java中有非常多的读取文件流的操作.这个要回到javase的io操作了.io流说实话,初学者学的肯定会非常混乱,那么多流,什么输入流,输出流,什么文件流,什么字节流,等等.我在这 ...

  7. Metropolis(多源点最短路)

    Metropolis https://www.nowcoder.com/acm/contest/203/I 题目描述 魔方国有n座城市,编号为.城市之间通过n-1条无向道路连接,形成一个树形结构. 在 ...

  8. RedisUtil工具类

    转载:http://blog.csdn.net/liuxiao723846/article/details/50401406 1.使用了jedis客户端,对redis进行了封装,包括: 1)使用了re ...

  9. PAT 1062 最简分数(20)(代码+思路)

    1062 最简分数(20 分) 一个分数一般写成两个整数相除的形式:N/M,其中 M 不为0.最简分数是指分子和分母没有公约数的分数表示形式. 现给定两个不相等的正分数 N​1​​/M​1​​ 和 N ...

  10. OpenGLES.APPLE_texture_format_BGRA8888

    OpenGL ES的扩展: APPLE_texture_format_BGRA8888 http://www.khronos.org/registry/gles/extensions/APPLE/AP ...