APK打包流程

摘要:
APK结构APK是包含lib、META-INF类的压缩包。索引、资源、资源。arsc文件夹和文件。初步流程谷歌官方提供的包装流程图。首先,将代码编译成Dex,然后将其与资源文件集成到APK中,然后对其进行签名。最后,在发布之前,使用zipaign工具对其进行优化。细化过程上图主要包括七个包装过程。打包的工具apkbuilder位于androidsdk/tools目录中。对齐的主要过程是将APK包中的所有资源文件从文件开始偏移到4字节的整数倍,这样通过内存映射访问APK文件的速度会更快。

APK结构

APK打包流程第1张

 apk是一个压缩包,里面有lib,META-INF,classes.dex,res,resources.arsc文件夹和文件。下面看看它们各自的作用。

APK打包流程第2张

初略流程

 APK打包流程第3张

 谷歌官方给出的打包流程图。
先是把代码编译成Dex,然后是和资源文件整合成一个APK,再者加签名,最后出来之前还要用zipalign工具优化一下。

细化流程

APK打包流程第4张

上面这个图主要是有7个打包流程。

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

aapt来打包res资源文件,生成R.java、resources.arsc和res文件。

  • res目录

APK打包流程第5张

  • 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文件时的速度会更快。对齐的作用就是减少运行时内存的使用。

总结一下

APK打包流程第6张

免责声明:文章转载自《APK打包流程》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇U盘启动时无USB-HDD选项的解决方案远程桌面连接Windows Server2008 未安装任何音频输出设备 启用声音音频解决方案下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Android Studio修改Apk打包生成名称

版权声明:本文为xing_star原创文章,转载请注明出处! 本文同步自http://javaexception.com/archives/201 Android Studio修改Apk打包生成名称 Android studio默认生成的apk的名字实在是太没有辨识度了,一般默认是app-debug.apk,app-release.apk这样的命名,自己有...

快速生成apk 自动发布到网站 便于测试

遇到的问题:    开发者生成的apk 需要不断给 测试安装让他们测试。有没有脚本自动将最新apk上传到服务器,让测试自己安装测试呢?mac电脑 怎么自己搭建文件服务器  启动Tomcat功能在这里不在赘述,有不懂的请你多多百度和Google  然后把你的localhost启用起来!! 不要怂就是干!!! 解决方案: #!/usr/bin/env bash...

使用adb命令安装安卓apk包

   虽然网上也有许多adb安装安卓包的教程,但经过自己亲自试了一下后,觉得自己写下来的才是自己的收获。 一、下载安装adb工具         下载地址有很多,这里是我下载的地址:https://pan.baidu.com/s/1mgGkNZM,下载文件比较齐全。         下载后是个压缩包,解压后一共有5个文件,如下图:这里我都是解压到当前文件夹...

Android热修复之微信Tinker使用初探

  文章地址:Android热修复之微信Tinker使用初探 前几天,万众期待的微信团队的Android热修复框架tinker终于在GitHub上开源了。 地址:https://github.com/Tencent/tinker 官方介绍:https://my.oschina.net/shwenzhang/blog/751618 接入指南:https:/...

Android APK加壳技术方案代码实现

本文章由Jack_Jia编写,转载请注明出处。   文章链接:http://blog.csdn.net/jiazhijun/article/details/8746917 作者:Jack_Jia    邮箱: 309zhijun@163.com  一、序言         在上篇“Android APK加壳技术方案”(http://blog.csdn....

Android下得到APK包含信息

很多情况下,我们需要通过APK文件来得到它的一些信息。 (此时此APK不一定被安装了) 0. 基础知识:可以通过android.content.Context的方法 getPackageManager()得到一个PackageManager实例。PackageManager有一个方法:PackageInfo getPackageArchiveInfo (S...