如何确定哪个 dx/d8 版本用于创建 apk?
How to determine which dx/d8 version was used for apk creation?
如何确定在创建我的 apk 时使用了哪个 dex 编译器 (dx/d8) 版本+标记?
$ wget https://github.com/federicoiosue/Omni-Notes/releases/download/6.0.5/6.0.5.apk
$ cat extract_dex_compiler.py
from androguard.misc import AnalyzeAPK
a,d,dx=AnalyzeAPK("6.0.5.apk")
print(a.get_androidversion_code())
$ python3.7 extract_dex_compiler.py > android.xml && sed "s/\\n/\n/g" android.xml | grep "version"
然后我得到以下详细信息:
b'<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="280" android:versionName="6.0.5" package="it.feio.android.omninotes">
<meta-data android:name="com.google.android.gms.version" android:value="@7F0A000B"/>
所以这意味着 cmdline-tools/build-tools/28.0.0/dx
被使用了???
当使用 D8 和 R8 编译 DEX 文件时,一个特殊的标记字符串被添加到 DEX 文件字符串池中。该字符串的前缀为 ~~D8
、~~R8
或 ~~L8
,具体取决于用于创建 DEX 文件的工具。如果使用多个工具,则可以有多个标记。此字符串未在任何地方引用,因此某些工具不会显示它。作为 D8/R8 的一部分,有一个工具可以从 APK(从该 APK 中的 classes.dex
)或 DEX 文件中提取此标记。
- 抓住
r8.jar
。它可以从下载
https://maven.google.com/web/index.html#com.android.tools:r8。或者如果
您已经下载了 R8 based retrace tool,您可以在这里找到它:
$ANDROID_HOME/cmdline-tools/latest/lib/r8.jar
.
- 运行
java -cp r8.jar com.android.tools.r8.ExtractMarker <APK or DEX file>
如果 DEX 是使用 DX 编译的,则不存在标记,并且没有简单的方法可以找出使用的是哪个版本的 DX。
如何确定在创建我的 apk 时使用了哪个 dex 编译器 (dx/d8) 版本+标记?
$ wget https://github.com/federicoiosue/Omni-Notes/releases/download/6.0.5/6.0.5.apk
$ cat extract_dex_compiler.py
from androguard.misc import AnalyzeAPK
a,d,dx=AnalyzeAPK("6.0.5.apk")
print(a.get_androidversion_code())
$ python3.7 extract_dex_compiler.py > android.xml && sed "s/\\n/\n/g" android.xml | grep "version"
然后我得到以下详细信息:
b'<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="280" android:versionName="6.0.5" package="it.feio.android.omninotes">
<meta-data android:name="com.google.android.gms.version" android:value="@7F0A000B"/>
所以这意味着 cmdline-tools/build-tools/28.0.0/dx
被使用了???
当使用 D8 和 R8 编译 DEX 文件时,一个特殊的标记字符串被添加到 DEX 文件字符串池中。该字符串的前缀为 ~~D8
、~~R8
或 ~~L8
,具体取决于用于创建 DEX 文件的工具。如果使用多个工具,则可以有多个标记。此字符串未在任何地方引用,因此某些工具不会显示它。作为 D8/R8 的一部分,有一个工具可以从 APK(从该 APK 中的 classes.dex
)或 DEX 文件中提取此标记。
- 抓住
r8.jar
。它可以从下载 https://maven.google.com/web/index.html#com.android.tools:r8。或者如果 您已经下载了 R8 based retrace tool,您可以在这里找到它:$ANDROID_HOME/cmdline-tools/latest/lib/r8.jar
. - 运行
java -cp r8.jar com.android.tools.r8.ExtractMarker <APK or DEX file>
如果 DEX 是使用 DX 编译的,则不存在标记,并且没有简单的方法可以找出使用的是哪个版本的 DX。