文章目录
前言
- APK的详细构建流程稍微有点复杂 ;
- 本文讲解app源码结构、 apk 文件构成、apk 构建的流程及需要的工具 ;
- 然后如果自已不依赖 IDE , 怎么实现手动打包apk ?
一、打包前 - app源码结构
二、打包后 - apk 文件结构
- apk结构?
名称 | 描述 |
---|---|
AndroidManifest.xml | 程序全局配置文件 |
classes.dex | 安卓 Dalvik 字节码 , 可能会有多个 |
resources.arsc | 资源索引表 解压缩 resources.ap_就能看到 |
res\ | 资源文件(图片、文本、xml布局) 目录 |
META-INF\ | 存放apk 签名文件 |
lib\ | 应用程序所依赖的库目录 |
assets\ | 配置文件目录 |
com/org/oktttp/… | 第三方jar 目录的.class 文件 |
-
扩展: Android为什么方法数不能超过65535 ?
搬上Dalvik工程师在SF上的回答,因为在Dalvik指令集里,调用方法的invoke-kind指令中,method reference index只给了16bits,最多能调用65535个方法,所以在生成dex文件的过程中,当方法数超过65535就会报错。细看指令集,除了method,field和class的index也是16bits,所以也存在65535的问题。一般来说,method的数目会比field和class多,所以method数会首先遇到65535问题,你可能都没机会见到field过65535的情况 。
- 图示 (1)
- 图示 (2)
- 其它解析
Dalvik是Google公司自己设计用于Android平台的虚拟机
三、那是怎么生成的?
1.apk 打包流程
首先看一下,官网给到的apk 构建流程图:
2.详解:构建流程中的工具
-
1、AAPT(Android Asset Packaging Tool)工具,Android资源打包工具。会打包资源文件(res文件夹下的文件),并生成R.java和resources.arsc文件;
-
2、AIDL工具 会将所有的 .aidl文件编译成.java文件;
-
3、JAVAC 工具将R.java、AIDL接口生成的java文件、应用代码java文件编译成.class文件;
-
4、dx 脚本将很多.class文件转换打包成一个.dex文件;
-
5、apkbuilder 脚本将资源文件和 .dex 文件生成未签名的 .apk 文件;
-
6、jarsigner 对apk进行签名;
-
7、zipalign 优化APK 。
这些构建中使用的工具或者脚本,在Android SDK的build-tools或者 tools 下可以找到。
Android 1.6 SDK中包含了一个用于优化APK的新工具zipalign。 它提高了优化后的Applications与Android系统的交互效率 ,从而可以使整个系统的运行速度有了较大的提升。
四、自己手动打包怎么构建?
1.实现思路
- java 代码调用 android build-tools 的工具,按照apk 打包流程,实现apk 生成。