Bisakah saya menggunakan perpustakaan yang menggunakan dukungan android dengan proyek Androidx.

96

Saya tahu, androidx dan dukungan ketergantungan menyebabkan kesalahan multidex. Kami tidak dapat menggunakan dukungan androidx dan android secara bersamaan. Jadi saya benar-benar bermigrasi ke androidx. tetapi salah satu lib ketergantungan saya menggunakan dukungan android "lottie".

Apa yang bisa kita lakukan dalam situasi di atas? Haruskah saya menghapus 'lottie' dari proyek saya.

di bawah ini adalah gradle saya

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"
    }
Hitesh Dhamshaniya
sumber

Jawaban:

134

Anda dapat mengaktifkannya Jetifierdi proyek Anda, yang pada dasarnya akan menukar Android Support Librarydependensi dalam dependensi proyek Anda dengan AndroidX-ones. (mis. ketergantungan Lottie Anda akan diubah dari Dukungan ke AnroidX)

Dari Dokumentasi Android Studio ( https://developer.android.com/studio/preview/features/ ):

Plugin Android Gradle menyediakan tanda global berikut yang dapat Anda setel di file gradle.properties Anda:

  • android.useAndroidX: Jika disetel ke true, tanda ini menunjukkan bahwa Anda ingin mulai menggunakan AndroidX mulai sekarang. Jika flag tidak ada, Android Studio berperilaku seolah-olah flag tersebut disetel ke false.
  • android.enableJetifier: Jika disetel ke true, tanda ini menunjukkan bahwa Anda ingin memiliki dukungan alat (dari plugin Android Gradle) untuk secara otomatis mengonversi pustaka pihak ketiga yang ada seolah-olah dibuat untuk AndroidX. Jika flag tidak ada, Android Studio akan berperilaku seolah-olah flag tersebut disetel ke false.

Prasyarat untuk Jetifier:

  • Anda harus menggunakan setidaknya Android Studio 3.2

Untuk mengaktifkan jetifier, tambahkan dua baris tersebut ke gradle.propertiesfile Anda :

android.useAndroidX=true
android.enableJetifier=true

Terakhir, periksa catatan rilis AndroidX, karena jetifiermasih ada beberapa masalah dengan beberapa perpustakaan (misalnya Dagger Android): https://developer.android.com/topic/libraries/support-library/androidx-rn

Christopher
sumber
Proyek saya menggunakan banyak pustaka, beberapa di antaranya menggunakan pustaka dukungan sementara beberapa menggunakan androidx. Bagaimana cara menggunakan kedua pustaka dalam proyek saya?
Hiren Dabhi
1
@hiren dabhi Dapatkah Anda membuat pertanyaan baru untuk pengaturan Anda, jika proposal solusi tidak bekerja untuk Anda? Agak sulit untuk menemukan jawaban tanpa mengetahui detail lebih lanjut tentang penyiapan Anda.
Christopher
57

Menambahkan android.useAndroidX=truedan android.enableJetifier=truememberi saya waktu yang sulit secara manual . Karena ada kesalahan atau Suggestion: add 'tools:replace="android:appComponentFactory"' to <application>

Untuk Mengaktifkan Jet-fire dalam proyek ada opsi di Android Studio

Pilih Proyek Anda ---> Klik Kanan

app ----> Refactor ----> Migrasi ke AndroidX

Ditunjukkan pada gambar di bawah ini: -

masukkan deskripsi gambar di sini

Setelah klik Migrate to AndroidX .

Ini akan meminta konfirmasi dan cadangan untuk proyek Anda.

masukkan deskripsi gambar di sini

Dan langkah terakhir akan meminta Anda untuk melakukan refactor.

masukkan deskripsi gambar di sini

Setelah melakukan Refactor, periksa gradle.properties Anda memiliki android.useAndroidX=truedan android.enableJetifier=true. Jika tidak, tambahkan dua baris ini ke file gradle.properties Anda:

android.useAndroidX=true
android.enableJetifier=true

Catatan: - Mengupgrade menggunakan Android Studio, opsi ini berfungsi jika Anda memiliki android studio 3.2 dan yang lebih baru. Periksa ini

sushildlh.dll
sumber
1
saran yang bagus, tetapi hanya catatan tambahan untuk orang yang mengupgrade menggunakan Android Studio, opsi ini berfungsi jika Anda memiliki android studio 3.2 dan seterusnya. Periksa developer
ini.android.com/jetpack/androidx/migrate
21

Anda tidak perlu khawatir

Cukup aktifkan Jetifier di projet Anda.

  • Perbarui Android Studio ke 3.2.0 atau yang lebih baru.
  • Buka gradle.propertiesdan tambahkan di bawah dua baris.

    android.enableJetifier=true
    android.useAndroidX=true
    

Ini akan mengonversi semua pustaka dukungan dependensi Anda ke AndroidX pada waktu proses (Anda mungkin memiliki kesalahan waktu kompilasi, tetapi aplikasi akan berjalan).

Khemraj
sumber
3
gradle.properties tidak ditemukan dalam file saya, dibuat sendiri
FindOutIslamNow
pada kenyataannya, ketergantungan transitif + cache gradle mungkin tidak berfungsi, bahkan android.enableJetifier=true, jika ini terjadi, saya pikir secara manual menggunakan jetifier-standaloneaar pihak ke-3, mungkin berfungsi.
mochadwi
Saya memiliki android studio 4.1. Saya memang mengaktifkan Jetifier. Aplikasi saya tidak berjalan.
meekash55
@ meekash55 apa kesalahannya?
Khemraj
@Khemraj bahkan menambahkan Jetifier ke gradle.proties, hal itu mulai menunjukkan kesalahan waktu kompilasi di mana-mana dalam proyek, di mana ada penggunaan pustaka dukungan V4. Jadi satu-satunya pilihan yang tersisa adalah memperbaiki dan memigrasi semua kode ke AndroidX secara manual. Itu bukanlah pilihan bagiku.
meekash55
1

API 29. + menggunakan pustaka AndroidX. Jika Anda menggunakan API 29. +, maka Anda tidak dapat menghapus ini. Jika Anda ingin menghapus AndroidX, maka Anda perlu menghapus seluruh 29. + API dari SDK Anda:

Pengaturan SDK

Ini akan bekerja dengan baik.

Shubham Tiwari
sumber
1

Saya menambahkan di bawah dua baris dalam file gradle.properties

android.useAndroidX=true
android.enableJetifier=true

kemudian saya mendapat kesalahan berikut

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

Saya telah menghapus impor dan menambahkan baris di bawah ini

import static android.app.AlertDialog.*;

Dan kelas yang diperpanjang dari AppCompactActivity, ditambahkan baris di bawah ini. (Untuk kesalahan ini Anda hanya perlu menekan alt + enter di studio android yang akan mengimpor pustaka yang benar untuk Anda. Seperti ini Anda dapat menyelesaikan semua kesalahan)

import androidx.appcompat.app.AppCompatActivity;

Di file xml Anda jika Anda pernah menggunakan

<android.support.v7.widget.Toolbar 

ganti dengan androidx.appcompat.widget.Toolbar

lalu di kode java Anda

import androidx.appcompat.widget.Toolbar;
Nikhil Dinesh
sumber
1
Tetapi kemudian Anda memiliki proyek besar yang tidak dapat mengubah semua Fragmen dan aktivitas hanya untuk satu perubahan androidX.
lemah lembut55
0

Jika proyek Anda bukan AndroidX (berarti Appcompat) dan mendapatkan kesalahan ini, coba turunkan versi dependensi yang memicu kesalahan ini, dalam kasus saya play-services-location ("implementasi 'com.google.android.gms: play-services-location : 17.0.0 '"), saya memecahkan masalah dengan menurunkan versi ke com.google.android.gms: play-services-location: 16.0.0'

Ahmed KHABER
sumber
0

Saya pernah mengalami masalah seperti ini sebelumnya, itu adalah file gradle.properties tidak ada, hanya gradle.properties.txt, jadi saya pergi ke folder proyek saya dan saya menyalin & menempel file gradle.properties.txt tetapi tanpa. ekstensi txt kemudian akhirnya berhasil.

Dom broks
sumber
-1

Komentari Baris Ini di gradle.properties

android.useAndroidX = true

Vibhu Vikram Singh
sumber
OP menanyakan apakah mungkin menggunakan AndroidX dengan Dukungan Android. Anda menyarankan untuk menonaktifkan AndroidX
Raildex
buka gradle.properties dan komentar
Vibhu Vikram Singh