提示:MTK-Android12-adb install 和 pm install 安装拦截
前言
最近有一个小需求,恰好是adb install 、pm install 安装拦截功能。 正好之前其实总结过,这里再次回顾,把知识点再梳理下。 安装拦截、白名单机制是定制案子中常用的基本功能,务必了解流程、步骤、思想,然后正对性完成需求。
一、需求




分析:其实说这么多就是要有两个属性,属性值为0或者没有属性时候不允许安装,属性值为1 时候允许安装。
二、参考资料
之前分析过安装流程的,拿来主义,直接参考使用就行:
参考:拦截adb install/uninstall安装 - 安装流程分析
其它关联知识点,也特别重要,大量的需求相关联,务必掌握:
Android13-包安装器PackageInstaller-之apk安装流程
MTK-Android13-包安装器PackageInstaller 静默安装实现
RK-Android11-PackageInstaller安装器自动安装功能实现
Rk3576-Android15-Apk 安装基本知识点和Apk安装拦截功能实现
Android15 添加android.uid.system且系统签名后无法安装
RK3576-Android15-整合PackageInstaller实现静默安装功能
其实这么多参考资料对应的都是实际的项目定制化常规需求,改来改去务必理解以下知识点:
framework层的安装流程,代码安装和脚本adb install / pm install安装流程;不同安卓版本核心类和方法- 包安装器的使用,流程
然后就是基于这两个知识点各种定制化需求,权限控制、静默安装这些基本需求。
三、涉及到的类
/frameworks/base/services/core/java/com/android/server/pm/PackageManagerShellCommand.java 【直接关联】
/device/mediatek/system/common/device.mk【直接关联】
/packages/modules/adb/daemon/shell_service.cpp 【间接参考】
四、实现方案
1、新增属性-按需系统端适配
路径:/device/mediatek/system/common/device.mk
persist.tcl.debug.installapk=0 \
persist.tcl.installapk.enable=0 \

2、命令拦截
路径:/frameworks/base/services/core/java/com/android/server/pm/PackageManagerShellCommand.java
在方法runInstall() 中进行拦截即可:
private int runInstall() throws RemoteException {
// modify by start
Log.d(TAG,"=======runInstall=======");
String debugInstallapk = SystemProperties.get("persist.tcl.debug.installapk","0");
String installapkEnable = SystemProperties.get("persist.tcl.installapk.enable","0");
Log.d(TAG,"=======runInstall debugInstallapk:"+debugInstallapk+" installapkEnable:"+installapkEnable);
if("1".equals(debugInstallapk)&&"1".equals(installapkEnable)){
return doRunInstall(makeInstallParams());
}else{
return -1;
}
// modify by end
// return doRunInstall(makeInstallParams());
}

那为什么在这个方法里面去拦截呢? 直接反推,看看:

3、看一下C层的命令-指令
路径:/packages/modules/adb/daemon/shell_service.cpp , 这里只是了解一下,相关的需求也可能会用到。
如下这个方法里面可以看到输入的 adb 命令,这里面有一个特别重要的知识点,你看是service.cpp , 这里的就是服务端, adb 本身就是CS架构, 所以在Server端是能够拿到属性和设置属性的,好多人找源码找到client 端去了,在client 端向在入口做一些拦截判断,可惜的是client 端都没有到达Android设备,根本没戏,这个隐藏的知识点特别重要。

五、日志分析、功能验证




对比日志看看,如上的视线方案,完美!
经验-总结-分享
- 核心知识点一定是apk 安装流程、静默安装、安装拦截这些基本知识点。最核心的知识点就是安装流程:代码按照和
adb命令安装 - 这里只是基本需求,运用之前的笔记、知识点 简单实现。
- 核心内容还是掌握了解:安装流程,针对不同版本、不同平台的系统代码,熟悉思路,然后实现。
242

被折叠的 条评论
为什么被折叠?



