Чи можу я використовувати бібліотеку, яка використовувала підтримку 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.