• Android 系统解析AndroidManifest


    对于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

  • 相关阅读:
    页面跳转
    基于MCP2515的Linux CAN总线驱动程序设计(三)
    基于MCP2515的Linux CAN总线驱动程序设计(二)
    基于MCP2515的Linux CAN总线驱动程序设计(一)
    任意ASCII码格式信息的huffman tree压缩(编码)和解压(译码)
    转:Linux环境下段错误的产生原因及调试方法小结
    转:C语言中volatile关键字的作用 专家博客
    处理字节对齐
    转: sizeof,总结
    sizeof()用法汇总
  • 原文地址:https://www.cnblogs.com/android-deli/p/10322161.html
Copyright © 2020-2023  润新知