文档章节

Android构建打包过程

k
 kim366
发布于 2016/05/13 19:17
字数 1209
阅读 7
收藏 0

        Google推出AS已经有一段时间,官方文档中也已经开始推荐使用AndroidStudio。不过,从eclipse转向AndroidStudio似乎并没有那么容易,最近开始尝试用AndroidStudio进行开发,各种问题层出不穷。其中,AS中使用Gradle进行构建,使用DSL语言进行配置脚本编写是最难理解的地方。下面是从官网找到的apk程序构建打包的详细说明,补充一下这些知识点或许可以更好地理解何为构建,对AS中的Gradle也会更容易接受。

        

         构建系统概况

         新的Android SDK构建系统

    Android构建是用于构建测试运行和打包应用程序的工具套件。 这个构建是一个综合的工具,可以从as的菜单栏或者从命令行独立运行。这个构建系统可以完成如下工作:

  • 定制,配置,和继承构建过程
  • 使用相同的项目和模块,通过不同的特征创建多个apk
  • 重复使用资源集中代码和资源

    Android构建系统的灵活性,使你可以完成上面的工作,而不用修改你的核心资源文件。

         构建过程详解

        在生成.apk的构建过程中涉及到很多工具和步骤,各个步骤会生成对应的中间文件,如果使用AS的话,完整的构建过程在每次运行项目(project)或者模块(module)的task任务时都会发生。 构架过程非常灵活, 需要理解的是各个阶段所发生的事情都是可配置和可扩展的。下图描述了在一次构建过程中涉及到的不同的工具和过程。

    

    典型的构建过程如下所示,构建系统会合并来自配置文件中的所有资源,如flavors, build types, dependencies等节点下的内容, 如果不同的文件夹包含具有相同名字和设置的资源,则覆盖优先级顺序是:dependencies 覆盖build types, build type 覆盖 flavors, flavors覆盖主要资源目录。 

    Android Asset Package Tool(aapt)会获取所有的应用程序资源文件,并进行编译,如AndroidManifest.xml, R文件会在此阶段生成,使你可以从java代码中引用。  

    aidl工具转换所有的.aidl接口,所有的R文件和.aidl文件被编译,并输出.class文件。

    dex工具将所有的.class文件转换成dalvik字节码,module中包含的所有第三方库和.class文件也会被转换成.dex文件,以使他们能够被打包进.apk文件中。

    所有没有编译过的资源(如图片),编译过的资源,以及.dex文件会被发送到apkbuilder工具中被打包进.apk文件中。

         一旦.apk文件被构建完成,就使用debug模式或者release模式的签名key进行签名,然后安装进设备中。最后,如果程序使用release模式签名的,则必须通过zipalign工具进行排列。排列最终的.apk文件会在程序运行时节省内存。

    

    注: App有64k的方法引用限制,如果app达到这个限制,构建过程就会输出下面的错误信息:
    Unable to execute dex: method ID notin[0,0xffff]:65536.
    要避免这个错误,可以查看Building Apps with Over 65K Methods.


    如果对上面的内容还是不太理解的话,可以再看看《Android软件安全与逆向分析》中第四章第一节,对这个过程的详细分析,基本概念如下,七个步骤(参考图与上图一样):

    第一步: 打包资源文件生成R文件。这个过程由sdk\platform-tools下的aapt工具完成。反编译过app的同学应该知道,反编译出来会有个resources.arsc文件,这个文件也是在这个生成的。

    第二步: 处理aidl文件,生成相应的java文件。这个过程由sdk\platform-tools下的aidl工具完成。

    第三步: 编译工程源代码,生成相应的class文件。这一步由javac编译src目录下的所有java代码,如果需要的话,NDK中的本地代码也是在这一步中被编译的。

    第四步: 转换所有的class文件,生成classes.dex文件。使用到的工具为sdk\platform中的dx。

    第五步: 打包生成apk文件。打包工具为apkbuilder。

    第六步: 对apk进行签名。

    第七步: 对签名后的apk文件进行对齐处理。需要用到的工具为zipalign。对其的原理为,使apk中的所有的资源文件距离文件起始偏移为4字节整数倍,这样通过内存映射访问apk文件时的速度会更快。

    


本文转载自:http://blog.csdn.net/oyangyujun/article/details/46934487

共有 人打赏支持
k
粉丝 1
博文 129
码字总数 0
作品 0
朝阳
私信 提问
为什么是Gradle? -- Gradle教程(一)

原文链接:http://www.woaitqs.cc/gradle/2016/12/20/android-gradle-1.html 开发 Android 的同时,也应该了解其构建构建工具。特别是在实际的生产开发项目中,对于需要分发的包有各式各样的...

_qisen
2016/12/20
0
0
深入理解Android工程的编译过程

现在很多人想对Android工程的编译和打包进行自动化,比如建立每日构建系统、自动生成发布文件等等。这些都需要我们对Android工程的编译和打包有一个深入的理解,至少要知道它的每一步都做了什...

鉴客
2011/12/09
6K
7
cordova 所有知识大总结

具体详细知识请看个人博客 网址:输入链接说明 具体详情: 我接下来主要将如何搭建。 1.首先你需要下载几样东西 1.jdk. 2.android_SDK. 2.安装这两个,并配置环境变量 这里jdk的环境变量配置...

哈拉鱼
2016/07/18
0
0
Android多渠道打包相关介绍

一、多渠道打包概述 由于国内存在着有众多的应用市场,在不同的应用市场可能有不同的统计需求,为此Android开发人员需要为每个应用市场发布一个安装包,这里就引出了Android的多渠道打包。在...

Ruheng
06/23
0
0
转载:最强最全干货分享:Android开发书籍、教程、工具等

最全干货分享,本文收集整理了Android开发所需的书籍、教程、工具、资讯和周刊各种资源,它们能让你在Android开发之旅的各个阶段都受益。 入门 《Learning Android(中文版)》 本书为Andro...

拉偶有所依
2015/01/09
152
3

没有更多内容

加载失败,请刷新页面

加载更多

MicroStation Developer Shell

REG ADD HKLM\SOFTWARE\Microsoft\VisualStudio\8.0\Setup\VS /v ProductDir /t REG_SZ /d "C:\Program Files (x86)\Microsoft Visual Studio 8\VC\" /reg:32 CALL "C:\Program Files (x86)\......

oready
3分钟前
0
0
CURL常用命令

下载单个文件,默认将输出打印到标准输出中(STDOUT)中 curl http://www.centos.org 通过-o/-O选项保存下载的文件到指定的文件中: -o:将文件保存为命令行中指定的文件名的文件中 -O:使用U...

SuShine
8分钟前
0
0
docker搞个wordpress

1.先把wordpress的镜像下载下来 docker pull wordpress 2.下载mysql docker pull mysql:lastest 3.启动mysql docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:t......

无极之岚
20分钟前
0
0
【宇润日常疯测-005】PHP 中的 clone 和 new 性能比较

clone和new本不应该放在一起比较,它们的作用是不同的。但可能有一些场景下,可以用clone也可以用new,那么这时候我们选哪个呢? 我编写了两个测试,第一个是声明一个空类,第二个是带构造方...

宇润
20分钟前
0
1
点击按钮弹出类似IOS 底部 dialog

implementation 'com.baoyz.actionsheet:library:1.1.7' 然后设置按钮点击监听,,调用下列代码即可 ActionSheet.createBuilder(this, getSupportFragmentManager()) ......

lanyu96
23分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部