Как заставить Delphi использовать D8.bat вместо dx.bat для компиляции байт-кода Java 1.8 в байт-код DEX - PullRequest
0 голосов
/ 01 ноября 2018

Сегодня я столкнулся с проблемой. Мой проект должен использовать некоторые библиотеки (* .jar), которые используют функции Java 1.8. Я вижу, что все больше и больше библиотек используют функции Java 1.8 (например, webRTC, exoplayer и т. Д.). Таким образом, мы должны сделать desugaring .

Desugaring позволяет использовать эти функции на старых устройствах, заменяя новые байт-коды и языковые API на более старые в процессе сборки

При d8.bat (замена dx.bat) десагеринг включен по умолчанию. Таким образом, теперь вы можете использовать большинство последних языковых изменений, ориентируясь на старые устройства.

Когда мы компилируем проект, в фоновом режиме Delphi делает это:

dx.bat --dex --output = "C: \ Dev \ output \ libwebrtc-dexed.jar" "C: \ Dev \ lib \ libwebrtc.jar"

И это не с библиотекой, которая содержит функции Java 1.8.

Поэтому Delphi должен сделать это вместо:

d8.bat --lib C: \ SDKs \ android-sdk-windows \ platform \ android-28 \ android.jar --output = "C: \ Dev \ output \ libwebrtc-dexed.jar" "C: \ Dev \ Lib \ libwebrtc.jar "

Есть идеи, как заставить Delphi использовать d8.bat вместо dx.bat?

1 Ответ

0 голосов
/ 04 апреля 2019

Я нашел решение, изменив файл «CodeGear.Common.Targets» (папка bin Delphi), создав альтернативную команду, которая будет использоваться только для генерации dex с использованием d8.bat вместо dx.bat:

1) Закройте IDE

2) Отредактируйте «CodeGear.Common.Targets», локализуйте определение DxCmd и добавьте две новые строки, создав новую команду для d8.bat:

<JavaD8Path>@(JavaAaptPath->'%(RootDir)%(Directory)')d8.bat</JavaD8Path>
<D8Cmd>PATH $(JDKPath)\bin;$(PATH) %26 "$(JavaD8Path)" --output=</D8Cmd>

3) Теперь локализуйте цель, используемую для создания файлов dex, и замените DxCmd на новый D8Cmd

  <!-- Generate a "dexed" version of the customized jar files if they doesn´t exists -->
  <Target Name="BuildPredexedJar" DependsOnTargets="GetProjectJars">
    <Exec Condition="( '@(_JarsLocations)'!='' And !Exists('%(_JarsLocations.PredexedJar)') )"
        Command='$(D8Cmd)"%(_JarsLocations.PredexedJar)" %22%(_JarsLocations.FullPath)%22'/>
  </Target>

4) Теперь при создании dex будет использоваться компилятор d8.bat, в котором по умолчанию включен «desugaring».

...