Android 应用模块的构建

news2025/1/11 14:52:25

Google文档说明:https://developer.android.com/studio/build?hl=zh-cn

Android 构建系统会编译应用资源和源代码,然后将它们打包成 APK 或 Android App Bundle 文件,供您测试、部署、签名和分发。Android Studio 使用高级构建工具包 Gradle 来自动执行和管理构建流程,同时也允许您自行指定灵活的 build 配置。每项 build 配置均可定义各自的一组代码和资源,同时重复利用所有应用版本共用的部分。

构建流程

构建流程涉及许多将项目转换成 Android 应用软件包 (APK) 或 Android App Bundle (AAB) 文件的工具和流程。构建流程非常灵活,因此了解它的一些底层工作原理会很有帮助。
在这里插入图片描述
Android 应用模块的构建过程(如上图所示)遵循以下一般步骤:

  1. 编译器将你的源代码转换为 DEX(Dalvik 可执行文件)文件,其中包括在 Android 设备上运行的字节码,以及其他所有内容到编译资源中。
  2. APKPackager将DEX文件和编译后的资源组合成一个APK。但是,在将你的应用安装并部署到Android设备之前,必须对APK进行签名。
  3. APKPackager使用调试或发布密钥库对你的 APK 进行签名:
    3.1 如果你正在构建应用程序的调试版本,即你打算仅用于测试和分析的应用程序,则打包程序会使用调试密钥库对你的应用程序进行签名。Android Studio 使用调试密钥库自动配置新项目。
    3.2如果你正在构建你打算在外部发布的应用程序的发布版本,则打包程序会使用发布密钥库对你的应用程序进行签名。
  4. 在生成最终的 APK 之前,打包程序使用zipalign工具来优化你的应用程序,以便在设备上运行时使用更少的内存。

在构建过程结束时,你将拥有应用的调试 APK 或发布 APK,可用于部署、测试或发布给外部用户。

流程概述

一个完整的 Android 项目可能包含多个 module,而从宏观上看每一个 module 中的内容可以分为 2 部分:Resources 资源文件,Java 或者 Kotlin 源代码。因此整个项目的编译打包过程也是针对这 2 部分来完成。

资源文件编译

资源文件包括项目中 res 目录下的各种 XML 文件、动画、drawable 图片、音视频等。AAPT 工具负责编译项目中的这些资源文件,所有资源文件会被编译处理,XML 文件(drawable 图片除外)会被编译成二进制文件,所以解压 apk 之后无法直接打开 XML 文件。但是 assets 和 raw 目录下的资源并不会被编译,会被原封不动的打包到 apk 压缩包中。

资源文件编译之后的产物包括两部分:resources.arsc 文件和一个 R 文件。前者保存的是一个资源索引表,后者定义了各个资源 ID 常量。这两者结合就可以在代码中找到对应的资源引用。

(1) R 文件 中的资源 ID 是一个 4 字节的无符号整数,用 16 进制表示。其中,最高的 1 字节表示 Package ID,次高的 1 个字节表示 Type ID,最低的 2 字节表示 Entry ID。
(2) resources.arsc 相当于一个资源索引表,也可以理解为一个 map 映射表。其中 map 的 key 就是 R.java 中的资源 ID,而 value 就是其对应的资源所在路径。实际上 resources.arsc 里面还有其他信息

源代码编译

项目中的源代码首先会通过 javac 编译为 .class 字节码文件,然后这些 .class 文件连同依赖的三方库中的 .class 文件一同被 dx(D8) 工具优化为 .dex 文件。如果有分包,那么也可能会生成多个 .dex 文件。

实际上源代码文件也包括 AIDL 接口文件编译之后生成的 .java 文件,Android 项目中如果包含 .aidl 接口文件,这些 .aidl 文件会被编译成 .java 文件。

打包阶段

使用工具 APK Builder 将经过编译之后的 resource 和 .dex 文件一起打包到 apk 中,实际上被打包到 apk 中的还有一些其他资源,比如 AndroidManifest.xml 清单文件和三方库中使用的动态库 .so 文件。

签名阶段

apk 创建好之后,还不能直接使用。需要使用工具 jarsigner 对其进行签名,因为 Android 系统不会安装没有进行签名的程序。签名之后会生成 META_INF 文件夹,此文件夹中保存着跟签名相关的各个文件。

APP优化

签名之后的 apk 应该是可以正常安装使用了,但是实际打包过程还会多一步使用工具 zipalign 对 apk 优化操作。

zipalign:是一种 zip 归档文件对齐工具。它对 apk 中的未压缩资源(图片、视频等)进行对齐操作,相对于文件开头都是对齐的。这样一来,你便可直接通过 mmap(2) 访问这些文件,而无需在 RAM 中复制相关数据并减少了应用的内存用量。

APK文件结构

APK(Android Package),APK 文件由一个 Zip 压缩文件组成,其中包含构成应用的所有文件。这些文件包括 Java 类文件、资源文件和包含已编译资源的文件。其文件结构如下:

APK 包含以下目录:

  • META-INF/:包含 CERT.SF 和 CERT.RSA 签名文件,以及 MANIFEST.MF 清单文件。系统安装APK时,应用管理器会按照对应算法对包里文件做校验,如果校验结果与META-INF中内容不一致,则不会安装这个APK。
  • assets/:包含应用的资源;应用可以使用 AssetManager 对象检索这些资源。
  • res/:包含未编译到 resources.arsc 中的资源。
  • lib/:包含特定于处理器软件层的已编译代码。此目录包含每种平台类型的子目录,如 armeabi、armeabi-v7a、arm64-v8a、x86、x86_64 和 mips。

APK 还包含以下文件。在这些文件中,只有 AndroidManifest.xml 是必需的。

  • resources.arsc:包含已编译的资源。此文件包含 res/values/ 文件夹的所有配置中的 XML 内容。打包工具会提取此 XML 内容,将其编译为二进制文件形式,并压缩内容。此内容包括语言字符串和样式,以及未直接包含在 resources.arsc 文件中的内容(例如布局文件和图片)的路径。
  • classes.dex:包含以 Dalvik/ART 虚拟机可理解的 DEX 文件格式编译的类。
  • AndroidManifest.xml:包含核心 Android 清单文件。此文件列出了应用的名称、版本、访问权限和引用的库文件。该文件使用 Android 的二进制 XML 格式。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/21408.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python学习----面向对象

面向对象思想就不说了,和java一样。这是为了自己能够一直看教程不走神做得笔记。 类的定义和赋初值 成员变量和成员方法,含义和java一样。 成员变量的申明没啥好记得 需要关注得是成员方法,在定义成员方法得时候,需要传入self关…

设计模式学习笔记 - 组合模式

设计模式学习笔记 - 组合模式一、学校院系展示问题二、传统方案解决学校院系展示问题三、组合模式介绍1、基本介绍2、组合模式原理四、组合模式解决学校院系展示问题五、组合模式在JDK集合的源码分析六、组合模式的注意事项和细节一、学校院系展示问题 展示一个学校院系结构&am…

机器学习可视化技术(Towards Data Science)

介绍 作为任何数据科学项目的一部分,数据可视化在了解更多可用数据和识别任何主要模式方面发挥着重要作用。 如果能够使分析中的机器学习部分尽可能直观,那不是很好吗? 在本文中,我们将探讨一些可以帮助我们应对这一挑战的技术&am…

HCIA 链路聚合与LACP

一、前言 虽然很多文章在介绍链路聚合时会从链路备份的角度来介绍链路聚合的作用,然后再说其有提升链路带宽的作用,但我感觉链路聚合主要还是提升链路带宽的作用,链路备份只是顺带的不是主要目标。 二、链路聚合 考虑下面的网络&#xff0…

Windows 环境下的 Socket 编程 3 - 基于 TCP 的服务器/客户端

基于 TCP 的服务器端/客户端 绝大多数 TCP 服务器端都按照如下顺序调用: 在 Windows 环境下,代码表示为: WSADATA wsaData;SOCKET hServSock, hClntSock;SOCKADDR_IN servAddr, clntAddr;int szClntAddr;/*Windows 环境 Socket 编程必须*/i…

leetcode:6243. 到达首都的最少油耗【变种子树大小统计 + 从边的角度出发 + 思维转换】

目录题目截图题目分析ac code总结题目截图 题目分析 0作为root从边的角度出发每个点都向0的方向聚集比如大家已经由四面八方聚集到了x,x的fa固定的,假设为y那么x到y要多少辆车?设size(x)为x子树大小x到y需要ceil&…

2022年第十三届蓝桥杯大赛湖南中医药大学第2场选拔赛(部分总结)

文章目录2008: 简单整数问题2005: 飞行棋2074: 几乎回文串2101: 通行密令2089: 密码1867: X星救援站2085: 千里走单骑2093: 最长等比子序列2087: 跳水比赛总结2008: 简单整数问题 [命题人 : admin] 时间限制 : 1.000 sec 内存限制 : 128 MB 题目描述 小明最近经常会思考一些关…

Oracle-AWR快照无法自动生成问题分析

前言: 近期处理了一起数据库AWR快照无法自动生成的问题,用户发现数据库在近期出现了AWR快照无法自动生成的问题,数据库整体负载正常,后面分析发现原因是由于AWR快照在生成过程中,执行的SQL语句出现超时导致。 问题: Oracle11.2.…

【课上笔记】第八章 图

图 8.1图的基本概念 8.1.1图的定义和术语 1.图的定义 ​ 图(Graph)由一个顶点集合Vn和一个边(或者弧)集合En组成,通常记为: G=(Vn,En)其中,Vn中有n(n>0)个顶点,En中有e&#…

stm32cubemx hal学习记录:FreeRTOS任务管理

一、基本配置 1、配置RCC、USART1、时钟84MHz 2、配置SYS,将Timebase Source修改为除滴答定时器外的其他定时器,因为滴答定时器被用于时钟基准,可以实现任务切换。Timebase Source是实现HAL_Delay等延时函数的 3、初始化LED的两个引脚 4、开…

HTTP VS HTTPS

一、网络协议 网络协议是计算机之间为了实现网络通信而达成的一种“约定”或者”规则“,有了这种”约定“,不同厂商的生产设备,以及不同操作系统组成的计算机之间,就可以实现通信。 二、HTTP与HTTPS 1、HTTP (1&am…

Autoware中的点云3D聚类算法,保姆级算法阅读注释,一看就懂,非常详细!

综述 五大模块&#xff0c;看完等于点云入门~&#xff08;dog&#xff09; 实际步骤 输入激光雷达获得的点云 pcl::PointCloud<pcl::PointXYZ>::Ptr header:seq:序列长度stamp:获取点云的时刻frame_id:坐标系名称 points:保存点云的容器,类型为std::vector width:类型…

大小端的判断

1.关于进制 1.1 进制数与位数 n进制数中&#xff0c;一位最多表示到数字n-1 十进制中1位最多能表示9个数字 满则溢&#xff0c;溢则进位。 拿我们最常用的是10 进制来举例说明&#xff0c; 构成十进制的最小单位数: 1 2 3 4 5 6 7 8 9 0 十进制(其实只有从9到0这几个数字,1…

OSPF笔记(四):OSPF五种报文和五种常见LSA

一、OSPF五种报文 (使用IP承载&#xff0c;可靠&#xff09; 1.1 hello&#xff1a; 发现和维护邻居关系 &#xff0c;以太网10s一次 1.2 DBD&#xff1a; 发送链路状态数据库摘要 1.3 LSR&#xff1a; 请求发送特定的链路状态信息&#xff08;请求包&#xff09; 1.4 LSU&…

Pr2023(Premiere Pro)中文版软件下载「附带安装教程」

Premiere Pro 23.0 版专为帮助编辑人员制作创意内容而设计&#xff0c;提供了出色的字幕工具组合。借助改进功能&#xff08;如批量编辑时间轴中的标题剪辑、灵活的对齐控件等&#xff09;简化您的标题和图形工作流程。此版本包含稳定性和性能方面的基础改进&#xff0c;包括更…

用 Flutter 轻松做个红包封面

前言 在 Flutter 的开发中&#xff0c;最常见的就是层层的组件嵌套&#xff0c;因此不可避免会遇到子组件如何适配父组件的问题。比如&#xff0c;按钮的可点击区域是否要占满整个父组件&#xff1f;图片是居中还是居左&#xff1f;这些问题可以通过 Flutter 提供的FittedBox …

Rancher - 更换Linux发行版

Rancher - 更换Linux发行版 时间&#xff1a;2022年11月20日21:24:29 推荐&#xff1a;Linux CentOS7.9 一、为什么要更换/升级&#xff1f; CentOS7.9 停止维护时间 2024年06月30日 AnolisOS8 阿里云推出的Linux发行版&#xff0c;支持多计算架构&#xff0c;也面向云端场景…

公众号免费搜题系统搭建

公众号免费搜题系统搭建 本平台优点&#xff1a; 多题库查题、独立后台、响应速度快、全网平台可查、功能最全&#xff01; 1.想要给自己的公众号获得查题接口&#xff0c;只需要两步&#xff01; 2.题库&#xff1a; 查题校园题库&#xff1a;查题校园题库后台&#xff08;…

算法篇-------贪心2

文章目录题目1-------活动选择题目2-----无重叠区间题目3------最多可以参加的会议数目题目4-------去除重复字母题目5------移掉K位数字题目6-----拼接最大数题目1-------活动选择 有n个需要在同一天使用同一个教室的活动a1, a2, …, an&#xff0c;教室同一时刻只能由一个活…

MapReduce基础

MapReduce入门 理解MapReduce的思想 MapReduce的思想核心是先分再合&#xff0c;分而治之所谓的分而治之&#xff0c;就是把一个复杂的问题&#xff0c;按照一定的分解方法分为等价的规模的若干部分&#xff0c;然后捉个解决&#xff0c;分别找出各个部分的结果没然后将各个部…