频道栏目
首页 > 资讯 > Android > 正文

Android面向问题:Android构建流程

18-01-25        来源:[db:作者]  
收藏   我要投稿

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文件时会更快。同时也减少了在设备上运行时的内存消耗

相关TAG标签
上一篇:ext js的文件目录结构简介
下一篇:ActiveMQ基本使用详情
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站