Как использовать автономный Jetifier для перехода на AndroidX? - PullRequest
0 голосов
/ 30 октября 2018

Инструмент 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 ]

0 голосов
/ 23 ноября 2018

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

Перейдите на 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 должно быть без проблем.

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

0 голосов
/ 30 октября 2018

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

Извините, но jtifier beta01 не совместим с alpha10 в двоичном формате.

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

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

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

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

UPDATE

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

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

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

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

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

исключает /path/to/doNotJetify.jar

...