使用winrar(s / w打开压缩文件)打开apk文件时。我在apk中收到了一堆文件。其中classes.dex是一个。我的问题是这个文件的作用是什么,如果我们修改/删除同一个文件会影响apk吗?
答案 0 :(得分:52)
要制作APK文件,首先编译Android程序,然后将其所有部分打包到一个文件中。这包含该程序的所有代码(这些是.dex files
),资源,资产,证书和清单文件。
程序通常用Java
编写并编译为bytecode
。然后,在安装到设备上之前,它们会从Java Virtual Machine-compatible .class files
转换为Dalvik-compatible .dex
(Dalvik可执行文件)文件。紧凑的Dalvik可执行文件格式适用于受内存和处理器速度限制的系统。
由于.dex文件包含APK资源,因此对这些文件进行任何编辑 将直接影响APK。
答案 1 :(得分:9)
.dex文件 编译的Android应用程序代码文件。
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)
.dex文件是压缩文件,它由应用程序代码中的所有java类组成。它不同于jar文件。 jar文件是隔离的.class文件的集合。如果我们解压缩.jar,我们将分别获取所有类。另一方面,.dex文件是由应用程序代码中的所有.class文件组成的单个文件。
代码编译流程: 多个.java文件 - >多个.classes文件 - >单个.dex文件
.dex文件是由DVM执行的可执行文件... Dalvik虚拟机,它是Android的运行时。
.dex永远不会包含资源。资源单独维护在.apk
中的/ res文件夹中