Как заставить Delphi использовать D8.bat вместо dx.bat для компиляции байт-кода Java 1.8 в байт-код DEX

Сегодня я столкнулся с проблемой. Мой проект должен использовать некоторые библиотеки (*.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?

0 ответов

Я нашел решение, изменив файл "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" включен по умолчанию.

Другие вопросы по тегам