Могу ли я использовать библиотеку, в которой используется поддержка Android, с проектами Androidx.


96

Я знаю, что зависимость от androidx и поддержки вызывает ошибку multidex. Мы не можем использовать поддержку androidx и android одновременно. Поэтому я полностью перехожу на androidx. но одна из моих зависимых библиотек использовала поддержку 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"
    }

Ответы:


133

Вы можете включить Jetifierв своем проекте, что в основном заменит Android Support Libraryзависимости в зависимостях вашего проекта на AndroidX-ones. (например, ваши зависимости Lottie будут изменены с Support на 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 есть опция

Выберите свой проект ---> Щелкните правой кнопкой мыши

приложение ----> Рефакторинг ----> Переход на AndroidX

Показано на изображении ниже: -

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

После нажмите Migrate to AndroidX .

Он запросит подтверждение и резервную копию вашего проекта.

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

И на последнем этапе вас попросят провести рефакторинг.

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

После выполнения рефакторинга проверьте, что у вашего 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

на самом деле, транзитивный кеш dependency + gradle может не работать, даже android.enableJetifier=trueесли это произойдет, я думаю, что ручное использование стороннего aar может сработать jetifier-standalone.
Мохадви

У меня андроид студия 4.1. Я включил Jetifier. Мое приложение не запущено.
meekash55

@ meekash55 в чем ошибка?
Хемрадж,

@Khemraj, даже добавив Jetifier в gradle.properties, он начал показывать ошибки времени компиляции повсюду в проекте, где используется библиотека поддержки V4. Так что остается единственный вариант - исправить и перенести весь код в AndroidX вручную. Для меня это не было вариантом.
meekash55


1

API 29. + использование библиотек AndroidX. Если вы используете API 29. +, вы не можете их удалить. Если вы хотите удалить AndroidX, вам необходимо удалить весь 29. + API из вашего SDK:

Настройки SDK

Это будет работать нормально.



1

Я добавил две строчки в файл 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 в студии Android, которая импортирует для вас правильную библиотеку. Таким образом вы можете исправить все ошибки)

import androidx.appcompat.app.AppCompatActivity;

В вашем XML-файле, если вы использовали какой-либо

<android.support.v7.widget.Toolbar 

замените это на androidx.appcompat.widget.Toolbar

затем в вашем java-коде

import androidx.appcompat.widget.Toolbar;

1
Но тогда у вас есть огромный проект, в котором нельзя изменить все фрагменты и действия всего за одно изменение androidX.
meekash55

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, то он наконец сработал.


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.