在上一篇博客,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. https://developer.mozilla.org/

    Document/querySelector      https://developer.mozilla.org/zh-CN/docs/Web/API/Document/querySelector

  2. Linux查看内存使用情况

    输入:top PID:进程的ID USER:进程所有 PR:进程的优先级别,越小越优先被执 NInice: VIRT:进程占用的虚拟内 RES:进程占用的物理内 SHR:进程使用的共享内 S:进程的状 ...

  3. sublimetext 2 编译文件带input时 提示 EOFError: EOF when reading a line

    昨天在网下下载了个什么sublimetxt 2 的破解版,然后让我折腾了半天,没错 ,就是因为这个 EOFError: EOF when reading a line错误让我搞的半死.怨自己,贪图中文 ...

  4. 解决SpringBoot中webScocket不能注入bean的问题

    最近在做websocket聊天,但是遇到一个问题,就是在websocket的服务中要调用Service层的东西.首先我想到的是通过@Autowire注解来实现bean的注入.但是进过测试发现,注入的b ...

  5. 未能加载文件或程序集“AjaxControlToolkit”或它的某一个依赖项

    对于这个问题,网上的解答都大同小异,最多的就是Bin文件夹下没有dll文件,引用路径问题.但我碰到的问题偏偏不是这个,而是没有一个人给出方法的问题.其实问题很简单,也很低级:IIS上发布网站的时候把整 ...

  6. 【Python基础教程第2版】——第一讲:基础知识

    1.长字符串:(用三引号如'''或者"""来引起来) >>> print """This is a very log st ...

  7. PAT L2-005 集合相似度(模拟集合set)

    给定两个整数集合,它们的相似度定义为:Nc/Nt*100%.其中Nc是两个集合都有的不相等整数的个数,Nt是两个集合一共有的不相等整数的个数.你的任务就是计算任意一对给定集合的相似度. 输入格式: 输 ...

  8. [leetcode]689. Maximum Sum of 3 Non-Overlapping Subarrays三个非重叠子数组的最大和

    In a given array nums of positive integers, find three non-overlapping subarrays with maximum sum. E ...

  9. 动态加载JS,并执行回调函数

    有些时候我们需要动态的加载一些JS,并在JS加载完成后执行一些回调函数. var loadscript = { $$: function (id) { return document.getEleme ...

  10. adf 笔记

    1>jsf在bean中如何获取url参数,注意bean的范围,如果存在分页,范围不能设置为request,否则第二次加载的时候参数会为空. 最小设置为view,在当前页面中一直有效. 方法一:F ...