【字节码插桩】Android 打包流程 | Android 中的字节码操作方式 | AOP 面向切面编程 | APT 编译时技术
文章目录
一、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 中的字节码操作方式
操作字节码的
种方式 :
- AOP : Aspect Oriented Programming , 面向切面编程 ;
- APT : 编译时技术 , 注解 , 注解处理器 , Android 依赖库 ,
件套 ; 参考 Android APT 专栏 ;
AOP 和 APT 都可以用于字节码插桩操作 :
- AOP 的插桩时机是 .class 字节码文件打包为 .dex 文件过程中 ;
- APT 的插桩时机是 .java 文件编译成 .class 字节码文件时 , 进行的 , 编译时进行字节码插桩 ;
ButterKnife , Dragger2 , GreenDao , ARoute 都是基于 APT 编译时技术进行开发的 ;
相关文章
- Android中如何使用单选对话框[通俗易懂]
- android sdk manager安装,Android SDK Manager安装过程
- android declare-styleable 和style,Android 关于declare-styleable属性的写法….
- android短信验证码方案,Android开发之属于你的短信验证码(一)
- Android resource linking failed_android:authorities
- android toast 自定义时间,Android 自定义 Toast 显示时间「建议收藏」
- android中怎么在View构造的attrs中拿到android给的属性以及attrs属性介绍[通俗易懂]
- countdown timer plus_android studio计时器
- android跳转到相册需要权限,Android打开相册获取图片路径[通俗易懂]
- 【Android 应用开发】UI绘制流程 ( 生命周期机制 | 布局加载机制 | UI 绘制流程 | 布局测量 | 布局摆放 | 组件绘制 | 瀑布流布局案例 )
- 【Android 应用开发】Activity 任务亲和性 taskAffinity 设置 ( taskAffinity 属性 )
- 【Android 应用开发】Activity 返回堆栈清除操作 ( 默认状态 | 清除返回堆栈配置 | 不清除返回堆栈配置 | 清除指定界面配置 )
- 【Android 内存优化】Android 原生 API 图片压缩代码示例 ( PNG 格式压缩 | JPEG 格式压缩 | WEBP 格式压缩 | 动态权限申请 | Android10 存储策略 )
- 【Android 逆向】Android 权限 ( Android 逆向中使用的 android.permission 权限 | Android 系统中的 Linux 用户权限 )
- 【Android 逆向】整体加固脱壳 ( DexClassLoader 加载 dex 流程分析 | DexPathList 中根据 File 加载 DexFile | loadDexFile 分析 )
- 【Android 逆向】ART 脱壳 ( DexClassLoader 脱壳 | DexClassLoader 构造函数 | 参考 Dalvik 的 DexClassLoader 类加载流程 )
- 【Android 逆向】Dalvik 函数抽取加壳 ① ( Dalvik 下的函数指令抽取与恢复 | dex 函数指令恢复时机点 | 类加载流程 : 加载、链接、初始化 )
- 【ijkplayer】编译 Android 版本的 ijkplayer ⑥ ( 进入 ijkplayer-android/android 目录 | 执行 compile-ijk.sh 脚本完成编译 )
- Android Camera原理之拍照流程zsl优化方案
- android PakageManagerService启动流程分析详解手机开发
- Android系统与Linux之间的联系(android和linux)
- CyanogenMod 想要从 Android 剥离掉 Google 的部分
- Mozilla修改Firefox OS计划 探索兼容Android
- Exploring the Power of Linux NDK: Unleash the Full Potential of Native Android Development(linuxndk)
- Android 12 将可以让你用微笑控制智能手机
- android字体颜色选择器(ColorPicker)介绍
- Android需要提升权限的操作方法