Android 应用apk打包原理


前言

  • 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 生成。

2.工具及依赖库

在这里插入图片描述


  • 5
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

盛气凌人的仙人掌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值