Подтвердить что ты не робот

NoClassDefFoundError с Android Studio на Android 4

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

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

  • В моем собственном коде
  • Внутренний класс (Обновление:). С большим количеством исследований это не всегда верно.

Все работает нормально на эмуляторе 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'])
}

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

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

3) Application расширяет MultiDexApplication вместо просто Application

Ответ 3

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

Ответ 4

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

2) Также вам нужно включить компилировать 'com.android.support:multidex:1.0.1'

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

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

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

Ответ 5

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

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

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

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

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

Ответ 6

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

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

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