В последнее время разработчики, использующие Delphi 11, сталкиваются с проблемами при запуске своих приложений на устройствах Android 14. Несмотря на то, что приложения успешно работают на более ранних версиях Android, на Android 14 возникают различные несоответствия и ошибки. В данной статье мы рассмотрим наиболее распространенные причины этих проблем и предложим возможные решения.
Проблема 1: Некорректная обработка времени с AM/PM
Одна из наиболее часто встречающихся проблем – некорректная обработка строк даты и времени, содержащих AM/PM, при использовании функции StrToDateTime. Как показывает обсуждение на форуме, на Android 14 строка типа '02/08/25 6:23:18 AM' приводит к ошибке "‘2/6/25 10:0:00 PM' is not a valid date and time’", в то время как строка с 24-часовым форматом, например '02/06/25 22:00:00', конвертируется без проблем.
Причина:
Проблема, скорее всего, связана с региональными настройками устройства Android 14. Формат времени, ожидаемый StrToDateTime, может не совпадать с форматом, используемым на устройстве. В частности, могут быть различия в интерпретации AM/PM.
Решение (предложенное):
Рекомендуется проверить значения FormatSettings.ShortTimeFormat, FormatSettings.TimeAMString и FormatSettings.TimePMString. Эти свойства определяют формат отображения времени и AM/PM на устройстве. Изменение этих настроек может помочь адаптировать StrToDateTime к региональным настройкам Android 14.
Пример кода (Object Pascal):
uses
System.SysUtils, System.Types;
procedure TestDateTimeConversion;
var
FmtStngs: TFormatSettings;
DateTimeField: TDateTime;
BooleanField: Boolean;
begin
FmtStngs := TFormatSettings.Create();
FmtStngs.DateSeparator := '/';
FmtStngs.ShortDateFormat := 'm/d/yy';
FmtStngs.TimeSeparator := ':';
FmtStngs.LongTimeFormat := 'h:nn:ss AMPM'; // Попробуйте изменить этот формат
// Попытка конвертации с AM/PM
BooleanField := TryStrToDateTime('02/09/25 11:21:03 AM', DateTimeField, FmtStngs);
ShowMessage('AM/PM Conversion: ' + BoolToStr(BooleanField, True));
// Попытка конвертации с PM
BooleanField := TryStrToDateTime('02/09/25 11:21:03 PM', DateTimeField, FmtStngs);
ShowMessage('PM Conversion: ' + BoolToStr(BooleanField, True));
// Конвертация с 24-часовым форматом
BooleanField := TryStrToDateTime('02/09/25 23:21:03', DateTimeField, FmtStngs);
ShowMessage('24-hour Conversion: ' + BoolToStr(BooleanField, True));
FmtStngs.Free;
end;
Альтернативное решение:
Вместо использования StrToDateTime можно попробовать использовать более гибкий подход, например, парсинг строки даты и времени вручную. Это позволит вам точно контролировать процесс конвертации и адаптировать его к конкретным региональным настройкам Android 14. Можно использовать функции Pos, Copy, и StrToInt для извлечения компонентов даты и времени из строки и последующего формирования TDateTime. Хотя это и более сложный подход, он может быть более надежным в долгосрочной перспективе.
Пример (псевдокод):
// Предполагается, что строка даты и времени имеет формат MM/DD/YY HH:MM AM/PM
function ParseDateTime(DateTimeString: string): TDateTime;
var
Month, Day, Year, Hour, Minute: Integer;
AMPM: string;
begin
// Извлечение месяца, дня, года, часа, минуты и AM/PM из строки
// ... (реализация парсинга) ...
// Преобразование извлеченных значений в TDateTime
Result := EncodeDateTime(Year, Month, Day, Hour, Minute, 0, 0);
// Корректировка времени в зависимости от AM/PM
if AMPM = 'PM' and Hour < 12 then
Inc(Hour, 12);
else if AMPM = 'AM' and Hour = 12 then
Hour := 0;
Result := EncodeDateTime(Year, Month, Day, Hour, Minute, 0, 0);
end;
Проблема 2: Ошибки при сборке и запуске в Delphi 12 Trial
При попытке запуска приложения Delphi 11 на Android 14 с использованием Delphi 12 Trial возникают ошибки сборки, связанные с отсутствием файлов annotation-1.2.0.dex.jar и asynclayoutinflater-1.0.0.dex.jar.
Причина:
Эти ошибки обычно указывают на проблемы с зависимостями Android SDK. Возможно, Delphi 12 Trial не может найти необходимые библиотеки в вашем Android SDK. Это может быть связано с неправильной настройкой SDK, устаревшей версией SDK или проблемами с кэшированием.
Решение (предложенное):
Предложенное решение – обновление до более новой версии Delphi (Delphi 12.2). Однако, даже в этом случае, может потребоваться корректировка кода для поддержки поздних версий Android.
Альтернативное решение:
Проверьте настройки Android SDK: Убедитесь, что в настройках Delphi правильно указан путь к вашему Android SDK.
Обновите Android SDK: Установите последнюю версию Android SDK, соответствующую Android 14. Вы можете использовать Android Studio для управления SDK.
Очистите кэш SDK: Попробуйте очистить кэш SDK и пересобрать проект.
Проверьте зависимости: Убедитесь, что все необходимые зависимости для вашего проекта правильно указаны и доступны.
Общие рекомендации:
Используйте последние версии Delphi: Как показала практика, обновление до последних версий Delphi обычно решает многие проблемы совместимости с новыми версиями Android.
Тщательно тестируйте на разных устройствах: Важно тестировать ваше приложение на различных устройствах Android 14, чтобы выявить и устранить любые проблемы.
Обращайтесь к документации и форумам: Официальная документация Delphi и форумы разработчиков являются отличным источником информации и помощи при решении проблем.
Используйте TryStrToDateTime: При работе со строками даты и времени используйте функцию TryStrToDateTime вместо StrToDateTime. TryStrToDateTime возвращает False в случае ошибки, что позволяет избежать исключений и более корректно обрабатывать некорректные данные.
В заключение, проблемы с запуском приложений Delphi 11 на Android 14 часто связаны с региональными настройками и устаревшими зависимостями. Обновление Delphi, тщательная настройка SDK и использование альтернативных методов парсинга даты и времени могут помочь решить эти проблемы и обеспечить стабильную работу ваших приложений на новых устройствах Android.
Статья посвящена проблемам, с которыми сталкиваются разработчики Delphi 11 при запуске своих приложений на Android 14, рассматриваются вопросы некорректной обработки времени с AM/PM и ошибки при сборке, а также предлагаются возможные решения.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.