zoukankan      html  css  js  c++  java
  • 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里面 
    这里写图片描述

  • 相关阅读:
    洛谷P3128 [USACO15DEC]Max Flow P 题解 树上差分(点差分)
    数列分块解决区间更新+区间最值问题
    ThinkPad P1 Gen3 4K 显示器出现间歇闪黑屏情况解决
    Qt自定义弹出式菜单(Qt自定义弹窗)
    软件产品易用性评价评估标准
    vue用echarts实现中国地图和世界地图
    知了业务逻辑梳理
    string.gfind string.gmatch
    无法定位程序输入点在 XXXX上...
    [Lua]c解析lua 嵌套table
  • 原文地址:https://www.cnblogs.com/android-deli/p/10172068.html
Copyright © 2011-2022 走看看