Резюме
Я хотел перенести мое старое приложение в новую Android Studio, обновить инструменты для сборки и использовать AndroidX.
Это даже отчасти сработало.Приложение запускается и даже выходит на главный экран ... но вскоре после этого вылетает.
Что я пробовал
Я уже посмотрел на следующие вопросы: NoClassDefFoundError android / support / v4 / animation / AnimatorCompatHelper
java.lang.NoClassDefFoundError: Не удалось разрешить: Landroidx / core / app / ActivityManagerCompat
Решение первого уже присутствовало в моем файле Gradle, а решение второго действительно не подходит.
Я считаю, что проблема в мультидекс конфигурации, так как я использую плагин Grade Dexcount для подсчета количестваметодов в моем apk, и он имеет немного больше методов, чем может содержаться в одном файле dex.Я просмотрел соответствующую документацию: https://developer.android.com/studio/build/multidex Multidex уже был включен, но я установил минимальную версию SDK на 21 и добавил multidex-config.txt.Текст содержит:
Landroidx / core / animation / AnimatorCompatHelper
Это не помогло исправить ошибку.
Я также проверил импортированную библиотеку «FlexibleAdapter» на наличие обновлений.Версия, которую я использую, все еще использует старые библиотеки поддержки.Я хотел избежать обновления библиотеки, так как переход на новую версию выглядит как большая задача.Я бы предпочел выполнить миграцию после того, как приложение снова заработает.
Итак, это часть моего файла gradle:
android {
compileSdkVersion 28
defaultConfig {
applicationId "funnyName"
minSdkVersion 21
targetSdkVersion 28
versionCode 1
versionName "1.0"
multiDexEnabled true
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
vectorDrawables.useSupportLibrary = true
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
multiDexKeepProguard file('multidex-config.txt')
}
debug {
shrinkResources false
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
multiDexKeepProguard file('multidex-config.txt')
}
}
packagingOptions {
exclude('META-INF/notice.txt')
exclude('META-INF/NOTICE')
exclude('META-INF/license.txt')
exclude('META-INF/LICENSE')
exclude('META-INF/LICENSE.txt')
exclude('META-INF/NOTICE.txt')
exclude 'META-INF/ASL2.0'
}
lintOptions {
abortOnError false
}
configurations.all {
resolutionStrategy.eachDependency { DependencyResolveDetails details ->
def requested = details.requested
if (requested.group == 'com.android.support') {
if (!requested.name.startsWith("multidex")) {
details.useVersion '25.3.0'
}
}
}
}
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
final BUTTERKNIFE_VERSION = '10.1.0'
final ANDROID_PERMISSION_MANAGER_VERSION = '1.0.0'
final DAGGER_VERSION = '2.5'
final SUPPORT_LIBRARY_VERSION_LEGACY = '1.0.0'
final HAMCREST_VERSION = '1.3'
final MOCKITO_VERSION = '1.10.19'
final ESPRESSO_VERSION = '3.1.0-alpha4'
final UI_AUTOMATOR_VERSION = '2.1.2'
final JUNIT_VERSION = '4.12'
final RUNNER_VERSION = '1.1.0-alpha4'
final ROBOLECTRIC_VERSION = '3.2.2'
final MULTIDEX_VERSION = '2.0.0'
final MOCKSERVER_VERSION = '3.5.0'
final RETROFIT_VERSION = '2.5.0'
final RXANDROID_VERSION = '2.0.1'
final RXJAVA_VERSION = '2.0.4'
def daggerCompiler = "com.google.dagger:dagger-compiler:$DAGGER_VERSION"
implementation "com.jakewharton:butterknife:$BUTTERKNIFE_VERSION"
annotationProcessor "com.jakewharton:butterknife-compiler:$BUTTERKNIFE_VERSION"
implementation "com.github.buchandersenn:android-permission-manager:$ANDROID_PERMISSION_MANAGER_VERSION"
implementation "androidx.legacy:legacy-support-core-utils:$SUPPORT_LIBRARY_VERSION_LEGACY"
implementation "androidx.appcompat:appcompat:$SUPPORT_LIBRARY_VERSION_LEGACY"
implementation "com.google.android.material:material:$SUPPORT_LIBRARY_VERSION_LEGACY"
implementation "androidx.legacy:legacy-support-v13:$SUPPORT_LIBRARY_VERSION_LEGACY"
implementation "androidx.legacy:legacy-support-v4:$SUPPORT_LIBRARY_VERSION_LEGACY"
implementation "androidx.core:core:$SUPPORT_LIBRARY_VERSION_LEGACY"
implementation "androidx.recyclerview:recyclerview:$SUPPORT_LIBRARY_VERSION_LEGACY"
implementation "androidx.cardview:cardview:$SUPPORT_LIBRARY_VERSION_LEGACY"
androidTestImplementation "androidx.appcompat:appcompat:$SUPPORT_LIBRARY_VERSION_LEGACY"
И это часть Stacktrace:
java.lang.NoClassDefFoundError: Failed resolution of: Landroidx/core/animation/AnimatorCompatHelper;
at eu.davidea.flexibleadapter.common.FlexibleItemAnimator.resetAnimation(FlexibleItemAnimator.java:646)
at eu.davidea.flexibleadapter.common.FlexibleItemAnimator.animateMove(FlexibleItemAnimator.java:385)
at androidx.recyclerview.widget.SimpleItemAnimator.animatePersistence(SimpleItemAnimator.java:138)
at androidx.recyclerview.widget.RecyclerView$4.processPersistent(RecyclerView.java:632)
at androidx.recyclerview.widget.ViewInfoStore.process(ViewInfoStore.java:237)
at androidx.recyclerview.widget.RecyclerView.dispatchLayoutStep3(RecyclerView.java:3994)
at androidx.recyclerview.widget.RecyclerView.dispatchLayout(RecyclerView.java:3652)
at androidx.recyclerview.widget.RecyclerView.consumePendingUpdateOperations(RecyclerView.java:1888)
at androidx.recyclerview.widget.RecyclerView$ViewFlinger.run(RecyclerView.java:5044)
Так что это ошибка конфигурации multidexили это как-то связано с устаревшей библиотекой?Или это что-то еще?