首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何确定使用哪个dx/d8版本创建apk?

如何确定使用哪个dx/d8版本创建apk?
EN

Stack Overflow用户
提问于 2021-04-19 08:02:56
回答 1查看 316关注 0票数 0

如何确定在创建我的apk时使用了哪个dex编译器 (dx/d8) version+flags?

代码语言:javascript
复制
$ 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"

然后我得到以下细节:

代码语言:javascript
复制
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被使用了?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-19 08:37:54

当使用D8和R8编译DEX文件时,将一个特殊的标记字符串添加到DEX文件字符串池中。此字符串由~~D8~~R8~~L8前缀,这取决于用于创建DEX文件的工具。如果使用了多个工具,可以有多个标记。这个字符串不是任何地方的引用,所以有些工具不会显示它。作为D8/R8的一部分,有一个工具可以从APK (从该APK中的classes.dex )或从DEX文件中提取此标记。

  1. 找到r8.jar。它可以从https://maven.google.com/web/index.html#com.android.tools:r8下载。或者,如果您下载了基于R8的回溯工具,您可以在这里找到它:$ANDROID_HOME/cmdline-tools/latest/lib/r8.jar
代码语言:javascript
复制
java -cp r8.jar com.android.tools.r8.ExtractMarker <APK or DEX file>

如果DEX是用DX编译的,就没有标记,也没有简单的方法来确定使用了哪个版本的DX。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67158123

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档