MultiDexApplication не распознан

попытка использовать MultiDexApplication в моем приложении, но класс не распознается, когда я пытаюсь расширить свою активность приложения с ним.

вот моя сборка.файл gradle:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 21
    buildToolsVersion '21.0.1'
    defaultConfig {
        applicationId 'com.myapp'
        minSdkVersion 10
        targetSdkVersion 21
        versionCode 115
        versionName '4.8'
    }

    buildTypes {
        debug {
            debuggable true
            runProguard false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
        release {
            debuggable false
            runProguard true
            zipAlign true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

    packagingOptions {
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/NOTICE.txt'
    }

    lintOptions {
        checkReleaseBuilds false
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])

    compile 'com.google.android.gms:play-services:6.1.11'

    compile 'com.android.support:appcompat-v7:21.0.0'

    compile 'com.nineoldandroids:library:2.4.0'
    compile 'com.viewpagerindicator:library:2.4.1@aar'
    compile project(':facebook')
}

вы можете видеть, что я компилирую на 21, используя последние инструменты сборки и последнюю библиотеку служб и поддержки google play.

кто-нибудь получил эту работу?

4 ответов


класс MultiDexApplication не является частью библиотеки appcompat-v7. Он поставляется в отдельной банке (называется android-support-multidex).

найти android-поддержка-multidex.Джар под /sdk / extras/android/поддержка/multidex/библиотека / libs (доступно из версии 21 библиотеки поддержки) и скопируйте его вlibs папка.

обновление (11/5/2014):
Банку теперь доступен в центре репозиторий:

dependencies {
  ...
  compile 'com.android.support:multidex:1.0.0'
}

подробнее:здесь.


хотя этот вопрос довольно старый, я получил эту ошибку в многомодульной настройке при попытке построить различные модули вместе как один APK для API

Если вы используете AndroidX, обязательно замените старую многодексную зависимость

compile 'com.android.support:multidex:1.0.3'

на новый

implementation 'androidx.multidex:multidex:2.0.0'

я следовал этой сообщение в блоге, в соответствии с которым MultiDexApplication должен быть включен в R21 библиотеки поддержки.

мой IDE было неприятностей это.

Я заставил его работать сейчас с помощью MULTIDEX проект github, добавив (Вы можете увидеть более подробную информацию на странице проекта):

android {
    dexOptions {
        preDexLibraries = false
    }
}

repositories {
  jcenter()
}

dependencies {
  compile 'com.google.android:multidex:0.1'
}

afterEvaluate {
    tasks.matching {
        it.name.startsWith('dex')
    }.each { dx ->
        if (dx.additionalParameters == null) {
            dx.additionalParameters = []
        }
        dx.additionalParameters += '--multi-dex' // enable multidex

        dx.additionalParameters += "--main-dex-list=$projectDir/multidex.keep".toString()
    }
}

и добавление $project_dir / multidex.храните файл со следующим содержимым:

android/support/multidex/BuildConfig.class
android/support/multidex/MultiDex$V14.class
android/support/multidex/MultiDex$V19.class
android/support/multidex/MultiDex$V4.class
android/support/multidex/MultiDex.class
android/support/multidex/MultiDexApplication.class
android/support/multidex/MultiDexExtractor.class
android/support/multidex/MultiDexExtractor.class
android/support/multidex/ZipUtil$CentralDirectory.class
android/support/multidex/ZipUtil.class

проект github страница упоминает также некоторое рассмотрение содержания вашей реализации класса MultiDexApplication:

  • статические поля в вашем классе приложений будут загружены до MultiDex#установить называется! Поэтому рекомендуется избегать статических полей с типами, которые могут быть размещены вне основных классов.файл Декса.
  • методы вашего класса приложения могут не иметь доступа к другим классам которые загружаются после класса приложения. Как workarround для этого, вы можете создать другой класс (любой класс, В приведенном выше примере, я использую Runnable) и выполнить содержимое метода внутри него.

Я получил решение:)

обновление до jdk 8 и изменение местоположения JDK в Android Studio в

файл > структура проекта > расположение SDK

найдите и измените местоположение JDK и нажмите OK