Androidx projeleri ile android desteğini kullanan kitaplığı kullanabilir miyim?


96

Biliyorum, androidx ve destek bağımlılığı multidex hatasına neden oluyor. Androidx ve android desteğini aynı anda kullanamıyoruz. Bu yüzden tamamen androidx'e geçiyorum. ancak bağımlılık kütüphanemden biri android desteği "lottie" kullandı.

Yukarıdaki durumda ne yapabiliriz? Projemden 'lottie'yi kaldırmalı mıyım?

aşağıda benim notum

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"
    }

Yanıtlar:


133

Etkinleştirebilir Jetifiertemelde alışverişinde bulunacaklar projeniz üzerinde Android Support Libraryolan proje bağımlılıkları bağımlılıkları AndroidX-onların. (örneğin, Lottie bağımlılıklarınız Destek'ten AnroidX'e değiştirilecektir)

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

Android Gradle eklentisi, gradle.properties dosyanızda ayarlayabileceğiniz aşağıdaki genel işaretleri sağlar:

  • android.useAndroidX: True olarak ayarlandığında, bu bayrak AndroidX'i bundan sonra kullanmaya başlamak istediğinizi belirtir. Bayrak yoksa Android Studio, bayrak yanlış olarak ayarlanmış gibi davranır.
  • android.enableJetifier: True olarak ayarlandığında, bu bayrak, mevcut üçüncü taraf kitaplıklarını AndroidX için yazılmış gibi otomatik olarak dönüştürmek için araç desteğine (Android Gradle eklentisinden) sahip olmak istediğinizi belirtir. Bayrak yoksa Android Studio, bayrak yanlış olarak ayarlanmış gibi davranır.

Jetifier için ön koşul:

  • en azından kullanmalısın Android Studio 3.2

Jetifier'ı etkinleştirmek için bu iki satırı gradle.propertiesdosyanıza ekleyin :

android.useAndroidX=true
android.enableJetifier=true

Son olarak, lütfen AndroidX sürüm notlarını kontrol edin, çünkü jetifierbazı kitaplıklarda (örneğin, Dagger Android) hala bazı sorunlar var: https://developer.android.com/topic/libraries/support-library/androidx-rn


Projem birden fazla kitaplık kullanıyor, bazıları destek kitaplığı kullanırken, bazıları androidx kullanıyor. Projemde her iki kütüphaneyi nasıl kullanırım?
Hiren Dabhi

1
@hiren dabhi Çözüm önerisi sizin için çalışmıyorsa, kurulumunuz için yeni bir soru oluşturabilir misiniz? Kurulumunuz hakkında daha fazla ayrıntı bilmeden bir yanıt bulmak oldukça zordur.
Christopher

57

El ile ekleme android.useAndroidX=trueve android.enableJetifier=truebana zor zamanlar veriyor. Çünkü bazı hatalar veya Suggestion: add 'tools:replace="android:appComponentFactory"' to <application>

Projede Jet-fire'ı etkinleştirmek için android Studio'da bir seçenek var

Projenizi Seçin ---> Sağ Tık

app ----> Refactor ----> AndroidX'e Taşıma

Aşağıdaki resimde gösterilen: -

görüntü açıklamasını buraya girin

AndroidX'e Taşı'yı tıkladıktan sonra .

Onay isteyecek ve projeniz için yedeklenecektir.

görüntü açıklamasını buraya girin

Ve son adımda sizden yeniden düzenleme yapmanızı isteyecektir.

görüntü açıklamasını buraya girin

Refactor yaptıktan sonra, gradle.properties dosyanızın android.useAndroidX=trueve android.enableJetifier=true. Değilse, bu iki satırı gradle.properties dosyanıza ekleyin:

android.useAndroidX=true
android.enableJetifier=true

Not: - Android Studio kullanarak yükseltme, bu seçenek android studio 3.2 ve sonraki sürümlere sahipseniz çalışır. Bunu kontrol et


1
iyi bir öneri, ancak Android Studio kullanarak yükseltme yapan kişiler için bir yan not, bu seçenek android studio 3.2 ve sonraki sürümlere sahipseniz çalışır. Bu developer.android.com/jetpack/androidx/migrate
AB

21

Endişelenmene gerek yok

Sadece projenizde Jetifier'ı etkinleştirin .

  • Android Studio'yu 3.2.0 veya daha yenisine güncelleyin .
  • Açın gradle.propertiesve iki satırın altına ekleyin.

    android.enableJetifier=true
    android.useAndroidX=true
    

Bağımlılığınızın tüm destek kitaplıklarını çalışma zamanında AndroidX'e dönüştürür (derleme zamanı hataları olabilir, ancak uygulama çalışacaktır).


3
gradle.properties dosyalarımda bulunamadı, kendim oluşturdum
FindOutIslamNow

Aslında, geçişli bir bağımlılık + gradle önbelleği çalışmayabilir, android.enableJetifier=truebu gerçekleşse bile , jetifier-standaloneüçüncü taraf aar'ı manuel olarak kullanmanın işe yarayacağını düşünüyorum .
mochadwi

Android studio 4.1 kullanıyorum. Jetifier'ı etkinleştirdim. Uygulamam çalışmıyor.
meekash55

@ meekash55 hata nedir?
Khemraj

@Khemraj, gradle.properties'e Jetifier'ı eklese bile, V4 destek kitaplığının kullanıldığı projenin her yerinde derleme zamanı hataları göstermeye başladı. Yani geriye kalan tek seçenek, tüm kodu manuel olarak AndroidX'e düzeltmek ve taşımaktır. Bu benim için bir seçenek değildi.
meekash55


1

API 29. + AndroidX kitaplıklarının kullanımı. API 29. + kullanıyorsanız, bunları kaldıramazsınız. AndroidX'i kaldırmak istiyorsanız, 29. + API'nin tamamını SDK'nızdan kaldırmanız gerekir:

SDK Ayarları

Bu iyi çalışacak.



1

Gradle.properties dosyasında iki satırın altına ekledim

android.useAndroidX=true
android.enableJetifier=true

sonra aşağıdaki hatayı aldım

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

İthalatı kaldırdım ve aşağıdaki satıra ekledim

import static android.app.AlertDialog.*;

Ve AppCompactActivity'den genişletilen sınıflar aşağıdaki satırı ekledi. (Bu hatalar için, sizin için doğru kitaplığı içe aktaracak olan android stüdyosunda alt + enter tuşuna basmanız yeterlidir. Bunun gibi tüm hataları çözebilirsiniz)

import androidx.appcompat.app.AppCompatActivity;

Xml dosyanızda kullanmışsanız

<android.support.v7.widget.Toolbar 

ile değiştir androidx.appcompat.widget.Toolbar

sonra java kodunuzda

import androidx.appcompat.widget.Toolbar;

1
Ancak büyük bir projeniz var, tek bir androidX değişikliği için tüm Parçaları ve etkinlikleri değiştiremezsiniz.
meekash55

0

Projeniz AndroidX değilse (Appcompat anlamına gelir) ve bu hatayı aldıysa, benim durumumda bu hatayı tetikleyen bağımlılık sürümlerini düşürmeyi deneyin ("uygulama" com.google.android.gms: play-services-location : 17.0.0 '"), com.google.android.gms: play-services-location: 16.0.0' sürümüne geçerek sorunu çözdüm


0

Daha önce böyle bir sorun yaşadım, gradle.properties dosyası yoktu, sadece gradle.properties.txt vardı, bu yüzden proje klasörüme gittim ve gradle.properties.txt dosyasını kopyalayıp yapıştırdım, ancak olmadan. txt uzantısı sonra nihayet çalıştı.


-1

Bu Satırı Yorum Yap gradle.properties

android.useAndroidX = true


OP, AndroidX'i Android Desteği ile kullanmanın mümkün olup olmadığını soruyor. AndroidX'i devre dışı bırakmanızı öneriyorsunuz
Raildex

gradle.properties'e gidin ve yorum yapın
Vibhu Vikram Singh
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.