android apk编译打包过程

article/2025/11/8 23:49:58

       Android安装包的后缀都是.apk, apk是Android Package的缩写。 解压apk文件后包含AndroidManifest.xml、assets目录、classes.dex(还可能有 classes2.dex,classes3.dex...classesN.dex)、lib目录、META-INF目录、res目录和resources.arsc。

                                           

     AndroidManifest.xml对应源代码中的AndroidManifest.xml, 但这里是编译过的,文件内容已经不同了。

     assets对应源代码的assets目录, 是直接复制过来的。

     classes.dex是包含所有Java文件对应的字节码。

     lib目录对应源代码中的libs目录,包含so文件。

     META-INF目录包含CERT.RSA、CERT.SF、MANIFEST.MF等, 保存了各个资源文件的SHA1值,用于校验资源文件是否被篡改,从而防止二次打包时资源文件被替换。

     res目录对应源码的res目录, 包含各种图片、xml等。

     resources.arsc包含了各个资源文件的映射, 可以理解为索引, 通过该文件能找到对应的资源文件信息。


打包过程:

                            

           这张图清晰的描述了整个打包过程, 可以跟Android SDK的build-tools目录对应起来。



Android编译打包过程主要分为如下7个步骤:

1.  aapt过程

    使用文件aapt/aapt2打包res目录资源文件, 生成R.java、resources.arsc和res目录。

      R.java保存了所有id的值, 数据类型都是整型。

 

2、aidl生成Java文件

   AIDL是Android Interface Definition Language的简称, 是Android跨进程通讯的一种方式。 检索工程里所有的aidl文件,并转换为对应的Java文件。


3、 Javac编译。

     使用JDK里的javac编译R.java、aidl生成的Java文件、Java源文件, 并生成.class文件。

                        

                        


4、 生成dex文件。

      通过dx工具将.class文件生成为classes.dex, 目前的gradle multi-dex编译方式会生成classes2.dex ... classesN.dex。


5、 生成apk文件。

     使用ApkBuilder将resources.arsc、res目录、AndroidManifest.xml、assets目录、dex文件打包成apk, 具体逻辑是在com.android.sdklib.build.ApkBuilder中实现的。


6、签名apk文件。

     使用apksigner为安装包添加签名信息。


7、 zipalign优化签名包。

      使用zipalign工具对签名包进行内存对齐操作, 即优化安装包的结构。


     综上所述, Android SDK中build-tools目录提供了各种程序, 都是独立可运行的,可以认为Android Studio编译打包过程是对这些工具的封装。


      只打包部分代码/资源需要设置gradle sourceSets, 多渠道打包可以参考美团做法或使用mulchannel

参考:

Android gradle SourceSets介绍与使用

Android Studio下项目构建的Gradle配置及打包应用变体

美团Android自动化之旅—生成渠道包

深入理解gradle编译-Android进阶篇


http://chatgpt.dhexx.cn/article/VCx6whCI.shtml

相关文章

Android APK打包流程

目录 一、概述二、打包流程1、打包资源文件,生成R.java文件2、处理aidl文件,生成相应的Java文件3、编译项目源代码,生成class文件4、转换所有的class文件,生成classes.dex文件5、打包生成APK文件6、对APK文件进行签名7、对签名后的…

第四章 常见 Android 文件格式(一)(库文件、APK)

文章目录 库文件jar 包aar 包手动编写一个 aar 库APKAPK 文件结构APK 文件的生成流程APK 的安装流程通过系统程序安装(开机时安装)通过 Android 市场安装通过 adb 命令安装手机自带安装(通过 SD 卡里的 APK 文件安装)通过分析 packageinstaller.apk 的实现步骤了解 APK 的安…

android apk包解压缩,Android 解压APK文件

最近一个项目里需要得到Android已安装程序的签名文件(CERT.RSA)的SHA1值,所以就调研解压APK文件。 通过包名来得到已安装程序在系统的安装包路径。 private static String getApkPath(String pkgName) { PackageManager pm mContext.getPackageManager(); Applicat…

Android中APK打包流程

aapt: android application package tool,SDK (Android打包流程图) #Android打包流程 1.通过aapt工具将 资源文件(res)、清单文件(AndroidManifest.xml)生成对应的R.java文件 * 在项目的根目录下新建 gen目录,并且依次在gen目录下新建清单文件总包名对应的文件目录 …

android打包文件

直接把debug版本安装到真机会出现问题,和模拟器显示上的有点不一致。。亲身试验 接下来综合总结一下我看到其他博主们的经验 为什么要打包: apk文件就是一个包,打包就是要生成apk文件,有了apk别人才能安装使用。打包分debug版和re…

如何打开Android 打包文件 .apk 文件

在学习Android开发的过程中,常常想知道一些界面设计优良的应用是如何设计的。Android应用最后发布是以 .apk 文件提供的。那么如何在PC上打开这个 .apk文件呢? .apk 文件实际就是.zip 文件,可以使用WinZip ,WinRar 等来解压,一个简…

APK文件详解 + 打包流程

记录个人学习历程,毫无技术可言 前言 要学习Android必然需要了解apk的目录结构以及打包流程,还有各种文件详解 提示:以下是本篇文章正文内容,下面案例可供参考 一、APK文件详解 本质就是一个压缩包,可以直接进行解压…

Android 打包流程之aapt打包资源文件

上一篇:Android打包流程之资源管理 Android应用最终是以apk的形式放在手机上安装并运行的,而负责将资源文件和代码进行打包的工具就叫appt,全称Android Asset Packaging Tool,翻译过来就是Android资源打包工具,是Andro…

Android文件格式

在Android的priv-app目录下发现有oat类型的文件夹 什么是oat? It’s Of Ahead Time, a silly reordering of Ahead Of Time. We went with that because then we say that process of converting .dex files to .oat files would be called quakerizing and that wo…

Android项目打包生成apk文件

Android开发打包生成APK文件 打包apk文件分为两种 无需密钥的apk有密钥的apk(常规) 他们的区别只是就是安全问题。 1.没有密钥的apk 点击之后会自动生成没有密钥的APK。 在编辑器的右下角会出现该弹窗,点击location会帮你找到该文件 2.有密钥的APK 1.找到bui…

Java利用mpxj解析mpp格式文件

转载请注明来源:http://blog.csdn.net/loongshawn/article/details/51038051 《Java利用mpxj解析mpp格式文件》《SpringBoot添加Email发送功能》《SpringBoot配置log4j输出日志》《SpringBoot定时任务说明》《SpringBoot接口服务处理Whitelabel Error Page》《构建…

java解析mpp文件(包含层级关系)

我用的是递归循环的&#xff0c;不限制有多少子级关系都可以拿到 首先引入解析mpp所需依赖 <dependency><groupId>net.sf.mpxj</groupId><artifactId>mpxj</artifactId><version>7.1.0</version></dependency>解析所用实体类…

Date转换年月日

timebasic.js //时间戳转年月日 export function format(shijianchuo) {//shijianchuo是整数&#xff0c;否则要parseInt转换var time new Date(shijianchuo);var y time.getFullYear();var m time.getMonth() 1;m m < 10 ? "0" m : m;var d time.getDate…

C# 接口中DateTime类型字段返回年月日格式,去掉时分秒的数据

背景 在我们平时写接口的时候&#xff0c;避免不了这样一个问题&#xff0c;数据库中存的字段类型为datetime,代码中对应的实体类也是DateTime类型的字段&#xff0c;于是在读取数据库内容之后返回的数据也是DateTime类型的值&#xff0c;比如2022-10-24 18:34:56.110&#xf…

vue3-用dayjs将时间戳转为年月日格式

已知&#xff0c;格式化时间&#xff1a;dayjs(cellValue).format(YYYY-MM-DD) 用法&#xff1a; import dayjs from dayjs;dayjs(时间戳).format(YYYY-MM-DD HH:mm:ss); 如&#xff0c;在get请求中使用&#xff1a; service.get(/trace/sourceSearchInput.value).then(res …

Java但中获取时间将时间转换成字符串格式(年月日格式)

一:直接上马拿走&#xff1a; package cn.wyj.one;import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date;/*** 测试时间对象和字符串之间的相互转化* DateFormat抽象类和SimpleDateFormat实现类的使用* author 86155**/public class Demo2…

Excel修改日期格式:日月年-年月日

最近处理数据&#xff0c;遇到需要处理一下日期格式&#xff0c;记一下。。。 1、原格式 2、新建Excel表&#xff0c;复制到表中&#xff0c;选择列&#xff0c;数据-分列&#xff0c;下一步…,选择列格式为“DMY”,点击完成 3、效果(若不成功&#xff0c;可以试一试其他的)

各种加密证书

证书相关知识 PFX文件属于数字证书。pfx数字证书既包含有公钥又包含私钥&#xff0c;cer | crt数字证书只包含公钥。参考 JKS&#xff08;Java Key Store&#xff09;就是利用Java Keytool 工具生成的Keystore文件&#xff0c;JKS文件由公钥和密钥构成&#xff0c;其中的公钥…

公钥,私钥,数字签名,证书

今天&#xff0c;我读到一篇好文章。 它用图片通俗易懂地解释了&#xff0c;"数字签名"&#xff08;digital signature&#xff09;和"数字证书"&#xff08;digital certificate&#xff09;到底是什么。 我对这些问题的理解&#xff0c;一直是模模糊糊…

国密SSL证书保障网站安全

国内很多网站为了网站安全都会部署SSL证书&#xff0c;目前市面上申请到的SSL服务器证书基本都是采用RSA国际算法&#xff0c;市场上80%的SSL服务器证书都是由国外CA尤其是美国为主的CA签发的证书。 网络安全就是国家安全&#xff0c;网络安全的对手也已经不仅仅是黑客&#xf…