广州海珠建网站,广告设计网课,wordpress删除漏洞,网页设计软件dw免费下载SystemConfig在哪里初始化 它声明在PackageManagerService类的静态方法main()中。在该方法中间定义Injector类对象时#xff0c;作为它的构造参数。它是调用的SystemConfig.getInstance()实现初始化#xff0c;之后能通过Injector类对象的getSystemConfig()得到SystemConfig类…SystemConfig在哪里初始化 它声明在PackageManagerService类的静态方法main()中。在该方法中间定义Injector类对象时作为它的构造参数。它是调用的SystemConfig.getInstance()实现初始化之后能通过Injector类对象的getSystemConfig()得到SystemConfig类对象。 SystemConfig类对象的初始化是在PackageManagerService的构造函数中调用的。
SystemConfig包含哪些内容 SystemConfig中的内容是读取的/system/etc/sysconfig、/system/etc/permissions、/vendor/etc/sysconfig、/vendor/etc/permissions、/odm/etc/sysconfig、/odm/etc/permissions、/oem/etc/sysconfig、/oem/etc/permissions、/product/etc/sysconfig、/product/etc/permissions、/system_ext/etc/sysconfig、/system_ext/etc/permissions目录下的.xml结尾的配置文件获取的还有/apex目录下的子目录的etc/permissions目录下的.xml结尾的配置文件如果设置了ro.boot.product.hardware.sku系统属性值还会读取/odm/etc/sysconfig/属性值 、/odm/etc/permissions/属性值 这两个对应目录下.xml结尾的配置文件的值。 它的内容很多都在它的成员变量中。
成员变量 mPermissions包含一些权限的相关信息主要是GID相关。 mSystemPermissions每个进程指定的权限 mSplitPermissions被分离权限的信息 mGlobalGids配置给所有包的全局组id mSharedLibraries库相关信息 mAvailableFeatures特色的相关信息 mUnavailableFeatures不可用的特色的相关信息 mAllowInPowerSaveExceptIdle允许在省电模式下运行的应用除去device idle模式 mAllowInPowerSave允许在省电模式下运行的应用 mAllowInDataUsageSave在数据流量节省模式下可以在后台运行的应用 mAllowUnthrottledLocation在没有节流器的情况下允许运行后台位置 mAllowIgnoreLocationSettings即使应用的位置设置被关闭也可以获取到位置。 mAllowImplicitBroadcasts隐式广播传递给APP在目标O。 mLinkedApps这些应用处理域名验证默认用他们的网站 mDefaultVrComponents默认VR模式监听者服务的组件。 mPackageComponentEnabledState包中组件类的默认enabled状态。 mBackupTransportWhitelist被允许的备份端口service组件。 mDisabledUntilUsedPreinstalledCarrierAssociatedApps被禁止的运营商的包直到SIM插入获取运营商特权。 mDisabledUntilUsedPreinstalledCarrierApps被禁止直到可以使用的运营商应用的列表。 mPrivAppPermissions私有APP权限 mVendorPrivAppPermissions私有APP权限是配置在/odm或者/oem目录中 mProductPrivAppPermissions私有APP权限是配置在/product目录中 mSystemExtPrivAppPermissions私有APP权限是配置在/system_ext目录中 mPrivAppDenyPermissions私有APP拒绝权限 mVendorPrivAppDenyPermissions私有APP拒绝权限是配置在/odm或者/oem目录中 mProductPrivAppDenyPermissions私有APP拒绝权限是配置在/product目录中 mSystemExtPrivAppDenyPermissions私有APP拒绝权限是配置在/system_ext目录中 mOemPermissionsOEM权限 mHiddenApiPackageWhitelist私有API的白名单应用包 mAllowedAssociations允许协作的应用。 mAppDataIsolationWhitelistedAppsAPP数据孤立白名单 mBugreportWhitelistedPackagesBug报告白名单 mPackageToUserTypeWhitelist应用可以安装的用户类型白名单 mPackageToUserTypeBlacklist应用可以安装的用户类型黑名单 mNamedActors系统预定义的唯一的命名的演员的名字和包名的映射 mOverlayConfigSignaturePackage覆盖配置签名的包 mRollbackWhitelistedPackages回退应用的白名单 mWhitelistedStagedInstallers缓存安装的包的白名单 mModulesInstallerPackageName模块安装者的包名 mAllowedVendorApexesapex包对应的安装者包
举例使用 拿权限配置相关信息来举例。 权限的相关信息是在PermissionManagerService中的PermissionRegistry类型成员变量mRegistry中mRegistry里面的信息主要来自配置文件/data/system/packages.xml文件。/data/system/packages.xml文件里permissions标签下有许多权限相关信息。
packages.xml文件权限相关截图 这里主要配置的权限名称、包名还有保护等级这些内容。是不包括上面提到的GID相关信息的。 系统是先读取的SystemConfig的相关文件获取信息然后将信息添加到mRegistry中。后面再读取的/data/system/packages.xml文件最后将两者合并得到对应权限信息。
先读取的SystemConfig的相关文件 在SystemConfig初始化时会读取相关文件这里以/system/etc/permissions/platform.xml文件为例得到权限信息。并且将它们放在SystemConfig对象的成员变量ArrayMapString, PermissionEntry类型mPermissions中。
packages.xml文件权限相关截图 mPermissions的值类型PermissionEntry有成员变量int[] gids它对应着截图中的group标签进程Uid组。这其中是字符类型最后会转化成整数类型。并且放入int[] gids。PermissionEntry还有一个成员变量boolean类型 perUser。也是通过 packages.xml文件配置的它会配置在permission标签中。 SystemConfig对象初始化完毕之后这些权限相关信息就在mPermissions中了。 PermissionManagerService在初始化时会想将SystemConfig对象的mPermissions中的权限信息加入PermissionManagerService类对象的成员变量mRegistry中。相关代码如下 // propagate permission configurationfinal ArrayMapString, SystemConfig.PermissionEntry permConfig SystemConfig.getInstance().getPermissions();synchronized (mLock) {for (int i0; ipermConfig.size(); i) {final SystemConfig.PermissionEntry perm permConfig.valueAt(i);Permission bp mRegistry.getPermission(perm.name);if (bp null) {bp new Permission(perm.name, android, Permission.TYPE_CONFIG);mRegistry.addPermission(bp);}if (perm.gids ! null) {bp.setGids(perm.gids, perm.perUser);}}}它会将mPermissions中的PermissionEntry类型转变成Permission类型并将类型设置为Permission.TYPE_CONFIG代表它是可以配置的。并且将gids和perUser设置到Permission对象中。Permission对象会添加到mRegistry中。 /data/system/packages.xml文件中的权限相关信息读取是在SystemConfig初始化之后。 /data/system/packages.xml的信息读取是在Settings对象的初始化中。它的相关信息读取之后会存出在Settings对象的成员变量LegacyPermissionSettings类型 mPermissions中确切地说是在mPermissions的成员变量ArrayMapString, LegacyPermission类型mPermissions中。 之后PermissionManagerService会调用readLegacyPermissions(NonNull LegacyPermissionSettings legacyPermissionSettings)将LegacyPermissionSettings类型 mPermissions中数据和SystemConfig中的权限信息合并。 private void readLegacyPermissions(NonNull LegacyPermissionSettings legacyPermissionSettings) {for (int readPermissionOrPermissionTree 0; readPermissionOrPermissionTree 2;readPermissionOrPermissionTree) {final ListLegacyPermission legacyPermissions readPermissionOrPermissionTree 0? legacyPermissionSettings.getPermissions(): legacyPermissionSettings.getPermissionTrees();synchronized (mLock) {final int legacyPermissionsSize legacyPermissions.size();for (int i 0; i legacyPermissionsSize; i) {final LegacyPermission legacyPermission legacyPermissions.get(i);final Permission permission new Permission(legacyPermission.getPermissionInfo(), legacyPermission.getType());if (readPermissionOrPermissionTree 0) {// Config permissions are currently read in PermissionManagerService// constructor. The old behavior was to add other attributes to the config// permission in LegacyPermission.read(), so equivalently we can add the// GIDs to the new permissions here, since config permissions created in// PermissionManagerService constructor get only their names and GIDs there.final Permission configPermission mRegistry.getPermission(permission.getName());if (configPermission ! null configPermission.getType() Permission.TYPE_CONFIG) {permission.setGids(configPermission.getRawGids(),configPermission.areGidsPerUser());}mRegistry.addPermission(permission);} else {mRegistry.addPermissionTree(permission);}}}}}可以看到循环2次还有权限树的相关处理权限树的相关信息也是来自/data/system/packages.xml文件。我们先说权限。参数legacyPermissionSettings.getPermissions()里面是从/data/system/packages.xml中读出来的权限信息而mRegistry目前是从/system/etc/permissions/platform.xml读出来的。所以接下来就是处理两者之间的信息合并。并且重新添加到mRegistry中这里是使用的addPermission方法mRegistry中存储的是类似Map相同名字的就直接覆盖了。
总结 从以上可知SystemConfig中的内容就如同它的名字一样是配置。它们最终是要添加到对应的相关数据中去。