Я недавно перенес свой проект на использование AndroidX
Мои приложения аварийно завершают работу после перехода на AndroidX из-за того, что библиотека все еще использует поддержку Библиотека . Вот список моих сторонних зависимостей / библиотек, которые не удалось преобразовать в AndroidX :
com.clevertap.android:clevertap-android-sdk:3.4.2
com.readystatesoftware.chuck:library:1.1.0
com.ncapdevi:frag-nav:2.4.0
jp.wasabeef:recyclerview-animators:2.3.0
com.github.chivorns:smartmaterialspinner:1.1.6
com.facebook.android:facebook-android-sdk:5.0.1
com.github.PierfrancescoSoffritti:AndroidYouTubePlayer:7.0.1
(я все еще не могу обновить его до 10. xx, потому что основные изменения API) com.github.nikartm:image-support:1.0.5
Мои настройки:
AS & AGP: 3.6.2
targetSdk: 29
minSdk: 16
Data & View Binding: Both enabled
Gradle DSL: Kotlin
Gradle: gradle-6.0.1-all
Что я сделал до сих пор:
- Использование
Refactor -> Migrate to AndroidX
инструментов из Android Studio , но конечное усилие закрывает его, потому что это занимает много времени android.enableJetifier=true
& android.useAndroidX=true
- Использование сценариев оболочки для ручного отображения артефакта, класса и импорта из Библиотеки поддержки в AndroidX , благодаря @ Danlew , также @ Данлью, упомянутый в выступлениях ADS '19 здесь
- Я уже проверил
:app:dependencies
, что сторонние зависимости уже перенесены для использования AndroidX артефактов, но только некоторые из них их (не удалось в приведенном выше списке зависимостей) - Удаление * 1 071 *,
./root_project/.gradle
& ~/.gradle/caches
(чтобы исправить ошибку компиляции / ошибку IDE, ссылки: AndroidX переносить зависимости / библиотеки - Понимание jetifier: Что такое Jetifier? & официальный android документы
- Обходной путь для использования AndroidX для процессора аннотаций, например: Glide & Dagger
- Проверка каталогов
~/.gradle
для jetified-*
библиотек ~/.gradle contents"> jetified
aar существует, к сожалению, это не удалось для clevertap
и других библиотек, перечисленных выше.
Мои выводы, jetifier
работает, переписывая двоичный файл .class
нашей сторонней библиотеки, если Библиотека поддержки обнаруживает импорт / класс, и изменяет (вычленяет / отображает его) в AndroidX соответственно.
Но в моем случае, перечисленные выше зависимости не используют корректный AndroidX импорт и результирующее время выполнения cra sh из-за имеющий транзитивную зависимость для библиотеки поддержки .
ли ток выпрямителя тока ly также не поддерживает транзитивную зависимость внутри сторонней библиотеки? Но, как ни странно, это работает для нескольких библиотек (не перечисленных выше)
[ОБНОВЛЕНО 1]
Тем временем (быстрое исправление):
- Я загружал все транзитивные зависимости библиотек поочередно
- Используя вместо них
jetifier-standalone
команды вместо библиотек aar
- Добавление вручную библиотеки
aar
и их зависимости от app/build.gradle.kts
как flatDirs
Это действительно обходной путь, есть ли что-нибудь лучше, что я могу сделать?
[ОБНОВЛЕНО 2]
Я также использую поддерживаемую версию патрона. Но обнаружил и эту же проблему:
cannot generate view binders com.sun.tools.javac.code.Symbol$CompletionFailure: class file for android.support.v7.widget.AppCompatImageView not found
После проверки сторонних библиотек я также вручную добавил aar
после использования jetifier-standalone
для этой библиотеки:
com.clevertap.android:clevertap-android-sdk:3.4.2
com.github.nikartm:image-support:1.0.5
Многие также рекомендуют использовать api
вместо implementation
, но для меня я не хочу раздутый мой проект с транзитивной зависимостью
В другие SO также рекомендует ниже:
- либо удалите библиотеку,
- разветвил его для поддержки androidx / ждет, пока автор обновит его
- вручную, используя
jetifier-standalone
для этих конкретных библиотек, и включит в качестве локального aar (это мой лучший подход, прямо сейчас)
Если jetifier
не в состоянии заявить об этом в официальной документации, для его ограничения: https://developer.android.com/jetpack/androidx/releases/jetifier
Похоже, что мы можем сделать как минимум и надеяться, что многие из Сторонние авторы скоро обновятся до AndroidX .
Вот бонусная статья для ссылок:
* 119 0 * Вы можете использовать
can-i-drop-jetifier libs to
определяет, нуждается ли ваша библиотека (транзитивно) в том, нуждается ли джиттификатор в включении или нет Время это право перейти на AndroidX с этим детским шагом Лучшая структура упаковки с AndroidX , а также головная боль в пути