Android APK打包流程

article/2025/11/8 23:51:44

目录

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

一、概述

今天主要讲一下Android程序的生成步骤,即Android打包成APK的流程。

通常情况下,在开发过程中打包APK是一件很简单的事,主要可以通过两种方式:

  • 用Eclipse或者Android Studio集成开发环境直接生成APK;
  • 使用Ant工具在命令行方式下打包APK。

不过不管哪种方式,打包APK的本质过程都是一样的。

APK文件: 其实就是一个压缩包,当你解压以后会发现它内部主要就是资源文件classes.dex,这个classes.dex就是Android系统Dalvik虚拟机的可执行文件。

APK打包的流程图:
在这里插入图片描述

二、打包流程


1、打包资源文件,生成R.java文件

打包资源的工具是aapt(The Android Asset Packaing Tool),位于android-sdk/platform-tools目录下。在这个过程中,项目中的AndroidManifest.xml文件布局文件XML都会编译,然后生成相应的R.java

2、处理aidl文件,生成相应的Java文件

这一过程中使用到的工具是aidl(Android Interface Definition Language),即Android接口描述语言。位于android-sdk/platform-tools目录下。aidl工具解析接口定义文件然后生成相应的Java代码接口供程序调用。

如果在项目没有使用到aidl文件,则可以跳过这一步。

3、编译项目源代码,生成class文件

项目中所有的Java代码,包括R.java.aidl文件,都会变Java编译器(javac)编译成.class文件,生成的class文件位于工程中的bin/classes目录下。

4、转换所有的class文件,生成classes.dex文件

dx工具生成可供Android系统Dalvik虚拟机执行的classes.dex文件,该工具位于android-sdk/platform-tools 目录下。

任何第三方的libraries.class文件都会被转换成.dex文件

dx工具的主要工作是将Java字节码转成成Dalvik字节码压缩常量池消除冗余信息等。

5、打包生成APK文件

所有没有编译的资源(如images等)编译过的资源和.dex文件都会被apkbuilder工具打包到最终的.apk文件中。

打包的工具apkbuilder位于 android-sdk/tools目录下。apkbuilder为一个脚本文件,实际调用的是android-sdk/tools/lib/sdklib.jar文件中的com.android.sdklib.build.ApkbuilderMain类

6、对APK文件进行签名

一旦APK文件生成,它必须被签名才能被安装在设备上。

在开发过程中,主要用到的就是两种签名的keystore。一种是用于调试的debug.keystore,它主要用于调试,在Eclipse或者Android Studio中直接run以后跑在手机上的就是使用的debug.keystore。另一种就是用于发布正式版本的keystore

7、对签名后的APK文件进行对齐处理

如果你发布的apk是正式版的话,就必须对APK进行对齐处理,用到的工具是zipalign,它位于android-sdk/tools目录下。

对齐的主要过程是将APK包中所有的资源文件距离文件起始偏移为4字节整数倍,这样通过内存映射访问apk文件时的速度会更快。

对齐的作用就是减少运行时内存的使用。


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

相关文章

第四章 常见 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…

构建用于签名/加密双证书测试体系的可执行命令

注意事项 生成证书请求的填写 范例Subject: C CN, ST Beijing, L Beijing, O MSI, OU msi, CN ca, emailAddress cagmssl.com 前面的步骤存在错误&#xff0c;后面改用脚本进行证书生成&#xff0c;阅读时请跳过前面错误的内容 错误的内容 -> 开始 CA 生成私钥 o…