apktool 和 baksmali 的区别

Differences between apktool and baksmali

据我所知,apktool 和 baksmali 都可以从 .apk (.dex) 文件中生成 smali 代码,并且 apktool 使用 dexlib2。它们都是 APK packing/unpacking 工具

但我仍然不清楚 apktool 和 smali/baksmali. 在 .dex 文件的功能和扩展功能方面的主要区别是什么?

PS: 我刚刚发现的区别之一是 apktool 能够处理 apk 中的多个 dex 文件,而 baksmali 不能(至少暂时)

我确实尝试阅读了源代码,但由于缺乏经验,我无法真正理解这两个工具的工作流程。如果有人能推荐一些阅读材料或流程图等,我将不胜感激

谢谢!

简而言之,apktool 用于 APK 文件,baksmali 用于 DEX 文件。

APK 文件是一个具有特定结构的 zip 压缩文件。这代表 Android 应用程序。这是您的智能 phone 或平板电脑从市场上下载的内容,通常是 Google 播放。存档由清单、资源、asserts/data 文件、本机库和 DEX 文件组成。

DEX 文件包含应用 code。有关详细信息,请参阅 https://source.android.com/devices/tech/dalvik/dex-format.html

还有一点要说的是,apktool可以提取并打包回资源文件。 (我相信 baksmali 不会那样做,需要检查。)

smali/baksmali 是 dex 格式的 assembler/disassembler 对。 Baksmali 获取一个 dex 文件并生成人类可读的程序集,而 smali 获取人类可读的程序集并生成一个 dex 文件。

Apktool 是一个更通用的解包和重新打包 apk 的工具。它实际上在幕后使用 smali/baksmali 来 assemble/disassemble dex 文件。它还将二进制资源和二进制 xml 文件解压回标准文本格式等