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

举报
韩曙亮 发表于 2022/01/13 00:44:13 2022/01/13
【摘要】 文章目录 一、Android 中的 Java 源码打包流程1、Java 源码打包流程2、字符串常量池 二、Android 中的字节码操作方式 一、Android 中的 J...





一、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 编译时技术进行开发的 ;


文章来源: hanshuliang.blog.csdn.net,作者:韩曙亮,版权归原作者所有,如需转载,请联系作者。

原文链接:hanshuliang.blog.csdn.net/article/details/120289761

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。