使用 WinRar(打开压缩文件的软件)打开 APK 文件时。我在 APK 中打包了一堆文件。其中classes.dex
之一。我的问题是这个文件的作用是什么,如果我们修改/删除同一个文件会影响APK吗?
5 回答
要制作APK文件,首先要编译Android程序,然后将其所有部分打包到一个文件中。这包含该程序的所有代码(这些是.dex files
)、资源、资产、证书和清单文件。
程序通常Java
以bytecode
. 然后在设备上安装之前将它们转换Java Virtual Machine-compatible .class files
为Dalvik-compatible .dex
(Dalvik 可执行文件)文件。紧凑的 Dalvik 可执行文件格式旨在适用于内存和处理器速度受限的系统。
- classes.dex:编译成Dalvik虚拟机可理解的dex文件格式的类
由于 .dex 文件包含 APK 资源,因此对这些文件的任何编辑都会直接影响 APK。
.dex 文件 编译的 Android 应用程序代码文件。
Android 程序被编译成.dex (Dalvik Executable)
文件,这些文件又被压缩到设备上的单个.apk文件中。.dex 文件可以通过自动翻译用 Java 编程语言编写的已编译应用程序来创建。
是的,如果您删除这些文件,它将影响 APK。
classes.dex 本质上是所有应用程序逻辑。给定应用程序的代码是用 java 编写的,然后编译为类文件,然后这些类文件被交叉编译(经过许多优化)为 dalvik VM 格式。请注意,可能还有一些 .so 文件也是应用程序代码,但这些文件是在使用 NDK 时生成的。您不能删除此文件。但是,您可以通过首先运行此实用程序来更改它https://github.com/JesusFreke/smali它将从这个编译的 dex 生成 smali 代码,这有点类似于 java 并且可以理解。您还可以使用工具 ApkOneClick 或 ApkMultiTool 从 smali 文件中获取 Java 源代码,但这些可能并不完美,需要进一步修复。当您更改您想要的代码时,您应该再次构建 classes.dex 并将它们放入您拥有的现有 zip/apk 文件中。请注意,现有的证书文件 (META-INF) 将不再有效,您需要删除此文件夹并重新签名 apk 包才能将其安装在手机或模拟器上。
有关更多信息,您也可以查看此问题Android 中的 .dex 文件是什么?
这也是使用现有工具反汇编 dex 文件的一个很好的教程http://blog.vogella.com/2011/02/14/disassemble-android-dex
这个文件的作用是什么?
Android中的作用classes.dex
类似于纯Java中的JAR文件。这是一个包含字节码的文件。在 Android 的情况下,字节码是 Dalvik 字节码,它不同于 Java 字节码。
如果我们修改/删除同一个文件会影响apk吗?
如果您修改classes.dex
,您正在修改程序行为,重新打包后可能会或可能不会工作。如果你 delete classes.dex
,那么你的应用程序没有代码,你不应该期望它工作。
apk 中的 .dex 文件是由应用程序代码中的所有 java 类组成的压缩文件。它与 jar 文件不同。jar 文件是隔离的 .class 文件的集合。如果我们解压缩 .jar,我们将分别获取所有类。另一方面,.dex 文件是由应用程序代码中的所有 .class 文件组成的单个文件。
代码编译流程:多个 .java 文件 --> 多个 .classes 文件 --> 一个 .dex 文件
.dex 文件是由 DVM 执行的可执行文件...Dalvik 虚拟机,它是 Android 的运行时。
.dex 永远不会包含资源。资源在 .apk 的 /res 文件夹中单独维护