对于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里面
谢谢大家的观看,更多精彩技术博客,会不断的更新,请大家访问,
刘德利CSDN博客, http://blog.csdn.net/u011967006