Как заставить 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" включен по умолчанию.