概述
Android构建流程
如果公司项目比较大,那么持续集成就显得很有必要。需要搭建持续集成的环境的话,Android项目的构建流程就有必要了解清楚了。
1. 首先,拿一张Android构建的详细流程图出来,然后我们再根据图进行梳理。
可能很多人都知道,Android项目的构建包括:资源合并、源码编译、dex生成及打包签名等步骤,但是个中细节都了解吗?
2. 简单而不复杂的梳理一遍构建流程
资源合并
如果引入support包或者引入了三方的aar库,那么构建前会将aar解压与本地资源合并,这里包括:assets目录,res目录及Androidmanifest.xml。
- 三方库中的assets或者res文件与本地文件有冲突时,优先选用本地。
- res/values目录下的string.xml、color.xml、styles.xml等文件会合并到vlaues.xml里,而不是直接舍弃
- Androidmanifest.xml则比较复杂,有一定的优先顺序
AAPT打包
资源合并完成后,进入到编译阶段,先会把项目资源中的xml编译成二进制并生成R.java文件及资源索引表resources.arsc,流程如下:
- assets,不需要做任何处理
- res/raw下的文件只需分配id后和assets一起打包到应用中即可
- 其他xml会被编译为二进制
- 资源索引表 resources.arsc记录了从资源id到文件路径的转换关系,当应用通过Resource读取资源时,会显从resources.arsc中拿到文件路径,然后通过AssetManager进行访问
处理.aidl文件,生成对应的java接口文件
aidl ,全名为:Android Interface Definition Language,即Android接口定义语言。在编译时,需要先调用adil工具生成java代码。
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' } }
生成dex
在这个过程中,构建工具会调用dx.bat将所有的class文件(第四步生成的)转化为classes.dex文件,dx会将class转化为Dalvik字节码,生成常量池,消除冗余数据等。
通过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());
通过JarSinger工具,对上面生成的apk进行debug或者release签名
通过jarsinger命令签名
通过zipalign工具,将签名后的apk进行对齐处理。
调用buildtoolszipalign,对签名后的apk文件进行对齐处理,使apk中所有的资源文件距离文件起始偏移为4字节的整数倍,从而在通过内存映射访问apk文件时会更快。同时也减少了在设备上运行时的内存消耗
3. 附录(参考文章)
Android App 构建流程分析
Android构建过程分析
最后
以上就是开心大雁为你收集整理的Android面向面试复习---Android构建流程Android构建流程的全部内容,希望文章能够帮你解决Android面向面试复习---Android构建流程Android构建流程所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复