• 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

  • 相关阅读:
    [Error]错误 C2660: Gdiplus::GdiplusBase::operator new: 函数不带三个参数
    opengl多线程的问题
    去掉CFormView的滚动条
    DevIL库使用时图片翻转的问题
    让notepad++正确显示actionscript文件语法高亮
    [Error]world geometry is not supported by the generic scenemanager
    3d Max 9的"正在验证许可证"问题的解决
    CSizingControlBar Error C2440: “static_cast”: 无法从“UINT (__thiscall CSizingControlBarG::* )(CPoint)”转换为>>>
    MFC下的OpenGL
    酷!不用外挂,Win7资源监视器查看QQ好友IP
  • 原文地址:https://www.cnblogs.com/android-deli/p/10322161.html
Copyright © 2020-2023  润新知