文章目录

  • 一、Android 中的 Java 源码打包流程
    • 1、Java 源码打包流程
    • 2、字符串常量池
  • 二、Android 中的字节码操作方式

一、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 中的字节码操作方式


操作字节码的 222 种方式 :

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

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

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

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

【字节码插桩】Android 打包流程 | Android 中的字节码操作方式 | AOP 面向切面编程 | APT 编译时技术相关推荐

  1. 【AOP 面向切面编程】Android Studio 使用 AspectJ 监控方法运行原理分析

    文章目录 一.查看使用 AspectJ 后生成的 Class 字节码类 二.AspectJ 的本质 一.查看使用 AspectJ 后生成的 Class 字节码类 在 Android Studio 中查 ...

  2. 【AOP 面向切面编程】Android Studio 中配置 AspectJ ( 下载并配置AS中 jar 包 | 配置 Gradle 和 Gradle 插件版本 | 配置 Gradle 构建脚本 )

    文章目录 一.AspectJ 下载 二.拷贝 aspectjrt.jar 到 Android Studio 三.配置 Gradle 和 Gradle 插件版本 四.配置 Gradle 构建脚本 一.A ...

  3. Android AOP 面向切面编程

    一.AOP即面向切面编程 AOP 是 Aspect Oriented Programming 的缩写,译为面向切面编程.用我们最常用的 OOP 来对比理解: 纵向关系 OOP,横向角度 AOP 举个例 ...

  4. AOP面向切面编程在Android开发中的应用

    面向切面编程-Aspect Oriented Programming,简称AOP,通过预编译的方式和运行期间动态代理实现程序功能的统一维护的一种技术. AOP能够做什么呢? 性能检测 权限验证 释放资 ...

  5. AOP面向切面编程在Android中的使用

    GitHub地址(欢迎下载完整Demo) https://github.com/ganchuanpu/AOPDemo 项目需求描述 我想类似于这样的个人中心的界面,大家都不会陌生吧.那几个有箭头的地方 ...

  6. 【AOP 面向切面编程】Android Studio 使用 AspectJ 监控方法运行 ( 定义连接点注解 | 定义 Aspect 切面 | 定义切入点 | 逐个处理切入点的各个连接点 )

    文章目录 一.定义 Join Point 连接点注解 二.定义 Aspect 切面 1.定义 Aspect 切面 2.定义 Aspect 切面 3.逐个处理切入点的各个连接点 4.完整 Aspect ...

  7. Android AOP之字节码插桩

    背景   本篇文章基于<网易乐得无埋点数据收集SDK>总结而成,关于网易乐得无埋点数据采集SDK的功能介绍以及技术总结后续会有文章进行阐述,本篇单讲SDK中用到的Android端AOP的实 ...

  8. Android字节码插桩

    什么是字节码插桩 字节码插桩就是在构建的过程中,通过修改已经编译完成的字节码文件,也就是class文件,来实现功能的添加. 简单来讲,我们要实现无埋点对客户端的全量统计.这里的统计概括的范围比较广泛, ...

  9. Android程序员的硬通货——ASM字节码插桩

    作者:享学课堂Lance老师 转载请声明出处! 一.什么是插桩 QQ空间曾经发布的<热修复解决方案>中利用 Javaassist库实现向类的构造函数中插入一段代码解决 CLASS_ISPR ...

最新文章

  1. qt快速加载图片_Qt实用技巧:使用Qt加载超大图片的耗时测试
  2. Kafka生产者详解
  3. 百度知道回答的依赖注入
  4. 用Jackson编写大型JSON文件
  5. JAVA程序员已成为最疯狂的加班行业,没有之一?
  6. 怎样成为一名更优秀的程序员?我总结出 7 条建议,希望对你们有帮助!
  7. MySQL之Variables(变量)
  8. oracle 常用索引分析,使用原则和注意事项
  9. HttpServletRequest 和 HttpServletResponse
  10. C#项目班级管理系统
  11. 浅入浅出Vivado IP之DDS Compiler
  12. XMind的安装及导出为pdf
  13. Java 定义一个 Employee类,定义方法输出Employee的名字,年龄,总收入。编写应用程序使用Employee
  14. 【2022省选模拟】星际航道——网格图最小生成树、LCT
  15. 使用Sbo用户自定义业务对象
  16. 从键盘输入n个数 求其中的最大数
  17. Log4j2漏洞发展历程及解决方案
  18. 2022数学建模国赛ABC题思路
  19. 佳能c3020维修模式 白电平调整_佳能5d3 如何调色温
  20. BZOJ4408:[FJOI2016]神秘数

热门文章

  1. Linux tmux分屏工具
  2. [JAVAWEB实战篇]---Hibernate实现级联删除
  3. 解决人际矛盾的英语口语10条
  4. python 函数部分
  5. linux添加root级别账户
  6. 常用的 css 样式 记录
  7. Microsoft Dynamics CRM 2011 相关-摘自网络
  8. Ajax调用webService(一) 不跨域。
  9. Sqlite c/c++ api 学习
  10. CISS.SideMenu的bug