Android打包流程

framework

Posted by Cc1over on January 13, 2019

Android打包流程

  • 打包资源文件,生成R.java文件

    这个过程使用了android-sdk/platform-tools目录下aapt工具将资源文件打包,这个过程中项目中的AndroidManifest.xml文件和布局文件xml都会编译生成相应的R.java,同时还有编译生成成resources.arsc和uncompiled res文件(二进制文件 & 非二进制文件)

    非二进制文件(eg:res/raw、res/pic)保持原样

    assets资源文件内容保持原样

  • 处理aidl文件,生成相应的java文件

    这个过程使用了android-sdk/platform-tools目录下aidl工具解析接口定义文件,然后生成相应的java接口,供程序调用 如果项目中没有使用到aidl文件,那么这个过程可以跳过

  • 编译项目源代码,生成.class文件

    这一步调用了javac编译工程目录下所有的java源文件,包括前两个过程生成的java源文件,生成的class文件位于工程的bin\classes目录下,如果项目中需要使用NDK编译native代码的话,这一步需要使用NDK编译C/C++代码,当然,编译C/C++代码的步骤可以提前到第一步或第二部

  • 转换所有的class文件,生成classes.dex文件

    这一步使用了位于android-sdk/platform-tools下的dx工具,dx工具可以生成供Android系统虚拟机的执行文件classes.dex

    dx工具主要工作就是将java字节码转换成Dalvik字节码,压缩常亮池以及消除冗余信息(包括第三方的lib和.class文件)

  • 打包生成apk文件

    这一步使用了android-sdk/tools目录下的打包工具apkbuilder把所有没有编译过的资源文件、编译过的资源和.dex文件都会被apkbuilder工具打包到最终的.apk文件中

  • 对apk进行签名

    apk文件只有被签名才能被安装在设备上。

    签名文件(keystore)有2种

    一种是用于调试的 debug.keystore,开发工具中Run以后在设备上运行的Apk就是debug.keystore签名 一种是用于发布正式版本的keystore

    签名的方法有2种

    用jdk中提供的jarsigner工具签名 使用android源码中提供的signapk工具,它的代码位于android系统源码build\tools\signapk目录下

  • 对签名后的apk文件进行对齐处理

    这一步会使用android-sdk\tools目录下zipalign,它的主要工作是将签名后的apk进行对齐处理,是apk所有资源文件距离文件起始偏移为4字节整数倍,这样通过内存映射访问apk文件时速度会更快

参考资料:

  • https://blog.csdn.net/lazyer_dog/article/details/54581148
  • https://blog.csdn.net/jason0539/article/details/44917745