Добавление "FlexBoxLayout" в проект нарушает компиляцию
Я пытаюсь использовать FlexBoxLayout
в моем приложении, но я постоянно сталкиваюсь с ошибками. Я перепробовал всевозможные настройки и конфиги, но появляются разные ошибки. Что у меня сейчас:
build.gradle (приложение):
dependencies {
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support:support-v4:28.0.0'
implementation 'com.google.android:flexbox:1.1.0'
implementation "androidx.appcompat:appcompat:1.0.0"
}
И это дает мне ошибку:
Ошибка слияния манифеста: Атрибут application@appComponentFactory value=(android.support.v4.app.CoreComponentFactory) из [com.android.support:support-compat:28.0.0] AndroidManifest.xml:22:18-91 также присутствует в [androidx.core:core:1.0.0] AndroidManifest.xml:22:18-86 value=(androidx.core.app.CoreComponentFactory). Предложение: добавьте 'tools:replace="android:appComponentFactory"' к элементу на AndroidManifest.xml:23:5-131:19, чтобы переопределить.
Когда я добавлю это tools:replace="android:appComponentFactory"'
на мой манифест, я получаю следующую проблему:
Сбой манифеста с множественными ошибками, см. Логи
И вот тут я как бы сдаюсь, я даже не знаю, на какие логи смотреть.
Обновлять, когда я только добавляю flexbox
к зависимостям, приложение вылетает с NoClassDefFoundError
на androidx.core.view.ViewCompat
учебный класс.
2 ответа
Есть несколько шагов для достижения этой цели:
1 В структуре проекта обновите версию Gradle до новейшей версии.
2 В наборе build.gradle приложения compileSdkVersion 28
и в зависимости конвертировать библиотеки в androidx
в соответствии с https://developer.android.com/jetpack/androidx/migrate
dependencies {
implementation 'androidx.appcompat:appcompat:1.0.0'
implementation 'com.google.android.material:material:1.0.0'
implementation 'com.google.android:flexbox:1.1.0'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation 'androidx.legacy:legacy-support-v13:1.0.0'
implementation 'androidx.coordinatorlayout:coordinatorlayout:1.0.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
}
3 Синхронизировать проект и восстановить
4 Зайдите в класс "Ваша деятельность". Все будет с красным подчеркиванием, а импорт будет серым. Удалить неактивный импорт. И импортируйте остальное с новым путем импорта, который будет содержать androidx
, Имейте в виду, что все виджеты в макетах XML тоже должны быть изменены. Это будет легко найти, потому что при запуске приложения вы получите ошибку, подобную этой:
Caused by: java.lang.ClassNotFoundException: Didn't find class "android.support.design.widget.CoordinatorLayout" on path: DexPathList[[zip file "/data/app/com.example.mimok.flexbox2-1/base.apk",
В этом случае у меня неправильный путь к CoordinatorLayout
который должен быть изменен на <androidx.coordinatorlayout.widget.CoordinatorLayout>
,
Пытаться:
change
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
implementation 'com.android.support:appcompat-v7:28.0.0'
to
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation 'androidx.appcompat:appcompat:1.0.0-alpha3'
Вы можете прочитать об этом здесь. Кроме того, я предлагаю вам в Android Studio 3.2 и перейти к Refactor->Refactor to AndroidX
Обновите здесь, если это работает для вас.