我是靠谱客的博主 开心大雁,最近开发中收集的这篇文章主要介绍Android面向面试复习---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构建过程分析

最后

以上就是开心大雁为你收集整理的Android面向面试复习---Android构建流程Android构建流程的全部内容,希望文章能够帮你解决Android面向面试复习---Android构建流程Android构建流程所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(36)

评论列表共有 0 条评论

立即
投稿
返回
顶部