Несколько недель назад я читал о Календарях и времени, это привело меня к некоторым вариантам, и это заставило меня засомневаться в том, какой путь выбрать, поэтому я попытался немного почитать об этом, ниже следует краткий результат.
Давным-давно Oracle поняла, что java. Утиль. Библиотека даты была законной и решила разделить ее на лучшие компоненты 1 2 Проблема заключалась в том, что из-за совместимости с версией Android мы не могли его использовать.
Итак, в AndroidDevSummit 2019 Google делает возможным удаление библиотек с помощью первой сборки canary Android Studio 4.0. 3
В основном это прямая/восходящая совместимость (которую также можно назвать backport) для новых типов и API. Это позволяет нам использовать эти новые библиотеки Java в более старых версиях Android, платя небольшую цену за размер приложения.
Исторически сложилось так, что для использования API java.time в приложении с минимальным поддерживаемым уровнем API ниже 26 вам необходимо было бы использовать библиотеку threetenbp (или ThreeTenABP). Это автономная переупаковка API-интерфейсов java.time в пакете org.threeten.bp, которая требует, чтобы вы обновили весь свой импорт. D8 в основном выполняет ту же операцию, но на уровне байт-кода. Он переписывает ваш код с вызова java.time на j$.time, как показано в приведенном выше разнице байт-кода. Чтобы сопровождать это переписывание, реализация должна быть включена в приложение. Это является причиной большого изменения размера APK. В этом примере релиз APK сокращен с помощью R8, который также сокращает код обратного порта. Если минимизация отключена, размер индекса увеличения увеличивается до 180 КБ, 206 классов, 3272 методов и 713 полей.
Это позволило нам избежать использования сторонних библиотек для обработки “Времени”, которое до выпуска desugaring было рекомендуемым способом обработки времени в Android (например, с помощью Joda или ThreeTen).
Еще одним интересным моментом является то, что это не только повлияло на эти библиотеки, но и сделало некоторые календарные проекты устаревшими. В Австралии и Иордании уже есть оповещения в своих библиотеках и на веб-сайтах, призывающие людей переходить на java.time.
Обратите внимание, что начиная с Java SE 8 пользователям предлагается перейти на java.time (JSR-310) – основную часть JDK, которая заменяет этот проект.
- https://www.joda.org/joda-time/ Внимание: Разработка этой библиотеки завершается. Пожалуйста, подумайте о переходе на Android Gradle plugin 4.0, java.time. *, и его функция удаления основной библиотеки в ближайшие месяцы./>
- *, и его функция удаления основной библиотеки в ближайшие месяцы.
До выпуска Java SE 8 механизм даты и времени Java предоставлялся java.util. Дата, java.util. Календарь и java.util. Классы часовых поясов, а также их подклассы, такие как java.util. Григорианский календарь. У этих классов было несколько недостатков, в том числе: 2
- Класс Calendar не был типобезопасным.
- Поскольку классы были изменяемыми, их нельзя было использовать в многопоточных приложениях.
- Ошибки в коде приложения были обычным явлением из-за необычной нумерации месяцев и отсутствия безопасности типов.
пс:: Если вы читаете статью Джейка Уортона, имейте в виду, что она датирована декабрем 2019 года. PSS: Ссылку на список переносимых типов также можно найти в конце статьи Уортона.
Java SE 8 Дата и время: https://www.oracle.com/technical-resources/articles/java/jf14-date-time.html ↩
Устаревший код даты и времени: https://docs.oracle.com/javase/tutorial/datetime/iso/legacy.html ↩
Удаление шугаринга: https://developer.android.com/studio/write/java8-support#library-desugaring ↩
Более глубокое погружение в десугаринг: https://jakewharton.com/d8-library-desugaring/ ↩
Оригинал: “https://dev.to/cicerohellmann/what-is-desugaring-and-why-would-i-need-it-2bo0”