Androidx и привязка данных

Я переношу свои зависимости для теста Android P на зависимости androidx. По некоторым не очень понятным причинам мой проект больше не компилируется (и нет, я не буду предоставлять подробности, чтобы избежать явной проблемы). Я узнал (через gradlew dependencies), что привязка данных использует зависимость «старой школы» android.arch.lifecycle:runtime:1.0.3 вместо androidx.lifecycle:lifecycle-runtime:2.0.0-beta01. Думаю, это может быть одна из причин.

Есть идеи, как заставить использовать новые имена / зависимости пакетов?

У вас есть android.enableJetifier=true и android.useAndroidX=true в gradle.properties?

CommonsWare 21.07.2018 22:17

@CommonsWare нет, я не использовал эти флаги. Однако установка этих флагов не меняет зависимости: /

rekire 22.07.2018 07:29

@CommonsWare создание android.enableJetifier=true - не настоящее решение. Это увеличит время сборки. В худшем случае использование ОЗУ при каждой сборке будет огромным (я сам видел, как это использовало дополнительные 500 МБ). Вместо этого лучше вручную перенести каждую из ваших библиотек на androidx. Это также дает вам уверенность в своем коде.

Pradeep Singh 16.11.2020 16:03
14
3
13 695
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

У меня аналогичная проблема, библиотека Data Binding использует библиотеку поддержки, некоторые классы могут конфликтовать с AndroidX. А пока мне нужно удалить DataBinding.

Я только что прочитал этот Release Note, в нем говорилось, что эта проблема устранена, но я не заметил эффекта.

в примечании к выпуску говорится: «Библиотеки привязки данных не обновляются до androidx», я не уверен, как это понять: D

Karol Kulbaka 09.10.2018 20:48

Я все еще сталкиваюсь с этой ошибкой с несколькими библиотеками поддержки, такими как android.support.v4.widget, не существует. Любое решение для этого?

Swapnil 08.04.2020 10:13

@Swapnil Выложите, пожалуйста, свой код, я вместе с вами поищу решение.

Dennis Lee 08.04.2020 16:28
Ответ принят как подходящий

Я попробовал это, пока у меня было слабое интернет-соединение, поэтому я пропустил обновление до Android Studio 3.2. Это была моя вина. С этим обновлением (разархивирование заняло почти час, не знаю почему) меня также попросили обновить мои инструменты сборки до com.android.tools.build:gradle:3.2.0-beta04 (или что-то еще, что является новейшей версией, соответствующей вашей версии Android Studio (я бы не стал устанавливать 3.3.0-alpha03) и обновил градиент обертка до 4.6.

Теперь зависимости исчезли, и я счастлив.

В моем случае ошибка возникла из-за того, что инструмент для перехода на AndroidX не работает должным образом. Были еще некоторые файлы макета, использующие некоторые старые библиотеки поддержки. После исправления этих файлов все прошло хорошо =)

Чтобы исправить каждую библиотеку поддержки, которая использовалась в этих файлах макета, я изменил на правую, следуя этой ссылке: https://developer.android.com/jetpack/androidx/migrate

Какие файлы XML были неправильными и как вы их исправляли? Ваш ответ будет более ценным, если вы предоставите информацию такого типа.

GMB 09.12.2018 17:55

@GMB, это были файлы макета. Я только что отредактировал свой ответ, чтобы уточнить детали

Gabriel Guedes 10.12.2018 12:50

И ваш, и @ Ахмад-Агазаде были ответом; нужно выследить эти ссылки !!

anthropic android 20.06.2019 10:17

Проверьте файлы макета, возможно, остались просмотры, которые используют библиотеку поддержки вместо androidx Например

<android.support.constraint.ConstraintLayout
        android:layout_width = "match_parent"
        android:layout_height = "match_parent">

измените это на

<androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width = "match_parent"
        android:layout_height = "match_parent">

Включение AndroidX в gradle.properties устранило эту проблему для меня:

android.useAndroidX=true
android.enableJetifier=true

См. https://developer.android.com/jetpack/androidx#using_androidx:

android.useAndroidX: When set to true, the Android plugin uses the appropriate AndroidX library instead of a Support Library. The flag is false by default if it is not specified.
android.enableJetifier: When set to true, the Android plugin automatically migrates existing third-party libraries to use AndroidX by rewriting their binaries. The flag is false by default if it is not specified.

1- Добавьте эту строку в build.gradle

android {

    dataBinding {
        enabled = true
    }

}

2- gradle.properties (Свойства проекта)

android.databinding.enableV2=true

Читатели, имейте в виду, что начиная с версии Android Studio 3.2.0 и новее этот ответ больше не применяется. Последние инструкции по установке см. На странице «Начало работы» на сайте разработчика Android: developer.android.com/topic/libraries/data-binding/start.

Grease 19.06.2020 15:15

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