当前位置: 首页 > news >正文

传扬互动网站建设公司wordpress无法选择数据库

传扬互动网站建设公司,wordpress无法选择数据库,建设网站必须要服务器,一地址和二地址文章目录 前言一、PMS 启动流程二、APK 安装流程三、APK 卸载流程四、权限管理静态权限动态权限 五、 数据存储与一致性六、 PMS 的安全性策略1、权限检查2、签名认证3、动态权限管理4、应用安装验证5、保护系统目录 七、PMS 调试方法总结 前言 PackageManagerService&#xf…

文章目录

  • 前言
  • 一、PMS 启动流程
  • 二、APK 安装流程
  • 三、APK 卸载流程
  • 四、权限管理
    • 静态权限
    • 动态权限
  • 五、 数据存储与一致性
  • 六、 PMS 的安全性策略
    • 1、权限检查
    • 2、签名认证
    • 3、动态权限管理
    • 4、应用安装验证
    • 5、保护系统目录
  • 七、PMS 调试方法
  • 总结


前言

PackageManagerService(简称 PMS)是 Android 系统中的核心服务之一,负责应用的安装、卸载、查询和权限管理等。它是 Android 应用生命周期管理和安全机制的基石。

主要职责:
1、应用安装与卸载
2、静态权限解析与动态权限授予
3、应用信息查询
4、系统应用的预加载
5、数据存储与一致性管理


提示:以下是本篇文章正文内容,下面案例可供参考

一、PMS 启动流程

在这里插入图片描述

PMS 在系统启动时由 SystemServer 启动。其核心流程如下:

1、SystemServer 初始化
在 SystemServer 的 startBootstrapServices 方法中,调用 PackageManagerService.main(),完成 PMS 的创建和初始化。

2、关键方法解析
PackageManagerService.main()

public static PackageManagerService main(Context context, Installer installer, boolean factoryTest) {PackageManagerService pms = new PackageManagerService(context, installer, factoryTest);ServiceManager.addService("package", pms);return pms;
}

这里完成了:
1、PMS 对象的实例化。
2、将 PMS 注册到 ServiceManager,供其他服务访问。

3、扫描已安装应用
调用 scanDirLI 方法扫描 /system/app/data/app 等目录,加载所有已安装的应用包信息,并存储到内存和文件中(如 packages.xml)。

二、APK 安装流程

APK 的安装是 PMS 最重要的功能之一。从用户触发安装到系统完成更新的完整流程如下:

1、入口方法 应用安装请求通过 PackageInstaller 模块发起,最终调用 installPackageAsUser 方法。

public void installPackageAsUser(String originPath, InstallParams params, int userId) {mHandler.post(new InstallParams(originPath, params, userId));
}

此处将安装请求交给 InstallParams 处理。

2、核心处理逻辑在 InstallParams 的 handleStartCopy 方法中,执行以下步骤:

  • 解析 APK 文件:通过 PackageParser 提取包名、版本等信息。
  • 签名校验:调用 verifySignatures 确保 APK 签名合法。
  • 写入系统记录:调用 mSettings.addPackage() 更新系统数据。
  • 通知系统服务:更新系统组件(如 AMS)和广播安装完成事件

3、安装完成广播 APK 安装完成后,PMS 会通过 Intent.ACTION_PACKAGE_ADDED 广播通知其他组件。

三、APK 卸载流程

APK 卸载的主要流程类似于安装,但涉及的数据清理步骤更多:

1、卸载入口 卸载请求通过 deletePackageAsUser 方法发起,最终调用 deletePackageLI 方法。

2、核心处理逻辑
清理应用数据:删除 /data/app/ 目录中的文件。
移除系统记录:从 packages.xml 中删除相关记录。
广播通知:通过 Intent.ACTION_PACKAGE_REMOVED 通知系统组件和应用。

3、特殊情况 如果应用包含共享库或依赖的资源,PMS 会延迟清理,确保不会影响其他应用。

四、权限管理

权限分为静态权限和动态权限,PMS 通过解析 AndroidManifest.xml 和系统调用提供管理功能。

静态权限

解析过程
在应用安装时,PMS 调用 PackageParser 的 parsePackage 方法,解析应用的 AndroidManifest.xml 文件,提取 标签内容。

PermissionInfo permission = new PermissionInfo();
permission.name = parser.getName();
mPermissions.add(permission);

动态权限

授予与撤销
动态权限的管理主要通过 grantRuntimePermission 和 revokeRuntimePermission 方法实现。

public void grantRuntimePermission(String packageName, String permissionName, int userId) {enforcePermissionChecks(permissionName);mSettings.grantRuntimePermission(packageName, permissionName, userId);
}

实际场景
例如,在某些即时通讯应用中,用户拒绝麦克风权限会导致无法发送语音消息。

五、 数据存储与一致性

PMS 的数据存储主要通过以下文件完成:

1、packages.xml 存储应用的基本信息,如包名、路径、版本等。

<package name="com.example.app" codePath="/data/app/com.example.app-1/base.apk" />

2、runtime-permissions.xml 存储动态权限授予记录。

<permissions><permission name="android.permission.CAMERA" granted="true" />
</permissions>

3、一致性保障
锁机制:PMS 使用锁机制保护并发读写,确保数据一致性。
文件备份:在文件更新前,系统会先保存备份副本,确保异常恢复能力。

六、 PMS 的安全性策略

PMS 是 Android 安全机制的核心,以下几点尤为重要:
签名校验:通过验证应用签名确保来源可信。
SELinux 策略:限制 PMS 的文件访问权限,增强系统安全性。
权限隔离:动态权限机制确保用户对敏感操作的控制权。

源码介绍

1、权限检查

PMS 负责管理应用的权限,包括动态权限和安装时权限。
权限检查主要在 checkPermission() 和 checkUidPermission() 方法中完成。
源码位置:
frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java

@Override
public int checkPermission(String permName, int uid) {final int permission = mSettings.getPermissionLocked(permName, uid);return (permission == PERMISSION_GRANTED) ? PERMISSION_GRANTED : PERMISSION_DENIED;
}

2、签名认证

在应用安装或更新时,PMS 会通过 verifySignatures() 方法验证签名是否一致。
防止未授权的 APK 替换已安装的 APK。
源码位置:
frameworks/base/services/core/java/com/android/server/pm/PackageManagerServiceUtils.java

private void verifySignatures(PackageParser.Package pkg, PackageSetting ps)throws PackageManagerException {if (!compareSignatures(pkg.mSigningDetails.signatures, ps.signatures.mSignatures)) {throw new PackageManagerException(INSTALL_FAILED_UPDATE_INCOMPATIBLE,"Signature mismatch for " + pkg.packageName);}
}

3、动态权限管理

动态权限是通过运行时授予或拒绝的,主要涉及以下文件:
runtime-permissions.xml 用于存储动态权限的状态
相关代码示例:
源码位置:
frameworks/base/services/core/java/com/android/server/pm/permission/PermissionManagerService.java

public void grantRuntimePermission(String packageName, String permissionName, int userId) {// 检查权限是否属于动态权限enforceGrantRuntimePermission(packageName, permissionName, userId);// 更新权限的状态mPermissionManager.grantRuntimePermission(packageName, permissionName, userId);
}

4、应用安装验证

PMS 在应用安装时会调用 PackageInstaller 验证 APK 文件的完整性

相关代码包括:
安装路径检查
签名校验
安全区域限制

源码位置:
frameworks/base/services/core/java/com/android/server/pm/PackageInstallerService.java

private void enforceSystemOrRoot(String message) {if (Binder.getCallingUid() != Process.SYSTEM_UID &&Binder.getCallingUid() != Process.ROOT_UID) {throw new SecurityException(message);}
}

5、保护系统目录

只有系统权限的应用才可以访问 /system/app/system/priv-app 等系统目录。
安全性检查代码:
源码位置:
frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java

private boolean isPrivilegedApp(String packageName) {PackageSetting ps = mSettings.mPackages.get(packageName);return ps != null && ps.isPrivileged();
}

七、PMS 调试方法

开发或调试 PMS 时,可以使用以下方法:

1、日志调试
通过 adb logcat | grep PackageManager 查看安装、卸载日志。

2、源码定位
关注 PackageManagerService.java 文件,定位核心方法,如 installPackageAsUser 和 deletePackageLI。

3、文件检查
检查 /data/system/packages.xml 和 runtime-permissions.xml 文件内容,排查问题。

总结

PMS 是 Android 系统中连接应用、用户和系统的桥梁,其源码体现了安装、卸载、权限管理的高效性和安全性。通过深挖源码,理解其核心流程,可以帮助开发者更好地优化和调试应用。

http://www.yayakq.cn/news/379587/

相关文章:

  • 哪里有学做视频的网站3网站违规关键词
  • 什么网站是做家教的竞价排名点击器
  • 云主机可以做几个网站站长工具官网查询
  • 做游戏网站教程谷歌google下载安卓版 app
  • 广州网站优化招聘wordpress自动加载
  • 淄博做网站公司有哪些漳州网站建设 林
  • 自己做网站需要备份么wordpress 360友链
  • 做的最好的视频教学网站三元桥做网站的公司
  • 有没有做推文的网站学校专业建设规划
  • 网站建设小说做网站用突发性实例可以吗
  • 大兴网站开发网站建设报价免费软件看电影电视剧
  • 国土政务网站建设制度书画院网站建设
  • 广西金利建设有限公司网站免费logo设计网址
  • 牛商网朱依静沈阳网络推广优化
  • 网站制作公司成都wordpress顶部图片
  • 创建一个网站英语北京的广告公司有哪些
  • 比特币简易网站开发南通网络推广公司
  • 浙江恒元建设网站wordpress首页图片不显示
  • 网站设计术语网络编程就业前景
  • 太原网站建设注意英文站友情链接去哪里查
  • 宁津网站开发wordpress主题繁体
  • 机票网站开发知乎做一个普通网站多少钱
  • 电子商务网站建设的规划方案襄阳住房和城乡建设局网站首页
  • iis网站出乱码响应式购物网站设计
  • 网站订单系统模板下载做网站要商标吗
  • 手机网站设计神器昆明网站制作计划
  • 网站后缀有什么区别综合性型门户网站有哪些
  • 广州南沙区建设和交通局网站北京 网站建设咨询顾问公司
  • 个人域名备案网站名称例子深圳公司注册登记中心
  • 城阳做网站的公司阜宁专业做网站的公司