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

Я знаю, 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"
    }
103
0
119 760
11
Перейти к ответу Данный вопрос помечен как решенный

Ответы 11

Ответ принят как подходящий

Вы можете включить Jetifier в своем проекте, который в основном заменит зависимости Android Support Library в зависимостях вашего проекта на AndroidX-единицы. (например, ваши зависимости Lottie будут изменены с поддержки на AnroidX)

Из документации Android Studio (https://developer.android.com/studio/preview/features/):

The Android Gradle plugin provides the following global flags that you can set in your gradle.properties file:

  • android.useAndroidX: When set to true, this flag indicates that you want to start using AndroidX from now on. If the flag is absent, Android Studio behaves as if the flag were set to false.
  • android.enableJetifier: When set to true, this flag indicates that you want to have tool support (from the Android Gradle plugin) to automatically convert existing third-party libraries as if they were written for AndroidX. If the flag is absent, Android Studio behaves as if the flag were set to 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 27.09.2019 13:40

@hiren dabhi Можете ли вы создать новый вопрос для своей установки, если предложенное решение не работает для вас? Найти ответ, не зная подробностей о вашей настройке, довольно сложно.

Christopher 27.09.2019 20:58

Тебе не о чем беспокоиться

Просто включите Jetifier в своем проекте.

  • Обновите Android Studio до 3.2.0 или новее.
  • Откройте gradle.properties и добавьте две строки ниже.

    android.enableJetifier=true
    android.useAndroidX=true
    

Он преобразует все библиотеки поддержки вашей зависимости в AndroidX во время выполнения (у вас могут быть ошибки времени компиляции, но приложение будет работать).

gradle.properties не найден в моих файлах, создал сам

FindOutIslamNow 21.05.2019 13:39

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

mochadwi 10.04.2020 19:57

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

meekash55 10.11.2020 03:08

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

meekash55 10.11.2020 11:08

у меня есть вопрос здесь для того же: stackoverflow.com/questions/64716862/…

meekash55 10.11.2020 11:08

Добавление android.useAndroidX=true и android.enableJetifier=true вручную доставляло мне неудобства. Потому что это выдает ошибку или Suggestion: add 'tools:replace = "android:appComponentFactory"' to <application>

Чтобы включить Jet-fire в проекте, в Android Studio есть опция

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

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

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

После нажмите Переход на AndroidX.

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

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

После выполнения рефакторинга проверьте, что в вашем gradle.properties есть android.useAndroidX=true и android.enableJetifier=true. Если это не так, добавьте эти две строки в свой файл gradle.properties:

android.useAndroidX=true
android.enableJetifier=true

Note:- Upgrading using Android Studio, this option works if you have android studio 3.2 and onward. Check this

Хорошее предложение, но просто примечание для людей, обновляющих с помощью Android Studio, этот вариант работает, если у вас есть Android Studio 3.2 и новее. Отметьте это developer.android.com/jetpack/androidx/migrate

A.B. 11.04.2020 11:33

Я использовал эти две строки кода в теге приложения в manifest.xml, и это сработало.

 tools:replace = "android:appComponentFactory"    
 android:appComponentFactory = "whateverString"

Источник: https://github.com/android/android-ktx/issues/576#issuecomment-437145192

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

SDK Settings

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

Прокомментируйте эту строку в gradle.properties

android.useAndroidX=true

OP спрашивает, можно ли использовать AndroidX с поддержкой Android. Вы предлагаете отключить AndroidX

Raildex 31.01.2020 07:21

перейдите в gradle.properties и прокомментируйте

Vibhu Vikram Singh 31.01.2020 09:02

Добавьте строки в файл gradle.properties

android.useAndroidX=true
android.enableJetifier=true

См. Также https://developer.android.com/jetpack/androidx

Если ваш проект не 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'

У меня была такая проблема раньше, это был файл gradle.properties, которого не существует, только gradle.properties.txt, поэтому я зашел в папку своего проекта и скопировал и вставил файл gradle.properties.txt, но без него. txt, то он, наконец, сработал.

Я добавил две строчки в файл 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;

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

meekash55 10.11.2020 02:38
  1. В папке проекта в build.gradle (Модуль: Приложение)

    • Исправьте compileSdkVersion до 28
    • Если targetSdkVersion определен, измените это на 28
    • После таких изменений, если вы нажмете «Синхронизировать сейчас» вверху, появится ошибка.
  2. В меню Refactor нажмите Migration to AndroidX, чтобы продолжить миграцию.

  3. После этого, если вы откроете gradle.properties в папке Project, вы увидите определение, как показано ниже.

    android.enableJetifier = true
    android.useAndroidX = true

Другие вопросы по теме