Android面向面试复习---Android构建流程

Android构建流程

如果公司项目比较大,那么持续集成就显得很有必要。需要搭建持续集成的环境的话,Android项目的构建流程就有必要了解清楚了。

1. 首先,拿一张Android构建的详细流程图出来,然后我们再根据图进行梳理。

可能很多人都知道,Android项目的构建包括:资源合并、源码编译、dex生成及打包签名等步骤,但是个中细节都了解吗?

这里写图片描述

2. 简单而不复杂的梳理一遍构建流程

  1. 资源合并

    如果引入support包或者引入了三方的aar库,那么构建前会将aar解压与本地资源合并,这里包括:assets目录,res目录及Androidmanifest.xml。

    • 三方库中的assets或者res文件与本地文件有冲突时,优先选用本地。
    • res/values目录下的string.xml、color.xml、styles.xml等文件会合并到vlaues.xml里,而不是直接舍弃
    • Androidmanifest.xml则比较复杂,有一定的优先顺序
  2. AAPT打包

    资源合并完成后,进入到编译阶段,先会把项目资源中的xml编译成二进制并生成R.java文件及资源索引表resources.arsc,流程如下:

    这里写图片描述

    • assets,不需要做任何处理
    • res/raw下的文件只需分配id后和assets一起打包到应用中即可
    • 其他xml会被编译为二进制
    • 资源索引表 resources.arsc记录了从资源id到文件路径的转换关系,当应用通过Resource读取资源时,会显从resources.arsc中拿到文件路径,然后通过AssetManager进行访问
  3. 处理.aidl文件,生成对应的java接口文件

    aidl ,全名为:Android Interface Definition Language,即Android接口定义语言。在编译时,需要先调用adil工具生成java代码。

  4. java源码编译

    通过javac命令将java源码(aidl生成的java文件,R.java,原java文件等)编译成.class字节码

    这里写图片描述

    • 编译的源码包括android.jar,具体根据targetSdkVersion指定
    • build.gradle中添加的第三方依赖的java文件
    • 在这个阶段可以根据build.gradle中的配置进行混淆

      buildTypes {
          release {
              minifyEnabled true
              proguardFiles getDefaultProguardFile('proguard-android.txt')
              proguardFile 'proguard/proguard-rules.pro'
          }
      }
      
  5. 生成dex

    在这个过程中,构建工具会调用dx.bat将所有的class文件(第四步生成的)转化为classes.dex文件,dx会将class转化为Dalvik字节码,生成常量池,消除冗余数据等。

  6. 通过apkbuilder工具,将appt生成的resources.arsc和res文件、assests文件和classes.dex一起打包生成apk

    打包的大致步骤如下:

    1. 以包含resources.arsc的ap_文件为基础,new 一个ApkBuilder,设置debugMode
    2. apkBuilder.addZipFile(f)
    3. apkBuilder.addSourceFolder(f)
    4. apkBuilder.addResourcesFromJar(f)
    5. apkBuilder.addNativeLibraries(nativeFileList)
    6. apkBuilder.sealApk();//关闭apk文件
    7. generateDependencyFile(depFile,inputPaths,outputFile.getAbsolutePath());
    
  7. 通过JarSinger工具,对上面生成的apk进行debug或者release签名

    通过jarsinger命令签名

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

    调用buildtoolszipalign,对签名后的apk文件进行对齐处理,使apk中所有的资源文件距离文件起始偏移为4字节的整数倍,从而在通过内存映射访问apk文件时会更快。同时也减少了在设备上运行时的内存消耗

3. 附录(参考文章)

Android App 构建流程分析
Android构建过程分析

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值