Рубрики
Без рубрики

Что такое “Десугаринг” и зачем мне это нужно?

Знаете ли вы “поддержку десугаринга”? Несколько недель назад я читал об этом в Календарях и Времени… С тегами android, kotlin, десугаринг, java.

Несколько недель назад я читал о Календарях и времени, это привело меня к некоторым вариантам, и это заставило меня засомневаться в том, какой путь выбрать, поэтому я попытался немного почитать об этом, ниже следует краткий результат.

Давным-давно 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, которая заменяет этот проект.

До выпуска Java SE 8 механизм даты и времени Java предоставлялся java.util. Дата, java.util. Календарь и java.util. Классы часовых поясов, а также их подклассы, такие как java.util. Григорианский календарь. У этих классов было несколько недостатков, в том числе: 2

  • Класс Calendar не был типобезопасным.
  • Поскольку классы были изменяемыми, их нельзя было использовать в многопоточных приложениях.
  • Ошибки в коде приложения были обычным явлением из-за необычной нумерации месяцев и отсутствия безопасности типов.

пс:: Если вы читаете статью Джейка Уортона, имейте в виду, что она датирована декабрем 2019 года. PSS: Ссылку на список переносимых типов также можно найти в конце статьи Уортона.

  1. Java SE 8 Дата и время: https://www.oracle.com/technical-resources/articles/java/jf14-date-time.html

  2. Устаревший код даты и времени: https://docs.oracle.com/javase/tutorial/datetime/iso/legacy.html

  3. Удаление шугаринга: https://developer.android.com/studio/write/java8-support#library-desugaring

  4. Более глубокое погружение в десугаринг: https://jakewharton.com/d8-library-desugaring/

Оригинал: “https://dev.to/cicerohellmann/what-is-desugaring-and-why-would-i-need-it-2bo0”