Android AOP二三事:Android打包流程

AOP,Aspect Oriented Programming,面向切面编程。主要是对业务某个切面的处理,减小业务的耦合,不侵入代码的一种解决方案。主要的场景是日志,拦截器,埋点,性能监控等
它的具体操作是针对编译时和运行时,对class字节码的操作,将代码动态插入到指定位置,从而实现对逻辑的补充。
那么具体的问题就是

  • 什么时候切入
  • 切入到哪
  • 怎么切入

Android 编译流程

什么时候切入,那么首先看下Android编译流程
在这里插入图片描述
这是基于Gradle编译的编译流程图,从以上流程图简单分析下打包流程

一、AAPT打包资源文件

res目录下的文件通过AAPT打包生成R.java、resources.arsc和res文件。resources.arsc是App的资源索引表,和R.java可以定位资源的内存地址

二、处理AIDL文件

生成aidl文件对应的Java文件

三、编译.class文件

  • 通过Java Compiler编译R.java、Java接口文件、Java源文件,生成.class文件
  • 如果配置了混淆,也会在生成.class文件的时候进行配置

四、生成.dex文件

通过dex命令,将.class文件和三方库的.class文件,生成classes.dex

五、打包生成APK

通过apkbuilder工具,将aapt生成的resources.arsc和res文件、assets文件和class.dex一起打包生成apk

六、签名

通过Jarsigner工具,对apk进行签名

七、对齐

通过zipalign工具,对签名后的apk进行对齐处理

一些区别

res/raw和assets目录的区别

相同点是都不会编译成二进制,而是原封不动的保存在apk中。
不同点如下

目录访问目录结构
res/raw映射到R.java文件,通过R.id.xx访问不可以
assets不会被映射到R.java文件,需要通过AssetManager可以再新建文件夹

Dalvik和ART虚拟机的区别

从Android5.0开始,Google开始用ART替代Dalvik

安装与运行

Dalvik每次运行都是通过JIT将字节码转换为机器码,会拖慢程序的运行速度,但是安装很快
ART会在第一次安装的时候,就会将字节码预编译成机器码,这样的话,首次安装会慢,但是运行效率会提高

占用空间

ART比Dalvik增加10%到20%,因为要预存字节码

电池

ART增加了电池续航,因为不用每次都转换字节码

ART其他优势

启动更快、运行更快、体验更好、反馈更及时

什么时候切入

从切入时机来看,可以分为静态织入和动态织入。静态织入是class未加载到虚拟机前。

植入时机阶段常见框架
静态织入源码阶段、class阶段、dex阶段APT,AspectJ、ASM、Javassit
动态织入运行时阶段java 动态代理,cglib、Javassit

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值