Какой путь к файлу d8.jar используется в Android Studio? - PullRequest
0 голосов
/ 28 апреля 2018

Я знаю, что 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, но, похоже, это не так.

Старый dx.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 (я его распаковываю):

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

И я ищу файл с ключевым словом d8 в sdk и Android Studio, но не повезло:

xb@dnxb:~$ find /home/xiaobai/Android/ -iname '*d8*'
xb@dnxb:~$ find ~/Downloads/AS/android-studio -iname '*d8*'
xb@dnxb:~$ 

Так где же путь к файлу d8.jar в Android Studio? Моя версия Android Studio уже 3.2 Canary 12, но как Android Studio по умолчанию вызывает d8, если d8.jar не существует ? Или это где-то спрятаться?

Ответы [ 2 ]

0 голосов
/ 17 мая 2018

D8 / R8 не был распространен как часть Android SDK, как dx, до инструментов сборки 28.0.1. В последних версиях есть build-tools/28.0.1/d8 и build-tools/28.0.1/lib/d8.jar.

Он также поставляется как часть плагина Android Gradle. Начиная с версии 3.1.x / 3.2-alpha классы D8 (и их переупакованные зависимости) объединены в артефакт com.android.tools.build:builder. Последнее является транзитивной зависимостью артефакта первичного Gradle-плагина. Поэтому плагин Gradle (и, следовательно, Android Studio) использует связанные классы d8 для кодирования dex.

Существует отдельный артефакт com.android.tools:r8, представляющий собой отдельную банку R8 (без зависимостей, начиная с версии 1.0.25), но плагин Android Gradle от этого не зависит.

0 голосов
/ 01 мая 2018

D8 является частью нового проекта R8 . D8 не делится историей с dx, хотя из-за именования это может выглядеть так. dx больше не разрабатывается, но D8 активно разрабатывается Google как проект с открытым исходным кодом по адресу https://r8 -review.googlesource.com .

Вы должны быть в состоянии найти r8.jar (не d8.jar - который не существует) в вашем пути к классам, и если вы хотите использовать другую версию D8, вы можете поставить свою собственную r8.jar на свой CLASSPATH.

...