在上一篇博客,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里面 

