java打包apk_APK打包流程
APK结构
apk是一个压缩包,里面有lib,META-INF,classes.dex,res,resources.arsc文件夹和文件。下面看看它们各自的作用。
初略流程
谷歌官方给出的打包流程图。
先是把代码编译成Dex,然后是和资源文件整合成一个APK,再者加签名,最后出来之前还要用zipalign工具优化一下。
细化流程
上面这个图主要是有7个打包流程。
1.打包资源文件,生成R.java文件
aapt来打包res资源文件,生成R.java、resources.arsc和res文件。
res目录
R.java文件
R.java是我们在编写代码的时候会用到的,里面有静态内部类,资源等。
resources.arsc文件
resources.arsc这个文件记录了所有的应用程序资源目录的信息,包括每一个资源名称、类型、值、ID以及所配置的维度信息。是一个资源索引表,在给定资源ID和设备配置信息的情况下能快速找到资源。
2.处理aidl文件,生成相应的Java文件
aidl(Android Interface Definition Language,Android接口描述语言),位于android-sdk/platform-tools目录下。aidl工具解析接口定义文件然后生成相应的Java代码接口供程序调用。如果项目没用到aidl则跳过这一步。
3.编译项目源代码,生成class文件
Java Compiler阶段。项目中所有的Java代码,包括R.java和.aidl文件,都会变Java编译器(javac)编译成.class文件,生成的class文件位于工程中的bin/classes目录下。
4.转换所有的class文件,生成classes.dex文件
dex阶段。通过dx工具,将.class文件和第三方库中的.class文件处理生成classes.dex文件。该工具位于android-sdk/platform-tools 目录下。dx工具的主要工作是将Java字节码转成成Dalvik字节码、压缩常量池、消除冗余信息等。
5.打包生成APK文件
apkbuilder阶段。通过apkbuilder工具,将aapt生成的resources.arsc和res文件、assets文件和classes.dex一起打包生成apk。打包的工具apkbuilder位于 android-sdk/tools目录下。
6.对APK文件进行签名
Jarsigner阶段。通过Jarsigner工具,对上面的apk进行debug或release签名。
7. 对签名后的APK文件进行对齐处理
通过zipalign工具,将签名后的apk进行对齐处理。工具位于android-sdk/tools目录下。对齐的主要过程是将APK包中所有的资源文件距离文件起始偏移为4字节整数倍,这样通过内存映射访问apk文件时的速度会更快。对齐的作用就是减少运行时内存的使用。
总结一下
java打包apk_APK打包流程相关推荐
- Android APK文件结构 完整打包编译的流程 APK安装过程 详解
Android apk文件结构 打包编译的流程 Android官网 配置构建 流程 Configure your build The build process APK文件结构 assets res ...
- React 程序打包为App流程
文章目录 React 程序打包为App流程 前言 流程: 实现过程: 一.编写Web 端应该程序,配置package.json文件 二.打包React Web应用程序 三.使用HBulider 创建A ...
- java scala 混合打包_scala和java混合开发打包
如何进行scala和java混合开发打包? 首先创建maven工程,在pom.xml添加一下依赖 1.8 UTF-8 3.8.1 1.6.4 3.1 2.11.8 2.3.2 org.scala-la ...
- Java的各种打包方式
JAR (Java Archive file) 包含内容:class.properties文件,是文件封装的最小单元:包含Java类的普通库.资源(resources).辅助文件(auxiliary ...
- java程序打包为jar_将Java应用程序打包为一个(或胖)JAR
java程序打包为jar 这篇文章将针对一个有趣但非常强大的概念:将您的应用程序打包为单个可运行的JAR文件,也称为一个或胖 JAR. 我们习惯了大型WAR归档文件,其中包含所有打包在某些常见文件夹结 ...
- 将Java应用程序打包为一个(或胖)JAR
这篇文章的目标是一个有趣但非常强大的概念:将应用程序打包为单个可运行的JAR文件,也称为一个或胖 JAR文件. 我们习惯了大型WAR归档文件,其中包含所有打包在某些公用文件夹结构下的依赖项. 使用类似 ...
- 如何用jar命令对java工程进行打包
如何用jar命令对java工程进行打包 有时候为了更方便快捷的部署和执行Java程序,要把java应用程序打包成一个jar包.而这个基础的操作有时候也很麻烦,为了方便java程序员们能够方便的打包ja ...
- java restful项目打包_66-JT项目04(项目打包发布/JSON/项目业务)
关于项目打包/发布问题说明 利用maven工具项目打包 说明: 父级JT 其中包含了2个子级项目 jt-manager 依赖于jt-common.所以项目打包是有顺序的.要先打包被依赖的项目 或者直接 ...
- Java Maven项目打包成可执行jar文件
在pom文件中添加一下内容 <build><plugins><plugin><!-- Build an executable JAR --><gr ...
- Java web系统打包成exe安装文件
Java web系统打包成exe安装文件 一. 工具准备 1. NSIS打包工具: http://nsis.sourceforge.net下载并安装: 2. NSIS ...
最新文章
- 《C++ Primer Plus》学习笔记 2.1.1 main()函数
- 如何解决KEIL 5 编KEIL4同RTX系统的project解
- 保存图像_设计干货知识:SVG vs PNG vs JPG|图像格式的优缺点
- unity 中让Text的文字动态刷新形式
- 一个已经存在 10 年,却被严重低估的库
- write up 加密:zip伪加密
- usb接口驱动_乾坤合一~Linux设备驱动之USB主机和设备驱动
- jmeter如何定位网络延时_JMeter用户定义变量和properties变量高级使用
- linux中usb设备名,Linux 中识别 USB 设备名字的 4 种方法
- php设置cookie值,PHP如何设置和取得Cookie值
- 开发人员一定要加入收藏夹的网站(引用)
- 【转】什么是磁珠(Ferrite Bead 即 FB)
- 数据结构 5-3-2 二叉树前序中序后序遍历非递归实现
- socket error:10053
- JavaEE 支付宝支付
- roller源码分析
- WSL关闭与windows的互交互(解决PATH等环境变量问题
- 如何办理icp许可证,没有icp许可证有什么影响
- python panda3d教程_panda3d学习笔记(一)Hello World
- 图解IFRS9 金融工具(2)金融工具基本概念