AndroidX Jetifier не смог / не смог преобразовать стороннюю транзитивную зависимость, которая все еще использует библиотеку поддержки - PullRequest
0 голосов
/ 13 апреля 2020

Я недавно перенес свой проект на использование AndroidX

Мои приложения аварийно завершают работу после перехода на AndroidX из-за того, что библиотека все еще использует поддержку Библиотека . Вот список моих сторонних зависимостей / библиотек, которые не удалось преобразовать в AndroidX :

  1. com.clevertap.android:clevertap-android-sdk:3.4.2
  2. com.readystatesoftware.chuck:library:1.1.0
  3. com.ncapdevi:frag-nav:2.4.0
  4. jp.wasabeef:recyclerview-animators:2.3.0
  5. com.github.chivorns:smartmaterialspinner:1.1.6
  6. com.facebook.android:facebook-android-sdk:5.0.1
  7. com.github.PierfrancescoSoffritti:AndroidYouTubePlayer:7.0.1 (я все еще не могу обновить его до 10. xx, потому что основные изменения API)
  8. 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

Что я сделал до сих пор:

  1. Использование Refactor -> Migrate to AndroidX инструментов из Android Studio , но конечное усилие закрывает его, потому что это занимает много времени
  2. android.enableJetifier=true & android.useAndroidX=true
  3. Использование сценариев оболочки для ручного отображения артефакта, класса и импорта из Библиотеки поддержки в AndroidX , благодаря @ Danlew , также @ Данлью, упомянутый в выступлениях ADS '19 здесь
  4. Я уже проверил :app:dependencies, что сторонние зависимости уже перенесены для использования AndroidX артефактов, но только некоторые из них их (не удалось в приведенном выше списке зависимостей)
  5. Удаление * 1 071 *, ./root_project/.gradle & ~/.gradle/caches (чтобы исправить ошибку компиляции / ошибку IDE, ссылки: AndroidX переносить зависимости / библиотеки
  6. Понимание jetifier: Что такое Jetifier? & официальный android документы
  7. Обходной путь для использования AndroidX для процессора аннотаций, например: Glide & Dagger
  8. Проверка каталогов ~/.gradle для jetified-* библиотек image~/.gradle contents"> jetified aar существует, к сожалению, это не удалось для clevertap и других библиотек, перечисленных выше.

Мои выводы, jetifier работает, переписывая двоичный файл .class нашей сторонней библиотеки, если Библиотека поддержки обнаруживает импорт / класс, и изменяет (вычленяет / отображает его) в AndroidX соответственно.

Но в моем случае, перечисленные выше зависимости не используют корректный AndroidX импорт и результирующее время выполнения cra sh из-за имеющий транзитивную зависимость для библиотеки поддержки .

ли ток выпрямителя тока ly также не поддерживает транзитивную зависимость внутри сторонней библиотеки? Но, как ни странно, это работает для нескольких библиотек (не перечисленных выше)

[ОБНОВЛЕНО 1]

Тем временем (быстрое исправление):

  1. Я загружал все транзитивные зависимости библиотек поочередно
  2. Используя вместо них jetifier-standalone команды вместо библиотек aar
  3. Добавление вручную библиотеки 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 для этой библиотеки:

  1. com.clevertap.android:clevertap-android-sdk:3.4.2
  2. com.github.nikartm:image-support:1.0.5

Многие также рекомендуют использовать api вместо implementation, но для меня я не хочу раздутый мой проект с транзитивной зависимостью

В другие SO также рекомендует ниже:

  1. либо удалите библиотеку,
  2. разветвил его для поддержки androidx / ждет, пока автор обновит его
  3. вручную, используя jetifier-standalone для этих конкретных библиотек, и включит в качестве локального aar (это мой лучший подход, прямо сейчас)

Если jetifier не в состоянии заявить об этом в официальной документации, для его ограничения: https://developer.android.com/jetpack/androidx/releases/jetifier

Похоже, что мы можем сделать как минимум и надеяться, что многие из Сторонние авторы скоро обновятся до AndroidX .

Вот бонусная статья для ссылок:

* 119 0 * Вы можете использовать can-i-drop-jetifier libs to определяет, нуждается ли ваша библиотека (транзитивно) в том, нуждается ли джиттификатор в включении или нет Время это право перейти на AndroidX с этим детским шагом Лучшая структура упаковки с AndroidX , а также головная боль в пути
...