我知道Android Studio 默认切换到 D8 dexer。但我想知道文件路径是d8.jar
什么?d8.jar
我在 SDK中找不到dx.jar
.
一个典型的dx.jar
位于Android/Sdk/build-tools/<VERSION>/lib/
:
xb@dnxb:~/Android/Sdk/build-tools/27.0.3/lib$ ls
apksigner.jar dx.jar shrinkedAndroid.jar
xb@dnxb:~/Android/Sdk/build-tools/27.0.3/lib$
我的第一个想法是 dx.jar 意味着 d8.jar,但似乎并非如此。
xb@dnxb:~/Downloads/dalvik/dx/src/com/android$ ls
dex dx multidex
xb@dnxb:~/Downloads/dalvik/dx/src/com/android$ ls -1 dex
Annotation.java
CallSiteId.java
ClassData.java
ClassDef.java
Code.java
DexException.java
DexFormat.java
DexIndexOverflowException.java
Dex.java
EncodedValueCodec.java
EncodedValue.java
EncodedValueReader.java
FieldId.java
Leb128.java
MethodHandle.java
MethodId.java
Mutf8.java
ProtoId.java
SizeOf.java
TableOfContents.java
TypeList.java
util
xb@dnxb:~/Downloads/dalvik/dx/src/com/android$
与dx.jar
27.0.3 或更早版本(例如 25.0.0)SDK 中的 .classes 完全相同(我解压缩):
xb@dnxb:~/Android/Sdk/build-tools/27.0.3/lib/dx/com/android$ ls
dex dx multidex
xb@dnxb:~/Android/Sdk/build-tools/27.0.3/lib/dx/com/android$ ls -1 dex | grep -v '\$'
Annotation.class
CallSiteId.class
ClassData.class
ClassDef.class
Code.class
Dex.class
DexException.class
DexFormat.class
DexIndexOverflowException.class
EncodedValue.class
EncodedValueCodec.class
EncodedValueReader.class
FieldId.class
Leb128.class
MethodHandle.class
MethodId.class
Mutf8.class
ProtoId.class
SizeOf.class
TableOfContents.class
TypeList.class
util
xb@dnxb:~/Android/Sdk/build-tools/27.0.3/lib/dx/com/android$
但是新的 d8.jar具有完全不同的结构:
xb@dnxb:~/Downloads/r8/build/libs/d8/com/android/tools/r8$ ls
annotations ExtractMarkerCommand.class
ApiLevelException.class ExtractMarker$VdexOrigin.class
ArchiveClassFileProvider.class GenerateMainDexList.class
ArchiveProgramResourceProvider.class GenerateMainDexListCommand$1.class
ArchiveProgramResourceProvider$ZipFileSupplier.class GenerateMainDexListCommand$Builder.class
BaseCommand$Builder.class GenerateMainDexListCommand.class
BaseCommand.class graph
BaseCompilerCommand$Builder.class InternalProgramOutputPathConsumer.class
... omit
我在 sdk 和 Android Studio 中都使用 d8 关键字搜索文件名,但没有运气:
xb@dnxb:~$ find /home/xiaobai/Android/ -iname '*d8*'
xb@dnxb:~$ find ~/Downloads/AS/android-studio -iname '*d8*'
xb@dnxb:~$
那么 Android Studio 中 d8.jar 的文件路径在哪里呢?我的 Android Studio 版本3.2 Canary 12
已经存在,但是如果 d8.jar 不存在,Android Studio 如何默认调用 d8?或者它隐藏在某个地方?