• 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

    在这里插入图片描述

  • 相关阅读:
    微服务框架 SpringCloud微服务架构 5 Nacos 5.1 认识和安装Nacos
    【LeetCode】5. 最长回文子串
    java日志框架详解-slf4j
    大数据下的精准营销获客
    中国MEMS陀螺仪应用及市场需求空间测算研究报告
    【面试:并发篇35:多线程:设计模式】享元模式
    [计算机提升] 数据及相关概念
    21.4 Python 使用GeoIP2地图定位
    前端Vue怎么获取登录的用户名或用户id
    The method toList() is undefined for the type Stream
  • 原文地址:https://blog.csdn.net/one1go/article/details/125476240