AndroidxプロジェクトでAndroidサポートを使用したライブラリを使用できますか?


95

私は知っています、androidxとサポート依存関係がmultidexエラーを引き起こしています ます。androidxとandroidサポートを同時に使用することはできません。だから私は完全にandroidxに移行します。しかし、私の依存ライブラリの1つはandroidサポート「lottie」を使用していました。

上記の状況で何ができますか?プロジェクトから 'lottie'を削除する必要がありますか?

以下は私のグラドルです

defaultConfig {
        minSdkVersion 19
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        vectorDrawables.useSupportLibrary = true
        multiDexEnabled true
    }

    ext{
    lottieVersion = "2.5.4"
}


dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"

    def androidx = "1.0.0-rc01"
    api "androidx.constraintlayout:constraintlayout:1.1.2"
    api "androidx.appcompat:appcompat:$androidx"
    api "androidx.recyclerview:recyclerview:$androidx"
    api "androidx.cardview:cardview:$androidx"
    api "androidx.core:core-ktx:$androidx"
    api "com.google.android.material:material:1.0.0-rc01"
    implementation "com.google.code.gson:gson:2.8.5"
    implementation "androidx.multidex:multidex:2.0.0"
    implementation "com.airbnb.android:lottie:$lottieVersion"
    }

回答:


130

Jetifierプロジェクトで有効にすることができます。これにより、基本的にAndroid Support Libraryプロジェクトの依存関係の依存関係が交換されますAndroidX -ones。(例:Lottieの依存関係はサポートからAnroidXに変更されます)

Android Studioのドキュメント(https://developer.android.com/studio/preview/features/)から:

Android Gradleプラグインは、gradle.propertiesファイルで設定できる次のグローバルフラグを提供します。

  • android.useAndroidX:trueに設定されている場合、このフラグは、今後AndroidXの使用を開始することを示します。フラグが存在しない場合、Android Studioはフラグがfalseに設定されているかのように動作します。
  • android.enableJetifier:trueに設定されている場合、このフラグは、(Android Gradleプラグインからの)ツールサポートを使用して、既存のサードパーティライブラリをAndroidX用に作成されたかのように自動的に変換することを示します。フラグが存在しない場合、Android Studioはフラグがfalseに設定されているかのように動作します。

Jetifierの前提条件:

  • 少なくとも使用する必要があります Android Studio 3.2

jetifierを有効にするには、次の2行をgradle.propertiesファイルに追加します。

android.useAndroidX=true
android.enableJetifier=true

最後に、AndroidXのリリースノートを確認してください。jetifier一部のライブラリ(Dagger Androidなど)にはまだ問題があります。https//developer.android.com/topic/libraries/support-library/androidx-rn


私のプロジェクトでは複数のライブラリを使用していますが、一部はサポートライブラリを使用し、一部はandroidxを使用しています。プロジェクトで両方のライブラリを使用するにはどうすればよいですか?
Hiren Dabhi

1
@hiren dabhi解決策の提案がうまくいかない場合、セットアップに新しい質問を作成できますか?セットアップの詳細を知らずに答えを見つけるのはかなり困難です。
Christopher

54

手動で追加android.useAndroidX=trueandroid.enableJetifier=trueて苦労しています。エラーが発生したり、 Suggestion: add 'tools:replace="android:appComponentFactory"' to <application>

プロジェクトでJet-fireを有効にするには、Android Studioにオプションがあります

プロジェクトを選択--->右クリック

app ---->リファクタリング----> AndroidXに移行

下の画像に示されています:-

ここに画像の説明を入力してください

[ AndroidX移行 ]をクリックした後

プロジェクトの確認とバックアップを求められます。

ここに画像の説明を入力してください

そして最後のステップでは、リファクタリングを行うように求められます。

ここに画像の説明を入力してください

リファクタリングを行った後、gradle.propertiesにとがあることandroid.useAndroidX=trueを確認してくださいandroid.enableJetifier=true。そうでない場合は、次の2行をgradle.propertiesファイルに追加します。

android.useAndroidX=true
android.enableJetifier=true

注:-Android Studioを使用してアップグレードする場合、このオプションはAndroid Studio 3.2以降を使用している場合に機能します。これをチェック


1
良い提案ですが、Android Studioを使用してアップグレードする人のための補足として、このオプションはAndroid Studio 3.2以降を使用している場合に機能します。このdeveloper.android.com/jetpack/androidx/migrateを
AB

21

心配する必要はありません

プロジェクトでJetifierを有効にするだけです。

  • Android Studioを3.2.0以降に更新します
  • gradle.properties2行下を開いて追加します。

    android.enableJetifier=true
    android.useAndroidX=true

実行時に依存関係のすべてのサポートライブラリをAndroidXに変換します(コンパイル時にエラーが発生する可能性がありますが、アプリは実行されます)。


3
gradle.propertiesがファイルに見つかりませんでした。自分で作成しました
FindOutIslamNow

実際、推移的な依存関係+ Gradleキャッシュは機能しない場合があります。android.enableJetifier=trueこれが発生した場合でも、jetifier-standaloneサードパーティのaarを手動で使用すると機能する可能性があります。
mochadwi


1

API 29. +の使用AndroidXライブラリ。API 29. +を使用している場合、これらを削除することはできません。AndroidXを削除する場合は、SDKから29. + API全体を削除する必要があります。

SDK設定

これは正常に動作します。



0

プロジェクトがAndroidX(平均Appcompat)ではなく、このエラーが発生した場合は、このエラーをトリガーする依存関係のバージョンをダウングレードしてみてください。私の場合は、play-services-location( "implementation 'com.google.android.gms:play-services-location :17.0.0 '")、com.google.android.gms:play-services-location:16.0.0'にダウングレードすることで問題を解決しました


0

以前にこのような問題がありました。gradle.propertiesファイルが存在せず、gradle.properties.txtのみだったため、プロジェクトフォルダーに移動し、gradle.properties.txtファイルをコピーして貼り付けましたが、はありませんでした。 txt拡張子、それがついに機能しました。


0

gradle.propertiesファイルの2行の下に追加しました

android.useAndroidX=true
android.enableJetifier=true

それから私は次のエラーを受け取りました

error: package android.support.v7.app does not exist
import android.support.v7.app.AlertDialog;
                         ^
                         

インポートを削除し、行の下に追加しました

import static android.app.AlertDialog.*;

そして、AppCompactActivityから拡張されたクラスは、以下の行を追加しました。(これらのエラーについては、正しいライブラリをインポートするandroid studioでalt + enterを押すだけです。このようにして、すべてのエラーを解決できます)

import androidx.appcompat.app.AppCompatActivity;

使用した場合は、xmlファイル内

<android.support.v7.widget.Toolbar 

それを交換してください androidx.appcompat.widget.Toolbar

次にあなたのJavaコードで

import androidx.appcompat.widget.Toolbar;

-1

この行にコメント gradle.properties

android.useAndroidX = true


OPは、AndroidサポートでAndroidXを使用できるかどうかを尋ねています。AndroidXを無効にすることをお勧めします
Raildex

gradle.propertiesにアクセスしてコメントします
Vibhu Vikram Singh
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.