Чи можу я використовувати бібліотеку, яка використовувала підтримку Android для проектів Androidx.


96

Я знаю, androidx та залежність підтримки викликають помилку мультидексу. Ми не можемо одночасно використовувати підтримку androidx та android. Тож я повністю переходжу на androidx. але одна з моїх залежностей lib використовувала підтримку android "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"
    }

Відповіді:


132

Ви можете увімкнути 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, додайте ці два рядки у свій 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 Чи можете ви створити нове запитання для свого налаштування, якщо пропозиція рішення не працює для вас? Досить складно знайти відповідь, не знаючи більше деталей про вашу установку.
Крістофер,

57

Вручну додавати android.useAndroidX=trueі android.enableJetifier=trueдавати мені важкий час. Тому що це викидає якусь помилку або Suggestion: add 'tools:replace="android:appComponentFactory"' to <application>

Увімкнути Jet-fire у проекті є опція в android Studio

Виберіть свій проект ---> Клацніть правою кнопкою миші

додаток ----> Refactor ----> Перенести на AndroidX

На малюнку нижче: -

введіть тут опис зображення

Після натискання кнопки « Перенести на AndroidX» .

Він запитає підтвердження та створить резервну копію для вашого проекту.

введіть тут опис зображення

І останній крок вимагатиме від вас рефактора.

введіть тут опис зображення

Після виконання Refactor перевірте ваш gradle.properties android.useAndroidX=trueі android.enableJetifier=true. Якщо це не так, додайте ці два рядки у файл 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.propertiesта додайте нижче два рядки.

    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, вам потрібно видалити весь API 29. + зі свого SDK:

Налаштування SDK

Це буде добре працювати.



0

Якщо ваш проект не є AndroidX (означає Appcompat) і виникла ця помилка, спробуйте знизити версії залежностей, які викликають цю помилку, у моєму випадку play-services-location ("імплементація" 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

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, додали рядок нижче. (Для цих помилок потрібно просто натиснути alt + enter в андроїд-студії, яка імпортуватиме потрібну для вас бібліотеку. Ось так ви можете усунути всі помилки)

import androidx.appcompat.app.AppCompatActivity;

У вашому файлі xml, якщо ви використовували будь-який

<android.support.v7.widget.Toolbar 

замінити його на androidx.appcompat.widget.Toolbar

то у вашому коді Java

import androidx.appcompat.widget.Toolbar;

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.