0

最近、AndroidXを使用するようにプロジェクトを移行しました

AndroidXに移行した後、ライブラリがまだSupport Libraryを使用しているため、アプリがクラッシュします。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(主要な API の変更のため、まだ 10.xx にアップグレードできません)
  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. Android StudioRefactor -> Migrate to AndroidXのツールを使用しましたが、時間がかかるため強制終了しました
  2. android.enableJetifier=true&android.useAndroidX=true
  3. シェル スクリプトを使用して、サポート ライブラリからAndroidXアーティファクト、クラス、およびインポートを手動でマッピングします。@Danlewに感謝ます。
  4. AndroidX:app:dependenciesアーティファクトを使用するためにサードパーティの依存関係がすでに移行されていることをすでに確認しましたが、それらのほんの一部のみです(上記の依存関係リストでは失敗しました)
  5. ./root_project/.idea./root_project/.gradle& ~/.gradle/caches(コンパイル エラー/IDE エラーを修正するための削除、参照: AndroidX 移行依存関係 / ライブラリ
  6. Jetifier を理解する: Jetifierとは? &公式 Android ドキュメント
  7. Glide & Daggerのようなアノテーション プロセッサにAndroidXを使用する回避策を実行しました。
  8. aar が存在するライブラリの~/.gradleディレクトリを確認していますが、残念ながら、上記の & その他のライブラリでは失敗しています。jetified-*私の <code>~/.gradle</code> コンテンツのスクリーンショットjetifiedclevertap

私の結論としては、サポート ライブラリのインポート/クラスが検出された場合は、サードパーティ ライブラリjetifierのバイナリを書き換えて動作し、それぞれAndroidXに変更 (ジェット化/マッピング) します。.class

しかし、私の場合、上記の依存関係は正しいAndroidXインポートを使用せず、結果としてランタイム クラッシュが発生します。これは、 Support Libraryの推移的な依存関係があるためです。

Jetifier は現在、サードパーティ ライブラリ内の推移的な依存関係もサポートしていませんか? しかし、奇妙なことに、いくつかのライブラリで機能します(上記のリストにはありません)

[更新 1]

それまでの間(クイックフィックス):

  1. ライブラリのすべての推移的な依存関係を1つずつ徹底的にダウンロードしました
  2. jetifier-standaloneライブラリの代わりにコマンドを使用するaar
  3. ライブラリaarとその依存関係を手動でapp/build.gradle.ktsasに追加する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にアップグレードすることを願っています。

参照用のボーナス記事は次のとおりです。

  1. can-i-drop-jetifierライブラリを使用して、ライブラリが (推移的に) jetifier を有効にする必要があるかどうかを検出できます。
  2. このベビーステップでAndroidXに移行する時が来ました
  3. AndroidXによるより良い構造のパッケージングと、途中での頭痛の種
4

1 に答える 1