文档章节

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 Gradle权威指南(下)

前言 最近看了一本书《Android Gradle 权威指南》,收获挺多,就想着来记录一些读书笔记,方便后续查阅。 本篇内容是基于上一篇:读书笔记--Android Gradle权威指南(上) 上一篇中我们讲了:...

请叫我大苏
05/27
0
0
Gradle和Gradle插件

文章是翻译整理的官网文档developer.android/studio/build/ 一、Gradle和Gradle插件 Gradle:Gradle是一款帮助开发人员更快更好的编译、自动化运行和分发软件的工具。Gradle具有无与伦比的通...

都有米
06/19
0
0
Android多渠道打包相关介绍

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

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

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

拉偶有所依
2015/01/09
0
1

没有更多内容

加载失败,请刷新页面

加载更多

Vue学习资料

一直以为Vue是依赖nodejs的。 作为前端也可以耦合性就很低了。 //npm包管理器 进行管理npm install vue//初始化一个项目vue init//本地调试npm run dev//编译完成 ...

大灰狼wow
34分钟前
1
0
fullcalendar重新渲染

uiCalendarConfig.calendars.lesson_calendar.fullCalendar('removeEvents');var ym = uiCalendarConfig.calendars.lesson_calendar.fullCalendar('getView').title;$scope.get_lesson(y......

人来疯啊
39分钟前
1
0
多渠道打包总结

https://www.jianshu.com/p/2130db7584c8 https://blog.csdn.net/u011153817/article/details/50772496...

塔塔米
48分钟前
1
0
android -------- Data Binding的使用 ( 六) 自定义属性

今天来说说DataBinding在自定义属性的使用 默认的android命名空间下,我们会发现并不是所有的属性都能直接通过data binding进行设置,比如margin,padding,还有自定义View的各种属性。 默认...

切切歆语
54分钟前
1
0
收邮件 下载附件

uses IdMessage, IdMessageParts, IdAttachment, IdGlobalProtocols, ...;procedure SaveAttachmentsFromFile(FileName: String)var IdMessage: TIdMessage; MsgPart: Ti......

vga
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部