classes.dex文件在apk文件中的作用

时间:2013-01-09 07:55:22

标签: android apk

使用winrar(s / w打开压缩文件)打开apk文件时。我在apk中收到了一堆文件。其中classes.dex是一个。我的问题是这个文件的作用是什么,如果我们修改/删除同一个文件会影响apk吗?

5 个答案:

答案 0 :(得分:52)

要制作APK文件,首先编译Android程序,然后将其所有部分打包到一个文件中。这包含该程序的所有代码(这些是.dex files),资源,资产,证书和清单文件。

程序通常用Java编写并编译为bytecode。然后,在安装到设备上之前,它们会从Java Virtual Machine-compatible .class files转换为Dalvik-compatible .dex(Dalvik可执行文件)文件。紧凑的Dalvik可执行文件格式适用于受内存和处理器速度限制的系统。

  • classes.dex:以Dalvik虚拟机可以理解的dex文件格式编译的类
  

由于.dex文件包含APK资源,因此对这些文件进行任何编辑   将直接影响APK。

答案 1 :(得分:9)

.dex文件 编译的Android应用程序代码文件。

From Android API GUIDES

Android程序被编译为.dex (Dalvik Executable)个文件,这些文件又被压缩为设备上的单个 .apk 文件。 .dex文件可以通过自动转换用Java编程语言编写的编译应用程序来创建。

是的,如果您删除这些文件,它将影响APK。

答案 2 :(得分:6)

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包才能将其安装在手机或模拟器上。

有关详细信息,您也可以查看此问题What are .dex files in Android?

这也是使用现有工具http://blog.vogella.com/2011/02/14/disassemble-android-dex

反汇编dex文件的精彩教程

答案 3 :(得分:3)

  

此文件的作用是什么?

Android中classes.dex的角色与普通Java中的JAR文件类似。这是一个包含字节码的文件。在Android情况下,字节码是Dalvik字节码,它与Java字节码不同。

  

如果我们修改/删除同一个文件会影响apk吗?

如果修改classes.dex,则表示您正在修改程序行为,这可能会在重新打包后生效,也可能不起作用。如果删除classes.dex,那么您的应用程序没有代码,您不应期望它能够正常工作。

答案 4 :(得分:1)

apk中的

.dex文件是压缩文件,它由应用程序代码中的所有java类组成。它不同于jar文件。 jar文件是隔离的.class文件的集合。如果我们解压缩.jar,我们将分别获取所有类。另一方面,.dex文件是由应用程序代码中的所有.class文件组成的单个文件。

代码编译流程: 多个.java文件 - >多个.classes文件 - >单个.dex文件

.dex文件是由DVM执行的可执行文件... Dalvik虚拟机,它是Android的运行时。

.dex永远不会包含资源。资源单独维护在.apk

中的/ res文件夹中