窥探的读音和词意(窥探 Android 应用打包流程:不同步骤的作用和工具详解)

前言

前一段时间,在阅读安卓资源检查插件代码时,发现资源扫描时用到了ARSC 文件,相关的知识已然忘记,再学习复习一遍,记录如下。首先是精华总结,提前放置,熟悉可不看该文章:

Android应用打包流程大致分为六个主要步骤:资源文件打包、aidl文件处理、Java源代码编译、生成.dex文件、生成未签名的APK、对APK进行签名和对齐处理。

资源文件打包:使用Android Asset Packaging Tool (AAPT) 将项目中的 AndroidManifest.xml 文件和 res 目录下的资源文件打包成已编译资源,并生成 R.java 资源索引表和 .arsc 资源文件。

aidl 文【我爱线报网】52线报网-专注分享活动首码线报优惠券零投网赚项目件处理:如果有 aidl 文件,使用 Android Interface Definition Language (AIDL) 工具将其打包成 Java 接口类。

Java源代码编译:使用 Java 编译器将 R.java、工程中所有的 Java 代码和 aidl.java 编译成 .class 文件,这些文件位于 bin/classes 目录下。

生成 .dex 文件:使用 dx 工具将 bin/classes 目录下的 .class 文件和第三方 jar 或库文件打包成 .dex 文件。这是一个可供 Dalvik 虚拟机执行的文件,其中包含所有的 Java 代码和编译后的资源。

生成未签名的 A【我爱线报网】52线报网-专注分享活动首码线报优惠券零投网赚项目PK:使用 apkbuilder 工具将未编译的资源、已编译资源和 .dex 文件打包成一个完成的 APK 文件。

对 APK 进行签名和对齐处理:使用 jarsigner 工具验证签名,并将签名后的 APK 保存到新文件中。然后,使用 zipalign 工具对 APK 文件进行优化,以减少在设备运行时内存使用。这一步骤会生成一个对齐的、已签名的 APK 文件,可供发布和安装。**

需要注意的是,不同版本的 Android 构建工具和 Gradle 插件可能会有一些差异,但总体上来说,打包流程基本相同。此外,基于 NDK 的应用可能需要进行一些额外的打包步骤。理解打包流程可以帮助开发人员更好地优化【我爱线报网】52线报网-专注分享活动首码线报优惠券零投网赚项目应用程序,并提高应用的性能和稳定性。

首先附上官网的安卓构建流程图:

典型 Android 应用模块的构建流程通常依循下列步骤:

1.编译器将您的源代码转换成 DEX 文件,将所有其他内容转换成已编译资源。

2.APK 打包器将 DEX 文件和已编译资源合并成单个 APK。

3.APK 打包器使用调试或发布密钥库签署您的 APK:

4.在生成最终 APK 之前,打包器会使用 zipalign 工具对应用进行优化,减少在设备运行时内存。

Google官方发布的一张非常经典的Apk打包流程图比上面官网的更详细。接下来会将基于下图的流程进行简单分析:

一 打包资源文件

资源文件(res文件夹下的文件)通过 AAPT(【我爱线报网】52线报网-专注分享活动首码线报优惠券零投网赚项目Android Asset Packaging Tool)(…

/Android/sdk/build-tools/25.0.0/aapt)。打包生成R.java类(资源索引表)以及.arsc资源文件。

在这个过程中,项目中的AndroidManifest.xml文件和布局文件XML都会编译,然后生成相应的R.java,另外AndroidManifest.xml会被aapt编译成二进制。

存放在APP的res目录下的资源,该类资源在APP打包前大多会被编译,变成二进制文件,并会为每个该类文件赋予一个resource id。对于该类资源的访问,应用层代码则是通过resource id进行访问的。Andr【我爱线报网】52线报网-专注分享活动首码线报优惠券零投网赚项目oid应用在编译过程中aapt工具会对资源文件进行编译,并生成一个resource.arsc文件,resource.arsc文件相当于一个文件索引表,它可以帮助系统根据资源 ID(R文件里的) 快速找到资源。

注:有关arsc的详细知识可看Android 逆向笔记 —— ARSC 文件格式解析

经过aapt生成的R文件占4个字节:

public static final int design_appbar_state_list_animator=0x7f020000;

1.

第一位字节0x7f表示packageID,用来限定资源的来源。系统资源包是ox01,SharedLibrary类型资源包是0x00【我爱线报网】52线报网-专注分享活动首码线报优惠券零投网赚项目, 普通App包则是0x7f;

次一位字节02表示typeID,用来表示资源类型,如drawable、layouts、anims、color、menu等;

后2字节0000表示EvtryID,指的是每一个资源在对应的TypID中出现的顺序。

aapt生成的.arsc资源文件对应我们将apk解压(apk本质是一个zip压缩包)得到的Resources.arsc,它实际上就是App的资源索引表。简单来说,通过R.java文件与Resources.arsc就可以定位到资源的内存地址。

aapt 编译源码的入口在

frameworks/base/tools/aapt/Main.cpp ,其中对 assert文件【我爱线报网】52线报网-专注分享活动首码线报优惠券零投网赚项目夹路径、res文件夹路径、AndroidManifest文件等会采取不同的策略

对asset目录下的资源不进行编译,assets目录下的资源会被原封不动的打入apk中,也就是说assets不会被压缩;aapt会对res下drawable资源进行压缩处理(raw目录下除外)

二 处理 aidl files

如果有aidl文件,会通过aidl工具(源碼位于system/tools/aidl)。打包成java接口类

这一过程中使用到的工具是aidl(Android Interface Definition Language),即Android接口描述语言(…

/Documents/Android/sdk/bu【我爱线报网】52线报网-专注分享活动首码线报优惠券零投网赚项目ild-tools/25.0.0/aidl)。

aidl工具解析接口定义文件然后生成相应的Java代码接口供程序调用。如果在项目没有使用到aidl文件,则可以跳过这一步。

AIDL(Android Interface Definition Language),是Android接口定义语言。目的是为了方便实现进程间通信,尤其是在涉及多进程并发情况下的进程间通信。它的本质是对Binder通信的封装。

三 编译(Compilers)

R.java+工程源码(项目中所有的Java代码)+aidl.java 通过javac生成 .class文件。

生成的class文件位于工程中的bin/classes目录下。

【我爱线报网】52线报网-专注分享活动首码线报优惠券零投网赚项目dex(生成dex文件)

源码.class文件和第三方jar或者library通过dx工具打包成dex文件。

dx工具生成可供Android系统Dalvik虚拟机执行的classes.dex文件,该工具位于(…

/Documents/Android/sdk/build-tools/25.0.0/dx)。

任何第三方的libraries和.class文件都会被转换成.dex文件。dx工具的主要工作是将Java字节码转成成Dalvik字节码、压缩常量池、消除冗余信息等。

AndroidStudio有提供 proguard、D8、R8等工具来处理这一流程。Android 还会针对 Dalvik 虚拟机和 Ar【我爱线报网】52线报网-专注分享活动首码线报优惠券零投网赚项目t 虚拟机对dex进行优化

dexopt 是对 dex 文件 进行 verification 和 optimization 的操作,其对 dex 文件的优化结果变成了 odex 文件,这个文件和 dex 文件很像,只是使用了一些优化操作码(譬如优化调用虚拟指令等)。

dex2oat 是对 dex 文件的 AOT 提前编译操作,其需要一个 dex 文件,然后对其进行编译,结果是一个本地可执行的 ELF 文件,可以直接被本地处理器执行。

五 apkbuilder(生成未签名apk)

apkbuilder工具会将所有没有编译的资源、.arsc资源、.dex文件打包到一个完成apk文件中

所有没有编译的资源,如【我爱线报网】52线报网-专注分享活动首码线报优惠券零投网赚项目images、assets目录下资源(该类文件是一些原始文件,APP打包时并不会对其进行编译,而是直接打包到APP中,对于这一类资源文件的访问,应用层代码需要通过文件名对其进行访问);编译过的资源和.dex文件都会被apkbuilder工具打包到最终的.apk文件中。

打包的工具apkbuilder位于 android-sdk/tools目录下。apkbuilder为一个脚本文件,实际调用的是(…

/Documents/Android/sdk/tools/lib)文件中的

com.android.sdklib.build.ApkbuilderMain类。

六 Jarsigner(签名)

jarsigne【我爱线报网】52线报网-专注分享活动首码线报优惠券零投网赚项目r工具会对未签名的apk验证签名。得到一个签名后的apk(signed.apk)

可以通过在命令行中输入jarsigner来获取详情信息,如果沒有特殊需求,使用下面命令即可完成签名

jarsigner -verbose -keystore [私钥存放路径] -signedjar [签名后文件存放路径] [未签名的文件路径] [您的证书名称]

一旦APK文件生成,它必须被签名才能被安装在设备上。

七 zipalign(对齐)

zipAlign工具对6中的signed.apk进行对齐处理

如果你发布的apk是正式版的话,就必须对APK进行对齐处理,用到的工具是zipalign(…

/Documents/Andr【我爱线报网】52线报网-专注分享活动首码线报优惠券零投网赚项目oid/sdk/build-tools/25.0.0/zipalign.exe) 对齐的主要过程是将APK包中所有的资源文件距离文件起始偏移为4字节整数倍,这样通过内存映射访问apk文件时的速度会更快。对齐的作用就是减少运行时内存的使用。

所谓对齐,主要过程是将APK包中所有的资源文件距离文件起始偏移为4字节整数倍,这样通过内存映射访问apk文件时的速度会更快。对齐的作用主要是为了减少运行时内存的使用。

工具列表总结

名称

功能介绍

路径

aapt

Android资源打包工具

${ANDROID_SDK_HOME}/platform-tools/appt

aidl

Android接口描述语言转化为.java文件的【我爱线报网】52线报网-专注分享活动首码线报优惠券零投网赚项目工具

${ANDROID_SDK_HOME}/platform-tools/aidl

javac

Java Compiler

${JDK_HOME}/javac

dex

转化.class文件为Davik VM能识别的.dex文件

${ANDROID_SDK_HOME}/platform-tools/dx

apkbuilder

生成apk包

${ANDROID_SDK_HOME}/tools/opkbuilder

jarsigner

.jar文件的签名工具

${JDK_HOME}/jarsigner

zipalign

字节码对齐工具

${ANDROID_SDK_HOME}/tools/zipalign

欢迎各位有小程序,APP开【我爱线报网】52线报网-专注分享活动首码线报优惠券零投网赚项目发,网站建设,广告业务的,可以私信留言,在线砸单,有合适的资源的可以对接私信,欢迎各位来公司喝茶哦,记得三连赞,转发,关注,收藏哦

推荐阅读

给力项目线报网会员可免费下载 加入会员
友情提醒: 请尽量登录购买,防止付款了不发货!
QQ交流群:226333560 站长微信:qgzmt2
温馨提示:本站提供的一切软件、教程和内容信息都来自网络收集整理,仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负,版权争议与本站无关。用户必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。如果您喜欢该程序和内容,请支持正版,购买注册,得到更好的正版服务。我们非常重视版权问题,如有侵权请邮件与我们联系处理。敬请谅解!

给TA打赏
共{{data.count}}人
人已打赏
行业资讯

张常宁个人资料简介(“云南学霸”李盈:拒绝北大和10万奖学金,只为圆心中的军校梦)

2024-6-13 7:42:39

行业资讯

a股的买卖规则有哪些种类(A股交易制度 股票买卖数量规则详解)

2024-6-13 8:03:03

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索