字节码引用检测原理与实战

  一、字节码与引用检测

  1.1 Java字节码

  本章中的字节码重点研究Java 字节码,Java字节码(Java bytecode)是Java虚拟机执行的一种指令格式。可以通过javap -c -v xxx.class(Class文件路径) 命令来查看一个Class对应的字节码文件,如下图所示:

  

 

  1.2 字节码检测

  字节码检测本质就是对.java或.kt文件编译后生成的Class文件进行相关的分析和检测。在正式介绍字节码分析在引用检测上的原理与实战前,先介绍下字节码引用检测的技术预研背景。

  二、字节码检测技术的预研背景

  整个预研背景需要先从笔者负责的APP--内销官网APP的软件架构讲起。

  2.1 内销官网APP软件架构

  内销官网APP目前共12个子仓,子仓分别独立编译成AAR文件供APP工程使用,软件架构图如下图所示:

  

 

  APP以下,上层浅蓝色为业务层,中间绿色为组件层,最下层深蓝色为基础框架层:

  业务层:位于架构最上层,根据业务线划分的业务模块(比如商城、社区、服务),与产品业务相对应。郑州看心理医生哪家好http://www.hyde8731.com/

  组件层:是APP的一些基础功能(比如登录、自升级)和业务公用的组件(比如分享、地址管理、视频播放),提供一定的复用能力。

  基础框架层:通过跟业务完全无关的基础组件(比如三方框架、自行封装的通用能力),提供完全的复用能力。

  2.2 内销官网APP客户端开发模式

  官网APP目前主要分3条业务线,多业务版本并行开发是常态,所以模块化非常必要。

  官网APP模块化的子仓均已AAR形式供APP使用,且存在上层AAR依赖下层AAR的情况。

  官网APP模块化分仓优化工作穿插在各业务版本中,各业务版本并行开发,底层仓库难免有修改。

  官网APP各业务版本并行开发时,一般只会新拉取当前版本需要修改代码的仓库,其他仓库均继续依赖老版本的AAR。

  2.3 类、方法、属性引用错误导致的运行时崩溃

  假设以下场景:

  官网APP5.0版本开发过程中,由于HardWare仓没有业务修改,所以继续使用上个版本4.9.0.0的HardWare(版本开发过程中一般只会重新拉取需要修改的仓库,无需修改的仓库会继续使用老版本),但Core仓有代码修改,所以拉取了新的5.0分支,并修改了相关代码,删除了CoreUtils类中的某个fun1方法

posted @ 2021-12-08 09:30  顾延笙  阅读(56)  评论(0)    收藏  举报