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里面 
    这里写图片描述

  • 相关阅读:
    Python3 collections模块的使用
    基于python的分治法和例题
    docker容器间通信 (共用宿主机)
    HTML之form表单ENCTYPE属性解析
    搭建基于码云gitee平台代码自动部署
    centos7下docker搭建nginx+phpfpm环境
    mysql主从配置
    centos7升级自带mariadb
    linux下安装docker
    centos7安装postgreSql11
  • 原文地址:https://www.cnblogs.com/android-deli/p/10172068.html
Copyright © 2011-2022 走看看