Android构建、打包流程

359 阅读1分钟

从APK倒推分析

一个APK包的组成

  • AndroidManifest.xml
  • assets 文件夹
  • dex文件
  • lib文件夹
  • META-INF 文件夹
  • res
  • resource.arsc

构建工具

  • Android gradle plugin

打包流程

资源合并

  • 如果项目引入了android support包,又或许依赖于其它第三方aar库,那构建前会将aar解压并与本地资源合并,这里的资源主要包括assets目录,res目录及Androidmanifest.xml
  • 当第三方依赖中的assets或res文件与本地文件有冲突时,会优先选用本地文件

处理资源文件(编译阶段)

  • aapt(先会把项目资源中的xml编译成二进制并生成R.java及资源索引表resources.arsc)
  • AndroidManifest.xml, res 文件夹,resource.arsc 文件
  • aapt 解析项目代码中的 AndroidManifest.xml,收集项目中 res 文件夹的资源文件及 xml 文件,对其做压缩以及编译的处理。在此过程中,分配了资源 id 并生成了 R.java 文件 以及 arsc 文件

生成Dex文件

  • 上一步得到 R.java
  • 混淆代码
  • 打成jar包
  • dx工具打成dex
  • 5.0 以前的系统且超过了 65535 方法数的限制,需要人为的分 dex,5.0 以后则由 dx 工具包办

打包进apk

  • apk 所需要的主要内容已经大致齐全了。只需要把上面生成的 AndroidManifest.xml,classes.dex,res文件夹,resource.arsc 打包进 apk,并且将项目工程中的 assets 以及 lib 目录一并放入,就有了一个未经签名的 Android 安装包了

签名

  • apk 包的签名
  • 按步骤生成 MANIFEST.MF, CERT.RSA,CERT.SF 并放入META-INF 文件夹即可

APK加固

快速多渠道包

资源混淆