Анонс 1.15.0.0, ускорение запуска Android приложения и улучшения в Java2Delphi
Продолжаем освещать новинки обновления 1.15.0.0. И в этот раз речь пойдет про оптимизации старта приложения и новые возможности нашей утилиты Java2Delphi.
Ускорение запуска FGX Native приложения на Android
Одним из важных изменений в области работы Java-Delphi мосту - является ускорение запуска FGX Native приложения на Android. До 1.15.0.0 холодный старт пустого приложения мог занимать пару секунд. В 1.15.0.0 мы реализовали отложенную инициализацию Java оберток, в результате чего это позволило нам ускорить старт пустого приложения до ~2-х раз.
Улучшения в Java2Delphi
Поддержка AAR
В новой версии Java2Delphi теперь можно использовать AAR библиотеки. Для этого их нужно указать в конфигурационном файле в ветке "aars".
"aars": [
"$(FGX)\\Libs\\Android\\fgx.admob.aar"
],
Deprecated/Introduced для полей
Android API меняется от версии к версии. Какие-то типы объявляются устаревшими, какие-то удаленными, а какие-то новыми. Глядя на заголовочный файл тяжело понять, какой метод в какой версии Android доступен. Ранее мы вносили специальные пометки в заголовочные файлы для методов. В этом релизе мы генерируем аналогичные пометки их и для полей. Так что, теперь можно открыв заголовочный файл, сразу понять в какой версии был добавлен тот или иной элемент, а когда он помечен, как устаревший.
function isConvex: Boolean; deprecated 'Deprecated in 30';
function addWhitelistedRestrictedPermission(const AArg0: JString; const AArg1: JString; const AArg2: Integer): Boolean; // Introduced in 29';
{ constants }
property colorMode: Integer read _GetColorMode write _SetColorMode; // Introduced in 26';
Умная генерация параметров при зависимостях
Одним из главных отличий Java от Delphi является разная реализация пространств имен и доступов к типам. В Delphi по умолчанию два модуля не могут использовать друг друга в интерфейсной части. Появляется так называется циклическая зависимость. В то же время в Java в рамках одного пакета все классы могут использовать друг друга. Получается, что заголовочные обертки для всех классов одного пакета в Java должны были быть объявлены в одном Delphi модуле. Это в свою очередь приводило к значительному росту заголовочного файла. Так как нельзя размещать взаимно используемые классы в разных модулях.
В этом релизе мы так же улучшили это. Теперь вы можете раскидывать классы по разным модулям, даже если они взаимно используют друг друга. Чтобы избежать циклической зависимости, класс в одном из модулей заменяется на общий JObject.
Например:
Мы выделяем все типы, связанные с анимацией в модуль Android.Api.Animations. Эти типы используют JView, который объявлен в "Android.Api.ActivityAndView". Часть типов анимации используются в классе Android.Api.ActivityAndView.JView. Так геттер getAnimation должен вернуть объект JAnimation. Однако, данный тип, объявлен в Android.Api.Animations.
JView = interface(JObject)
//
function getAnimation: JAnimation;
//
end;
Получается циклическая зависимость. И раньше такой код не мог быть скомпилирован. Сейчас же такая зависимость заменяется генератором на такой код с указанием оригинального класса в фигурных скобках:
JView = interface(JObject)
//
function getAnimation: JObject {JAnimation};
//
end;
Чтобы при использовании получить объект JAnimation, достаточно написать такой код:
var
Animation: JAnimation;
Animation := TJAnimation.Wrap(View.getAnimation);
- 7
0 Comments
Recommended Comments
There are no comments to display.