Android-系統解析AndroidManifest


在上一篇博客,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里面 
這里寫圖片描述

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM