我是编写汇编程序 /Dalvik .dex文件。官方Android文档似乎只描述了.dex format的最新版本(显然是2019年5月的038 ),并有几个简短的注释描述了差异回到版本。快速浏览Android源代码似乎认为,该格式的035版本对应于安卓API级别13,意思是Android 3.2.x (蜂巢)。我拥有一个带有Android2.1 (Eclair)的设备,显然的意思是API级别7。我希望能够学习如何为该设备发出正确的.dex和.apk文件,希望能够向我的汇编程序中添加对这些文件的支持。
在哪里可以帮助我为Android2.1 (Eclair)发出正确的.dex文件,即API 7? --我甚至不知道那个API级别的.dex格式版本字符串是什么!
对于“加分”,我很想找到一些很好的参考,解释所有API级别之间在.dex格式上的差异(至少回到all 7)。我还会感兴趣的是,在Android级别之间,二进制.xml和资源文件的格式(如aapt工具所发出的)是否有任何实质性的差异。我假设.apk格式本身以及签名算法很有可能根本没有改变,因为它是用于签署.jar文件的相同格式(即普通.zip,在META-INF/子目录中有几个简单的特殊文件)。但是.dex格式规范(包括字节码)可能是最重要的部分,或者至少是一个很好的起点。
发布于 2019-05-12 21:08:30
https://source.android.com/devices/tech/dalvik/dex-format对不同版本之间的差异有一些简短的说明。
Note: Support for version 037 of the format was added in the Android 7.0
release. Prior to version 037 most versions of Android have used version 035 of
the format. The only difference between versions 035 and 037 is the addition of
default methods and the adjustment of the invoke.Note: Support for version 038 of the format was added in the Android 8.0
release. Version 038 added new bytecodes (invoke-polymorphic and invoke-
custom) and data for method handles.不过,请注意,最新版本是039,这在文档中似乎没有提到。039添加了invoke-custom/range、const-method-handle和const-method-type指令。
其他信息来源包括查看这些文档的变更量:https://android.googlesource.com/platform/docs/source.android.com/+log/refs/heads/master/en/devices/tech/dalvik/dex-format.html https://android.googlesource.com/platform/docs/source.android.com/+log/refs/heads/master/en/devices/tech/dalvik/dalvik-bytecode.html
在此之前,在文件被移动之前:
https://android.googlesource.com/platform/docs/source.android.com/+log/a3b748b40bab557fb47fe5a48a5bfb642837fb05/src/devices/tech/dalvik/dex-format.jd https://android.googlesource.com/platform/docs/source.android.com/+log/a3b748b40bab557fb47fe5a48a5bfb642837fb05/src/devices/tech/dalvik/dalvik-bytecode.jd
此外,您应该能够从smali源收集一些信息。在适用的情况下,它对每条指令都有最小/最大api级别。
对于将min/max设置为艺术版本的说明,可以使用这个映射将其映射回api级别。
https://stackoverflow.com/questions/56100355
复制相似问题