【Android】StrictMode严格模式流程分析及入侵埋点处分析

2023-12-27 22:58

本文主要是介绍【Android】StrictMode严格模式流程分析及入侵埋点处分析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、使用严格模式

在这里插入图片描述

StrictMode严苛模式,是Android提供的一种运行时检测机制,一般用来检测在主线程做一些耗时动作,比如IO读写、数据库操作、Sp操作、Activity泄露、未关闭的Closable对象泄露等,以减少发生ANR等。严格模式主要有2个策略:一个是线程策略,即TreadPolicy是针对一个具体的线程,另一个是VM策略,即VmPolicy,是针对虚拟机的所有对象。
当然可以添加Penalty(惩罚),一般我们都是用来打印日志、绘制红框等。

二、严格模式中是如何去检测,在哪个地方有注入StrictMode的代码:

在源码中可以直接植入StrictMode的检查代码、也可以植入代码是BlockGuard和CloseGuard的代码。
我们先看下UML:
在这里插入图片描述

1、BlockGuard:

public final class StrictMode {public static void setThreadPolicy(final ThreadPolicy policy) {setThreadPolicyMask(policy.mask);}private static void setThreadPolicyMask(final int policyMask) {setBlockGuardPolicy(policyMask);Binder.setThreadStrictModePolicy(policyMask);}// Sets the policy in Dalvik/libcore (BlockGuard)private static void setBlockGuardPolicy(final int policyMask) {if (policyMask == 0) {BlockGuard.setThreadPolicy(BlockGuard.LAX_POLICY);return;}final BlockGuard.Policy policy = BlockGuard.getThreadPolicy();final AndroidBlockGuardPolicy androidPolicy;if (policy instanceof AndroidBlockGuardPolicy) {androidPolicy = (AndroidBlockGuardPolicy) policy;} else {androidPolicy = threadAndroidPolicy.get();BlockGuard.setThreadPolicy(androidPolicy);}androidPolicy.setPolicyMask(policyMask);}
}

其中在setBlockGuardPolicy(policyMask)把相应的AndroidBlockGuardPolicy设置到BlockGuard类,
并且Binder.setThreadStrictModePolicy()是Native层,当进程A发起跨进程调用进入到进程B后,进程B中的违规异常也是会通过Binder再传回进程A中。

2、CloseGuard:

这篇关于【Android】StrictMode严格模式流程分析及入侵埋点处分析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/544512

相关文章

通过Docker容器部署Python环境的全流程

《通过Docker容器部署Python环境的全流程》在现代化开发流程中,Docker因其轻量化、环境隔离和跨平台一致性的特性,已成为部署Python应用的标准工具,本文将详细演示如何通过Docker容... 目录引言一、docker与python的协同优势二、核心步骤详解三、进阶配置技巧四、生产环境最佳实践

MyBatis分页查询实战案例完整流程

《MyBatis分页查询实战案例完整流程》MyBatis是一个强大的Java持久层框架,支持自定义SQL和高级映射,本案例以员工工资信息管理为例,详细讲解如何在IDEA中使用MyBatis结合Page... 目录1. MyBATis框架简介2. 分页查询原理与应用场景2.1 分页查询的基本原理2.1.1 分

redis-sentinel基础概念及部署流程

《redis-sentinel基础概念及部署流程》RedisSentinel是Redis的高可用解决方案,通过监控主从节点、自动故障转移、通知机制及配置提供,实现集群故障恢复与服务持续可用,核心组件包... 目录一. 引言二. 核心功能三. 核心组件四. 故障转移流程五. 服务部署六. sentinel部署

SpringBoot集成XXL-JOB实现任务管理全流程

《SpringBoot集成XXL-JOB实现任务管理全流程》XXL-JOB是一款轻量级分布式任务调度平台,功能丰富、界面简洁、易于扩展,本文介绍如何通过SpringBoot项目,使用RestTempl... 目录一、前言二、项目结构简述三、Maven 依赖四、Controller 代码详解五、Service

Android协程高级用法大全

《Android协程高级用法大全》这篇文章给大家介绍Android协程高级用法大全,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友跟随小编一起学习吧... 目录1️⃣ 协程作用域(CoroutineScope)与生命周期绑定Activity/Fragment 中手

C#和Unity中的中介者模式使用方式

《C#和Unity中的中介者模式使用方式》中介者模式通过中介者封装对象交互,降低耦合度,集中控制逻辑,适用于复杂系统组件交互场景,C#中可用事件、委托或MediatR实现,提升可维护性与灵活性... 目录C#中的中介者模式详解一、中介者模式的基本概念1. 定义2. 组成要素3. 模式结构二、中介者模式的特点

MySQL 临时表与复制表操作全流程案例

《MySQL临时表与复制表操作全流程案例》本文介绍MySQL临时表与复制表的区别与使用,涵盖生命周期、存储机制、操作限制、创建方法及常见问题,本文结合实例代码给大家介绍的非常详细,感兴趣的朋友跟随小... 目录一、mysql 临时表(一)核心特性拓展(二)操作全流程案例1. 复杂查询中的临时表应用2. 临时

Android 缓存日志Logcat导出与分析最佳实践

《Android缓存日志Logcat导出与分析最佳实践》本文全面介绍AndroidLogcat缓存日志的导出与分析方法,涵盖按进程、缓冲区类型及日志级别过滤,自动化工具使用,常见问题解决方案和最佳实... 目录android 缓存日志(Logcat)导出与分析全攻略为什么要导出缓存日志?按需过滤导出1. 按

MySQL 升级到8.4版本的完整流程及操作方法

《MySQL升级到8.4版本的完整流程及操作方法》本文详细说明了MySQL升级至8.4的完整流程,涵盖升级前准备(备份、兼容性检查)、支持路径(原地、逻辑导出、复制)、关键变更(空间索引、保留关键字... 目录一、升级前准备 (3.1 Before You Begin)二、升级路径 (3.2 Upgrade

Linux中的HTTPS协议原理分析

《Linux中的HTTPS协议原理分析》文章解释了HTTPS的必要性:HTTP明文传输易被篡改和劫持,HTTPS通过非对称加密协商对称密钥、CA证书认证和混合加密机制,有效防范中间人攻击,保障通信安全... 目录一、什么是加密和解密?二、为什么需要加密?三、常见的加密方式3.1 对称加密3.2非对称加密四、