Android 4.x NoClassDefFoundError с полностью реализованной Multidex

Недавно я добавил в свое приложение еще одну зависимость, которая превысила ограничение в 64 КБ и потребовала Multidex. При запуске на Android 4.x приложение теперь падает при запуске с NoClassDefFoundError:

FATAL EXCEPTION: main
Process: org.naturenet.debug, PID: 3136
java.lang.NoClassDefFoundError: org.naturenet.util.ForestFire
at org.naturenet.NatureNetApplication.onCreate(NatureNetApplication.java:60)

Другие случаи этой ошибки предполагают, что это происходит потому, что Multidex не полностью реализован, но это все еще происходит со всеми следующими изменениями:

файл сборки приложения

dependencies {
    compile 'com.android.support:multidex:1.0.1'
    compile 'com.android.support:appcompat-v7:25.1.0'
    compile 'com.android.support:support-v4:25.1.0'
    ...
}

android {
    compileSdkVersion 25
    buildToolsVersion "25.0.2"
    defaultConfig {
        applicationId "org.naturenet"
        minSdkVersion 16
        targetSdkVersion 23
        multiDexEnabled true
        jackOptions {
            enabled true
            additionalParameters('jack.incremental': 'true')
        }
    }
}

Класс приложения

public class NatureNetApplication extends MultiDexApplication {

Класс ForestFire, о котором идет речь, не изменился. Изначально у меня были разные реализации в исходных деревьях отладки и выпуска, но замена их одним файлом в основном исходном дереве не имела никакого значения.

2 ответа

Решение

У меня также была такая же проблема на устройствах Android 4.*, и это как-то было связано с использованием набора инструментов Jack.

Но Джек устарел, и была выпущена Android Studio 2.4 Preview 6:

Функции языка Java 8 теперь поддерживаются системой сборки Android в пути компиляции javac/dx. Плагин Gradle для Android Studio теперь десагирует файлы классов Java 8 в файлы классов, совместимые с Java 7, так что вы можете использовать лямбда-выражения, ссылки на методы и другие функции Java 8.

Смотрите это для получения дополнительной информации.

Теперь вы можете установить Android Studio Preview и удалить jackOptions от build.gradle,

Попробуйте добавить это в свой манифест, если вы этого не сделали.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.android.multidex.myapplication">
<application
    ...
    android:name="android.support.multidex.MultiDexApplication">
    ...
</application>

Для получения дополнительной информации: https://developer.android.com/studio/build/multidex.html?hl=en-419

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