android 打包流程

211 阅读2分钟

Gradle

Gradle是Android的打包编译工具,用来打包资源文件,编译Java源文件→.class文件→.dex文件→签名 aapt Android Aessts package tool Android资源打包工具,Android Studio和Android Gradle使用他来编译和打包资源。gradle打包主要任务

//aidl 转换aidl文件为java文件
  > Task :app:compileDebugAidl

//生成BuildConfig文件
  > Task :app:generateDebugBuildConfig

//获取gradle中配置的资源文件
  > Task :app:generateDebugResValues

// merge资源文件
  > Task :app:mergeDebugResources

// merge assets文件
  > Task :app:mergeDebugAssets
  > Task :app:compressDebugAssets

// merge所有的manifest文件
  > Task :app:processDebugManifest

//AAPT 生成R文件
  > Task :app:processDebugResources

//编译kotlin文件
  > Task :app:compileDebugKotlin

//javac 编译java文件
  > Task :app:compileDebugJavaWithJavac

//转换class文件为dex文件
  > Task :app:dexBuilderDebug

//打包成apk并签名
  > Task :app:packageDebug

AAPT2支持编译所有Android 资源类型,AAPT2 输出的文件不是可执行文件,稍后您必须在链接阶段添加这些二进制文件作为输入来生成 APK。但是,所生成的 APK 文件不是可以立即部署在 Android 设备上的可执行文件,因为它不包含 DEX 文件且未签名。
AAPT2打包流程

  1. 编译:将资源文件编译成以.arsc.flat为扩展名的资源表或者转换成.flat的二进制文件。
  2. 链接:在链接阶段,AAPT2 会合并在编译阶段生成的所有中间文件(如资源表、二进制 XML 文件和处理过的 PNG 文件),并将它们打包成一个 APK。此外,在此阶段还会生成其他辅助文件,如 R.java 和 ProGuard 规则文件。不过,生成的 APK 不包含 DEX 字节码且未签名。无法将此 APK 部署到设备。

Android资源文件

Android的资源文件大多以xml格式存储的,大多数xml文件上都有

xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"

xmlns是xml namespaces的简写,是Android提供的xml约束,主要为了防止命名冲突和约束xml标签属性