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打包流程相关推荐

  1. Android APK文件结构 完整打包编译的流程 APK安装过程 详解

    Android apk文件结构 打包编译的流程 Android官网 配置构建 流程 Configure your build The build process APK文件结构 assets res ...

  2. React 程序打包为App流程

    文章目录 React 程序打包为App流程 前言 流程: 实现过程: 一.编写Web 端应该程序,配置package.json文件 二.打包React Web应用程序 三.使用HBulider 创建A ...

  3. 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 ...

  4. Java的各种打包方式

    JAR (Java Archive file) 包含内容:class.properties文件,是文件封装的最小单元:包含Java类的普通库.资源(resources).辅助文件(auxiliary ...

  5. java程序打包为jar_将Java应用程序打包为一个(或胖)JAR

    java程序打包为jar 这篇文章将针对一个有趣但非常强大的概念:将您的应用程序打包为单个可运行的JAR文件,也称为一个或胖 JAR. 我们习惯了大型WAR归档文件,其中包含所有打包在某些常见文件夹结 ...

  6. 将Java应用程序打包为一个(或胖)JAR

    这篇文章的目标是一个有趣但非常强大的概念:将应用程序打包为单个可运行的JAR文件,也称为一个或胖 JAR文件. 我们习惯了大型WAR归档文件,其中包含所有打包在某些公用文件夹结构下的依赖项. 使用类似 ...

  7. 如何用jar命令对java工程进行打包

    如何用jar命令对java工程进行打包 有时候为了更方便快捷的部署和执行Java程序,要把java应用程序打包成一个jar包.而这个基础的操作有时候也很麻烦,为了方便java程序员们能够方便的打包ja ...

  8. java restful项目打包_66-JT项目04(项目打包发布/JSON/项目业务)

    关于项目打包/发布问题说明 利用maven工具项目打包 说明: 父级JT 其中包含了2个子级项目 jt-manager 依赖于jt-common.所以项目打包是有顺序的.要先打包被依赖的项目 或者直接 ...

  9. Java Maven项目打包成可执行jar文件

    在pom文件中添加一下内容 <build><plugins><plugin><!-- Build an executable JAR --><gr ...

  10. Java web系统打包成exe安装文件

    Java web系统打包成exe安装文件 一.    工具准备 1.        NSIS打包工具: http://nsis.sourceforge.net下载并安装: 2.        NSIS ...

最新文章

  1. 《C++ Primer Plus》学习笔记 2.1.1 main()函数
  2. 如何解决KEIL 5 编KEIL4同RTX系统的project解
  3. 保存图像_设计干货知识:SVG vs PNG vs JPG|图像格式的优缺点
  4. unity 中让Text的文字动态刷新形式
  5. 一个已经存在 10 年,却被严重低估的库
  6. write up 加密:zip伪加密
  7. usb接口驱动_乾坤合一~Linux设备驱动之USB主机和设备驱动
  8. jmeter如何定位网络延时_JMeter用户定义变量和properties变量高级使用
  9. linux中usb设备名,Linux 中识别 USB 设备名字的 4 种方法
  10. php设置cookie值,PHP如何设置和取得Cookie值
  11. 开发人员一定要加入收藏夹的网站(引用)
  12. 【转】什么是磁珠(Ferrite Bead 即 FB)
  13. 数据结构 5-3-2 二叉树前序中序后序遍历非递归实现
  14. socket error:10053
  15. JavaEE 支付宝支付
  16. roller源码分析
  17. WSL关闭与windows的互交互(解决PATH等环境变量问题
  18. 如何办理icp许可证,没有icp许可证有什么影响
  19. python panda3d教程_panda3d学习笔记(一)Hello World
  20. 图解IFRS9 金融工具(2)金融工具基本概念

热门文章

  1. 使用Android Studio导入源码
  2. 切换IP配置的bat批处理命令
  3. postman安装使用教程---图文讲解
  4. html使用iframe包含pdf文件,react项目利用iframe显示pdf文件并打印
  5. 点餐系统ip地址_教你一步一步做无线点餐项目(登录篇)
  6. Testbed静态分析
  7. slk文件(QQ or 微信) 转为 mp3
  8. 企业级POS收银系统源码(客户端+后台)
  9. 常用编程语言的介绍及特点
  10. wps纸张大小设置成A4_pdf两页合并一页a4,只需这招轻松搞定