Как использовать автономный Jetifier для перехода на AndroidX?

Инструмент Jetifier используется как часть инструмента миграции AndroidX в комплекте с Android Studio. Однако существует проблема с инструментом, которая описана здесь: https://issuetracker.google.com/issues/113224601.

Сообщение об ошибке выглядит следующим образом при запуске Jetifier в определенных библиотеках (одна конкретная библиотека продолжает появляться для нескольких пользователей: org.eclipse.jdt.core):

Failed to transform '/path/to/library/org.eclipse.jdt.core-3.10.0.jar' using Jetifier.
Reason: The type does not support '.' as package separator!

Эта проблема была исправлена ​​некоторое время в самом инструменте Jetifier, но исправленная версия еще не была включена ни в какие обновления Android Studio (даже в последнюю версию Canary).

Я могу подтвердить, что запуск автономного Jetifier работает над преобразованием проблемных библиотек, но я не знаю, как получить эти преобразованные библиотеки в наш проект. Вдобавок ко всему, я могу придумать два разных способа заставить эту миграцию на AndroidX работать:

  1. Запустите автономный инструмент для каждой библиотеки и проинструктируйте Gradle об использовании этих версий (мне может потребоваться, чтобы задачи Gradle не запускали на них Jetifier)

  2. Поручите задачам Gradle использовать автономный инструмент вместо того, который поставляется с Android Studio.

Любая помощь в получении любого из предложенных выше исправлений будет принята с благодарностью (или, если есть другой способ, я бы хотел узнать об этом). Внутренние части системы сборки Android Gradle невероятно сложны, и мне действительно нужна помощь гуру, чтобы преодолеть это препятствие.

Это серьезный препятствие для нас, поскольку мы хотим начать процесс переноса нашего приложения параллельно с нашей разработкой. Есть много вещей, которые нам нужно сгладить с помощью этой миграции, и готовность "щелкнуть переключателем", когда инструмент будет наконец обновлен, поможет держать наши выпуски на ходу.

Спасибо!

2 ответа

На самом деле, из той же темы, которую я связал, есть обходной путь:

Извините, но jtifier beta01 не был бинарно совместим с alpha10.

Пожалуйста, попробуй:

buildscript {
    dependencies {
        classpath 'com.android.tools.build.jetifier:jetifier-processor:1.0.0-beta02'
    }
}

Итак, я думаю, теперь вы можете указать самую новую версию Jetifier в вашем buildscript.

Я действительно должен был прокрутить весь этот поток до публикации, но теперь, надеюсь, этот обходной путь более заметен для людей.

ОБНОВИТЬ

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

Не удалось преобразовать файл /path/to/library/jetifier-core-1.0.0-alpha10.jar с помощью Jetifier. Причина: данный артефакт содержит строковый литерал со ссылкой на пакет 'android/support/v4', который нельзя переписать безопасно. Библиотеки, использующие рефлексию, такие как процессоры аннотаций, необходимо обновить вручную, чтобы добавить поддержку androidx.

ОБНОВЛЕНИЕ 2 (20 ноября 2018 года):

Существует обходной путь к проблеме Jetifier, пытающейся выпустить себя Jetify в AGP 3.3.0-rc01 и 3.4.0-alpha04. Разработчики добавляют возможность заносить библиотеки в черный список из-за того, что они были изжиты. В вашем gradle.properties файл, добавьте разделенный запятыми список регулярных выражений, чтобы указать, к каким файлам вы не хотите, чтобы Jetifier касался. Например:

android.jetifier.blacklist = doNot.*\\.jar

Исключил бы /path/to/doNotJetify.jar

Я опаздываю на вечеринку, но думаю, что есть только один быстрый способ решить эту проблему:

Перейдите в Google Archives, согласитесь сохранить и условия и загрузите Android Studio 3.3 Beta 2 - это последняя версия до возникновения проблемы. Вы также должны понизить свой build.gradle до

classpath 'com.android.tools.build:gradle:3.3.0-beta02'

использование gradle-4.10.2-all должно быть без проблем.

Возможно, проблема будет исправлена ​​в следующей бета-версии или канарейке, но пока это был единственный вариант, который сработал для меня.

Другие вопросы по тегам