Как использовать автономный 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 работать:
Запустите автономный инструмент для каждой библиотеки и проинструктируйте Gradle об использовании этих версий (мне может потребоваться, чтобы задачи Gradle не запускали на них Jetifier)
Поручите задачам 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 должно быть без проблем.
Возможно, проблема будет исправлена в следующей бета-версии или канарейке, но пока это был единственный вариант, который сработал для меня.