При разработке кроссплатформенных мобильных приложений на Delphi для Android и iOS многие разработчики сталкиваются с неожиданным увеличением размера итоговых пакетов. Как показывает практика, одной из причин такого "раздувания" могут быть стили, предназначенные для других операционных систем, которые не используются в текущей сборке, но всё равно включаются в пакет.
Проблема: лишние стили увеличивают размер пакетов
Как обнаружил пользователь Stewag на форуме, при использовании StyleBook с несколькими стилями (Android, iOS и Windows) все они включаются в итоговые APK и AAB пакеты, даже если предназначены для других платформ. Это приводит к значительному увеличению размера:
APK (Android development):
Все три стиля: 15.2 MB
Только Android и iOS: 14.2 MB
Только Android: 13.2 MB
AAB (Android store):
Все три стиля: 25.0 MB
Только Android и iOS: 23.1 MB
Только Android: 21.3 MB
Как видно, удаление ненужных стилей может уменьшить размер пакета на 15% и более.
Решение 1: Использование TDataModule с условной компиляцией
Patrick PREMARTIN предложил элегантное решение с использованием TDataModule и условной компиляции:
Удалите все StyleBook с форм
Создайте отдельные модули данных для каждой ОС:
DataModuleAndroid
DataModuleiOS
DataModuleWindows
Разместите StyleBook с соответствующим стилем на каждом модуле данных
Установите свойство UseStyleManager в True для всех StyleBook
Добавьте код в событие FormCreate каждой формы:
{$IFDEF MSWINDOWS}
if not assigned(DataModuleWindows) then
DataModuleWindows := TDataModuleWindows.Create(self);
Stylebook := DataModuleWindows.StyleBook1;
{$ENDIF}
{$IFDEF ANDROID}
if not assigned(DataModuleAndroid) then
DataModuleAndroid := TDataModuleAndroid.Create(self);
Stylebook := DataModuleAndroid.StyleBook1;
{$ENDIF}
{$IFDEF IOS}
if not assigned(DataModuleiOS) then
DataModuleiOS := TDataModuleiOS.Create(self);
Stylebook := DataModuleiOS.StyleBook1;
{$ENDIF}
Этот метод особенно полезен для десктопных приложений (Windows и Mac), где сжатие даёт значительное уменьшение размера.
Рекомендации по выбору решения
Для мобильных приложений (APK, AAB, IPA) предпочтительнее первый метод с TDataModule, так как:
APK и AAB уже сжаты, дополнительное сжатие стилей не даёт преимущества
Решение проще в реализации и поддержке
Полностью исключает ненужные стили из пакета
Для десктопных приложений (Windows, Mac) можно рассмотреть второй метод:
Сжатие стилей значительно уменьшает размер исполняемого файла
Позволяет включать несколько стилей с минимальными накладными расходами
Дополнительные советы по оптимизации
Всегда размещайте стили на модулях данных, а не на формах
Используйте условную компиляцию для всех платформо-специфичных ресурсов
Регулярно проверяйте размер итоговых пакетов при добавлении новых стилей
Создавайте отдельные модули данных для разных стилей, если приложение поддерживает их переключение
Заключение
Оптимизация размера пакетов - важная часть разработки мобильных приложений. Как показала практика, простое удаление ненужных стилей для других платформ может уменьшить размер пакета на 15% и более. Предложенные решения с использованием TDataModule и условной компиляции или сжатия стилей позволяют эффективно решить эту проблему и создавать более компактные приложения.
Оптимизация размера APK и AAB пакетов в Delphi-приложениях за счёт удаления неиспользуемых стилей для других операционных систем.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.