MTK-Android12-adb install 和 pm install 安装拦截

提示:MTK-Android12-adb install 和 pm install 安装拦截


前言

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

一、需求

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

分析:其实说这么多就是要有两个属性,属性值为0或者没有属性时候不允许安装,属性值为1 时候允许安装。

二、参考资料

之前分析过安装流程的,拿来主义,直接参考使用就行:
参考:拦截adb install/uninstall安装 - 安装流程分析

其它关联知识点,也特别重要,大量的需求相关联,务必掌握:

Android13-包安装器PackageInstaller-之apk安装流程
MTK-Android13-包安装器PackageInstaller 静默安装实现

MTK Android12 安装app添加密码锁限制

RK-Android11-PackageInstaller安装器自动安装功能实现

Rk3576-Android15-Apk 安装基本知识点和Apk安装拦截功能实现

Android15 添加android.uid.system且系统签名后无法安装

RK3576-Android15-整合PackageInstaller实现静默安装功能

Android-应用安装白名单

其实这么多参考资料对应的都是实际的项目定制化常规需求,改来改去务必理解以下知识点:

  • 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 命令安装
  • 这里只是基本需求,运用之前的笔记、知识点 简单实现。
  • 核心内容还是掌握了解:安装流程,针对不同版本、不同平台的系统代码,熟悉思路,然后实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

野火少年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值