博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[Android] 基于 Linux 命令行构建 Android 应用(三):构建流程
阅读量:5080 次
发布时间:2019-06-12

本文共 1546 字,大约阅读时间需要 5 分钟。

  Android 应用的构建过程就是将 Android 项目中的文件和资源进行编译和打包,最后将结果输出到 .apk 文件。.apk 文件是保存二进制文件的容器,它包含了运行安卓应用所需的所有信息,例如编译后的 .dex 文件(.class 对应的 Dalvik 字节码),一个二进制的 AndroidManifest.xml 文件,编译后的资源(resources.arsc)和未编译资源。

 

  如果你使用 Eclipse 进行开发,ADT 插件能持续构建你的项目,并将 .apk 文件自动输出到项目的 bin 文件夹,因此整个构建过程你无需做任何事情。

 

  如果你不是使用 Eclipse 进行开发,你可以使用 Ant + build.xml,build.xml 是 Ant 构建文件,位于项目根目录下。Ant 会自动调用构建工具来完成整个构建过程。

 

  为了让安卓应用运行在安卓设备上,你需要对安卓应用进行签名,签名分为调试(debug)和发行(release)两种模式。在开发阶段,一般使用调试模式进行签名,这时构建工具会使用一个调试密钥(debug key)和密码,这样你就不必每次构建时都输入密码。当你想正式将安卓应用通过 Google Play 公开发行时,你必须使用你的私钥在发行模式下构建你的应用。

 

  Eclipse 和 Ant 都支持两种模式下的自动签名。

 

  下图描述了从构建到运行安卓应用的流程与组件:

 

构建过程

 

  在生成 .apk 的整个构建过程中会用到许多工具,需要处理与生成许多临时文件。

 

  下图描述整个构建过程所使用的工具和相关文件:

 

  整个构建过程大体如下:

  ● 安卓资源打包工具(Android Asset Packaging Tool,简称 aapt)负责编译所有资源文件,例如 AndroidManifest.xml 和描述 Activity 的 XML 文件,并生成一个 R.java 文件,这样你就可以在 Java 代码中引用你的资源文件。

  ● aidl 工具将所有 .aidl 接口转换为 Java 接口。

  ● Java 编译器将项目中所有 Java 代码,包括 R.java 和 .aidl 文件编译成 .class 文件。

  ● dex 工具将 .class 文件转换为 Dalvik 字节码。所有第三方库和 .class 文件同样也会被转换为 Dalvik 字节码,这样它们才能最终一并打包到 .apk 文件中。

  ● apkbuilder 工具将所有未编译资源(例如图片)、编译后的资源和 .dex 一同打包到 .apk 文件。

  ● 当 .apk 文件生成后,还需要对其进行签名(调试或发行模式),否则该 .apk 文件无法安装到安卓设备。 

  ● 最后,当你使用发行模式签名后,你还需要使用 zipalign 工具调整 .apk 文件,这样做可以减少安卓应用运行在设备上的内存占用率。

 

  注意:安卓应用有 64K method reference 限制。如果达到该限制,构建过程中将打印以下错误信息:

Unable to execute dex: method ID not in [0, 0xffff]: 65536.

 

  你可以使用 和使用 来消除非必要的类引用。(Proguard 只在发行模式下有效)

 

 

注:

[1] 64K method reference limit 是指安卓编译器限制每个 .dex 文件只能引用 65536 个方法。

  

附:

1.

2. 了解关于应用签名:

  

转载于:https://www.cnblogs.com/ifantastic/p/3977672.html

你可能感兴趣的文章
JavaFX中ObservableValue类型
查看>>
杭电 1097 A hard puzzle
查看>>
[转载]INFORMIX锁机制及如何剖析其锁申辩(第二部门)
查看>>
Andriod-项目stymqjlb-学习笔记2-原型
查看>>
Web AppDomain
查看>>
JQuery创建规范插件
查看>>
AD 域服务简介(三)- Java 对 AD 域用户的增删改查操作
查看>>
Unity中Text渐变色,和Text间距
查看>>
bzoj1648:奶牛野餐
查看>>
springboot-web进阶(四)——单元测试
查看>>
没有清晰的职业规划,跳槽会很失败
查看>>
[spring mvc][转]<mvc:default-servlet-handler/>的作用
查看>>
Python字符串符号:双引号/单引号用法注解。
查看>>
黑暗城堡 最短路径生成树
查看>>
《软件调试》读书笔记:第13章 硬错误和蓝屏
查看>>
【转】由浅入深探究mysql索引结构原理、性能分析与优化
查看>>
java结合testng,利用XML做数据源的数据驱动示例
查看>>
正确理解ThreadLocal
查看>>
AtCoder Grand Contest 032-B - Balanced Neighbors (构造)
查看>>
第一个iOS程序-电子书
查看>>