NoClassDefFoundError с Android Studio на Android 4

Я в процессе преобразования существующего приложения из Eclipse в Android Studio. Однако, когда я запускаю его на устройстве с 4.x (я протестировал несколько версий на эмуляторах), он немедленно сбой с NoClassDefFoundError .

Я пробовал комментировать ссылки на classы, которые он не может найти, но всегда есть другое. Насколько можно судить, class-нарушитель всегда

  1. В моем собственном коде
  2. Внутренний class ( Update: с большим количеством исследований, это не всегда так)

Все работает нормально на эмуляторе 5.0.1 (у меня нет устройства для тестирования). Мой файл build.gradle довольно длинный, но выглядит так:

 apply plugin: 'com.android.application' apply plugin: 'android-apt' def AAVersion = "2.7.1" android { compileSdkVersion 19 buildToolsVersion "21.1.1" defaultConfig { applicationId "com.myapp.android" minSdkVersion 8 targetSdkVersion 19 multiDexEnabled = true } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' } } packagingOptions { *snip* } } buildscript { repositories { mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:1.0.0' classpath 'com.neenbedankt.gradle.plugins:android-apt:1.4' } } repositories { maven { url "https://repo.commonsware.com.s3.amazonaws.com" } } apt { arguments { androidManifestFile variant.outputs[0].processResources.manifestFile resourcePackageName 'com.pact.android' } } dependencies { *snip compile project(':...') declarations apt "com.googlecode.androidannotations:androidannotations:$AAVersion" compile "com.googlecode.androidannotations:androidannotations-api:$AAVersion" compile 'com.actionbarsherlock:actionbarsherlock:[email protected]' compile 'com.android.support:support-v4:21.0.3' compile 'com.google.android.gms:play-services:3.1.36' *snip many more compile declarations* compile fileTree(dir: 'libs', include: ['*.jar']) } 

Некоторые примеры classов, которые вызывают проблемы:

  • Анонимный class, который реализует интерфейс внутри библиотеки facebook (как проект библиотеки)
  • Parcelable.CREATOR в моих моделях
  • Внутренний class, расширяющий android.os.Library
  • Внутренний class в моем собственном коде
  • Класс, реализующий интерфейс в библиотеке от maven

Что происходит не так, и как я могу это исправить?

Я не полностью использовал поддержку MultiDex, поэтому некоторые из моих classов не были в надлежащем файле dex. Чтобы исправить это, вам нужно сделать больше, чем просто установить multiDexEnabled = true в блок defaultConfig . Вы также должны:

  1. Включить compile 'com.android.support:multidex:1.0.1' в ваших зависимостях
  2. Пусть ваш class приложения расширяет MultiDexApplication а не просто Application . Кроме того, вы можете вызвать MultiDex.install() в attachBaseContext() вашего приложения.

Подробнее см. https://developer.android.com/tools/building/multidex.html .

1) Добавить multiDexEnabled = true в настройке по умолчанию

2) Добавьте компиляцию com.android.support:multidex:1.0.0 в свои зависимости

3) Класс Application расширяет MultiDexApplication а не просто Application

Я решил проблему, удалив multiDexEnabled = true в моем случае.

1) добавьте multiDexEnabled = true в ваш defaultConfig в build.gradle.

2) Вы также должны включить компиляцию ‘com.android.support:multidex:1.0.1’

3) добавьте следующее в свой тег «application» в своем манифесте:

андроид: имя = “android.support.multidex.MultiDexApplication”

его работа со мной, надеюсь, что помощь

Я также выдаю разрешение после выполнения следующих шагов

1) добавьте multiDexEnabled = true в ваш defaultConfig в build.gradle.

2) Вы также должны включить компиляцию com.android.support:multidex:1.0.1

3) добавьте следующее в свой тег «application» в своем манифесте:

 android:name="android.support.multidex.MultiDexApplication" 

Я получил ту же проблему, попробовал все решения, предлагаемые в StackOverflow, но они не работали в моем случае.
После этого я узнал, что одна из библиотек, скомпилированная Java 8. Итак, мне нужно включить Java 8 в свой проект.

  android { //... compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } } 

Существует много причин, которые приводят к этой ошибке. Надеюсь, поможет.

В моем случае это был Kotlin forEach, вызывающий исключение. Подробнее здесь: java.lang.NoClassDefFoundError $$ inlined $ forEach $ lambda $ 1 в Котлине

  • Возможно ли для TextView Marquee в виджетах расширить приложение AppWidgetProvider?
  • Android: рекомендации AsyncTask: частный class или открытый class?
  • Виджеты не реагируют при повторном добавлении кода
  • Вы должны использовать тему Theme.AppCompat (или потомок) с этим действием
  • Android: AsyncTask vs Service
  • Как получить fragment, чтобы удалить себя, т. Е. Его эквивалент finish ()?
  • MapView в fragmentе (соты)
  • Как я могу поделиться файлом SharedPreferences в двух разных приложениях для Android?
  • Очистить все действия в задаче?
  • Autocompletetextview с пользовательским адаптером и фильтром
  • Android, как применить маску к ImageView?
  • Давайте будем гением компьютера.