拦截adb install/uninstall安装 - 安装流程分析
通过拦截 adb install/uninstall 命令需求,来了解adb install/uninstall 整个业务流程。
文章目录
- 前言 - 需求-目标
-
- 需求
- 目标
- 一、参考文档
-
- 基本知识点
- 二、涉及到修改文件
- 三、实现方案
-
- 定义系统属性值 - mediatek/system/common/device.mk
- 监听系统属性开关设置 - packages/modules/adb/daemon/shell_service.cpp
- 安装之前解析命令,对命令进行验证 拦截 - /frameworks/base/services/core/java/com/android/server/pm/PackageManagerShellCommand.java
- 四、知识点扩展
-
- 需求
- 涉及到的类
- 业务流程-源码分析-BasicShellCommandHandler、ShellCommand、DomainVerificationManagerInternal、PackageManagerShellCommand
-
- 各自职责-角色
- 搞清楚-守护进程到底怎么传递到Java层,执行install/uninstall 逻辑的。
- PackageManagerShellCommand - 翻译、调度命令
- DomainVerificationManagerInternal - 验证过程
- ShellCommand - PackageManagerShellCommand 执行CMD的帮助类
- BasicShellCommandHandler - 执行CMD的帮助类
- PackageManagerShellCommand 安装、卸载过程初步分析
-
- onCommand 回调-分发业务->runInstall
- install -> doRunInstall ->doCommitSession
- apk 安装:doCommitSession -> session.commit(receiver.getIntentSender());
- 总结
前言 - 需求-目标
本人以MTK Android13 版本为例,其它芯片平台和Android版本修改内容基本差不多 对于adb 模块各大芯片厂商和不同Android版本区别其实不大,可以参考。
需求
- 提供禁用/启用 adb install/adb uninstall的指令及api
具体如下要求:
默认adb install/adb uninstall指令启用。
adb指令为:
adb shell adbinstall enale(启用adb install)
adb shell adbinstall disable(禁用adb install)
adb shell adbuninstall enable(启用adb u