字节码插桩android打包流程|android中的字节码操作方式|aop面向切面编程|apt编译时技术

韩曙亮 韩曙亮     2023-01-03     695

关键词:





一、Android 中的 Java 源码打包流程



Java 程序在 Java 虚拟机执行前 , 需要先将 Java 源码通过 javac 编译成 .class 字节码文件 , 然后才能在虚拟机中运行 ;


1、Java 源码打包流程


Android 中的 Java 源码打包流程 : 参考 【Android 安装包优化】APK 打包流程 ( 文件结构 | 打包流程 | 安装流程 | 安卓虚拟机 ) 博客 ;

① 编译资源 R.java 源码 : 使用 AAPT 工具打包资源文件 , 生成 R.java , resources.ap 文件 ;

② 编译 AIDL 接口源码 : 使用 AIDL tool 工具 , 处理 AIDL 文件 , 生成对应的 Java 文件 ;

③ 编译 Java 源码 : 使用 javac 工具编译 Java 源码为 class 字节码文件 ;

④ 打包 Class 字节码 : 使用 dx 工具将 class 字节码文件打包成 dex 字节码文件 , 这是 Dalvik 虚拟机字节码文件 ;

⑤ 生成未签名 APK : 使用 apkbuilder 工具生成未签名的 apk 文件 ;

⑥ 签名 : 使用 jarsigner 工具对 apk 文件进行签名 , 生成签名后的文件 ;

⑦ 对齐 : 使用 zipalign 工具对签名后的 apk 文件进行对齐操作 ;


2、字符串常量池


XML 文件在编译时 , 会被编译成二进制文件 , 二进制文件比 XML 文件占用的空间更小 , 所有在 XML 文件出现过的字符 , 都会放入字符资源池 , 可以去重复 ;

通过 resources.arsc 文件中的资源字符串的 字符串内容 偏移量 , 确定有哪些字符 ;





二、Android 中的字节码操作方式



操作字节码的 2 2 2 种方式 :

  • AOP : Aspect Oriented Programming , 面向切面编程 ;
  • APT : 编译时技术 , 注解 , 注解处理器 , Android 依赖库 , 3 3 3 件套 ; 参考 Android APT 专栏 ;

AOP 和 APT 都可以用于字节码插桩操作 :

  • AOP 的插桩时机是 .class 字节码文件打包为 .dex 文件过程中 ;
  • APT 的插桩时机是 .java 文件编译成 .class 字节码文件时 , 进行的 , 编译时进行字节码插桩 ;

ButterKnife , Dragger2 , GreenDao , ARoute 都是基于 APT 编译时技术进行开发的 ;


android字节码插桩——详细讲解附带demo(代码片段)

前言什么是字节码插桩字节码插桩就是在构建的过程中,通过修改已经编译完成的字节码文件,也就是class文件,来实现功能的添加从技术上来说,字节码插桩是自定义Gradle插件、ASM、Java字节码、切面编程的综合... 查看详情

asm字节码插桩全流程解析(代码片段)

...,还有没有伙伴不太了解buildSrc的,其实buildSrc是Android中默认的插件工程,在gradle编译的时候,会编译这个项目并配置到classpath下。这样的话在buildSrc中创建 查看详情

android-asm字节码插桩与apt原理补充

ASM字节码插桩与APT原理补充技术点APT补充1.策略模式2.SPI机制分析3.通过javac源码分析APT执行原理ASM1.逆波兰表达式2.java文件转换class文件基本规则3.ASM框架完成字节码插桩APT在java文件编译成class文件的过程中,apt可以监视在这... 查看详情

字节码插桩aop技术(“字节码插桩“技术简介|aspectj插桩工具|asm插桩工具)

...,多态;AOP面向切面编程,主要针对某个动作进行开发;如:给Android中所有的Activity添加安全策略,如 查看详情

androidgradle中的字节码插桩之asm(代码片段)

前言         逐步整理的一系列的总结:     AndroidGradle插件开发初次交手(一)        AndroidGradle的基本概念梳理(二)       Android自定义Gradle插件的完整流程(三)       Android自... 查看详情

android——面向aop编程(代码片段)

前言:最近在工作中接触到了字节码插桩相关的知识,所以以本文来整理并实践一下相关的知识体系。字节码插桩:AOP编程  打包流程自定义GradleTask查看,识别Java字节码ASM使用TransformAOP编程思想:面向切面编程思想... 查看详情

android——面向aop编程(代码片段)

前言:最近在工作中接触到了字节码插桩相关的知识,所以以本文来整理并实践一下相关的知识体系。字节码插桩:AOP编程  打包流程自定义GradleTask查看,识别Java字节码ASM使用TransformAOP编程思想:面向切面编程思想... 查看详情

看这一篇,你也可以自如的掌握字节码插桩(代码片段)

...辑过程中各部分之间低耦合的隔离效果。字节码插入位置Android开发者应该会熟悉这个图片(来自于AndroidDeveloper:在Compilers中具体为:字节码插桩就是在.class文件转为.dex之前,修改.class文件从而达到修改代码的目的。... 查看详情

字节码插桩android签名机制(生成android签名文件|分析签名文件|签名文件两个密码的作用|三种签名方式)(代码片段)

文章目录一、Android签名机制二、生成Android签名文件三、分析签名文件四、签名文件两个密码的作用五、三种签名方式一、Android签名机制APK文件签名是为了保证APK来源真实性,以及APK文件没有被修改过;APK签名基于Hash散列算法进行... 查看详情

android-asm字节码插桩与apt原理补充

ASM字节码插桩与APT原理补充技术点APT补充1.策略模式2.SPI机制分析3.通过javac源码分析APT执行原理ASM1.逆波兰表达式2.java文件转换class文件基本规则3.ASM框架完成字节码插桩APT在java文件编译成class文件的过程中,apt可以监视在这... 查看详情

java字节码插桩技术

相关文章:  字节码插桩--你也可以轻松掌握  查看详情

androidgradle插件gradle构建工具简介②(android项目构建打包流程|构建工具发展->手动配置->ant->maven->gradle)

文章目录一、Android项目构建打包流程二、构建工具发展(手动配置->Ant->Maven->Gradle)一、Android项目构建打包流程Android项目构建参考:【Android安装包优化】APK打包流程(文件结构|打包流程|安装流程|安卓虚拟机)【字节码插桩】A... 查看详情

asm字节码插桩:隐私合规方法检测(代码片段)

...来工信部对于应用的隐私合规安全问题愈加重视,对Android平台的管控程度也要比IOS平台严格很多,很多不合规的应用也先后被下架要求整改。笔者就曾遇到过加班整改隐私合规的问题,隐私合规问题主要针对两个方... 查看详情

字节码插桩之javaagent(代码片段)

字节码插桩之JavaAgent本篇文章将详细讲解有关JavaAgent的知识,揭开它神秘的面纱,帮助开发人员了解它的黑魔法,帮助我们完成更多业务需求WhatisJavaAgentJavaAgent又称为Java探针,它提供了向现有已编译的Java类添加... 查看详情

最通俗易懂的字节码插桩实战(gradle+asm)(代码片段)

好文推荐:作者:miaowmiaow前言字节码插桩,看起来挺牛皮,实际上是真的很牛皮。但是牛皮不代表难学,只需要一点前置知识就能轻松掌握。GradleTransformGoogle在AndroidGradle的1.5.0版本以后提供了TransfromAPI,... 查看详情

字节码插桩之javaagent(代码片段)

字节码插桩之JavaAgent本篇文章将详细讲解有关JavaAgent的知识,揭开它神秘的面纱,帮助开发人员了解它的黑魔法,帮助我们完成更多业务需求WhatisJavaAgentJavaAgent又称为Java探针,它提供了向现有已编译的Java类添加... 查看详情

字节码插桩之javaagent(代码片段)

字节码插桩之JavaAgent本篇文章将详细讲解有关JavaAgent的知识,揭开它神秘的面纱,帮助开发人员了解它的黑魔法,帮助我们完成更多业务需求WhatisJavaAgentJavaAgent又称为Java探针,它提供了向现有已编译的Java类添加... 查看详情

androidgradle中的字节码插桩之asm(代码片段)

目录前言一ASM 1.AOP             2.ASM二ASM中几个重要的类  1.ASM之ClassVisitor 2.ASM之AdviceAdapter5.ASM之ClassReader和ClassWriter三实例1.为所有的方法添加调用日志实例2.AutoLogClassVisitor3.  AutoLogAdviceAdapter4.Transform输出的路径 四总结... 查看详情