62

アプリで新しいMultiDex サポートを試しています。これまでのところ、アプリを正しくコンパイルすることができましたが、実行すると次の例外が発生します。

java.lang.RuntimeException: Unable to instantiate application android.support.multidex.MultiDexApplication: java.lang.ClassNotFoundException: Didn't find class "android.support.multidex.MultiDexApplication" on path: DexPathList[[zip file "/data/app/me.myapp.main-2.apk"],nativeLibraryDirectories=[/data/app-lib/me..main-2, /vendor/lib, /system/lib]]
    at android.app.LoadedApk.makeApplication(LoadedApk.java:507)
    at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4382)
    at android.app.ActivityThread.access$1500(ActivityThread.java:139)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1270)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:136)
    at android.app.ActivityThread.main(ActivityThread.java:5086)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:515)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
    at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.ClassNotFoundException: Didn't find class "android.support.multidex.MultiDexApplication" on path: DexPathList[[zip file "/data/app/me.myapp.main-2.apk"],nativeLibraryDirectories=[/data/app-lib/me.myapp.main-2, /vendor/lib, /system/lib]]
    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:497)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:457)
    at android.app.Instrumentation.newApplication(Instrumentation.java:998)
    at android.app.LoadedApk.makeApplication(LoadedApk.java:502)

これは私のgradleファイルです:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 21
    buildToolsVersion "21.1.0"

    defaultConfig {
        minSdkVersion 16
        targetSdkVersion 21
        multiDexEnabled true
    }
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        }
        debug {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        }
    }
    packagingOptions {
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/NOTICE.txt'
    }
}

repositories {
    mavenCentral()
    mavenLocal()
}


dependencies {
    compile 'com.android.support:multidex:1.0.0'
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile 'com.android.support:support-v4:21.0.0'
    compile 'com.android.support:support-v13:21.0.0'
    compile 'com.android.support:appcompat-v7:21.0.0'
}

そして私の AndroidManifest.xml:

<application
android:name="android.support.multidex.MultiDexApplication">

何が問題なのかわかりません。私はドキュメントに従ってすべてをやっていると思います。私が見逃しているものは他にありますか?SDK マネージャーから最新のサポート ライブラリとリポジトリがインストールされていることを確認しました。

4

14 に答える 14

19

私の構成:

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.14.+' // 0.14.1, 2014-11-6
    }
}

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

android {
    compileSdkVersion = 21
    buildToolsVersion = "21.1.0"

    defaultConfig {
        minSdkVersion 14
        targetSdkVersion 21
        multiDexEnabled true
    }
}

残念ながら、私は同じ問題を抱えています。しかし、私は奇妙な状況を見つけました:

ビルド/中間体/デックス/デバッグ:

-rw-rw-r--  1 andrew andrew  2221176 Nov  6 20:18 classes2.dex
-rw-rw-r--  1 andrew andrew  8357596 Nov  6 20:18 classes.dex

apk を解凍し、build/outputs/apk:

-rw-rw-r-- 1 andrew andrew 8357596 Nov  6 20:18 classes2.dex
-rw-rw-r-- 1 andrew andrew 2221176 Nov  6 20:18 classes.dex

apk では、classes.dex のメイン クラスは classes2.dex よりも大きくする必要がありますが、そうではありません。クラスをチェックするために dex2jar & unzip jar も行います。アプリケーション クラスは classes.dex にはありませんが、逆に classes2.dex にはありません。

しかし、私はそれを修正する必要がありました。試すことができるパッチを適用したAndroid gradleプラグインは次のとおりです。

buildscript {
    repositories {
        mavenCentral()
        maven { url 'https://github.com/yongjhih/android-gradle-plugin.m2/raw/master/' }
    }
    dependencies {
        classpath 'com.infstory.tools.build:gradle:0.14.+'
    }
}

パッチはhttps://github.com/yongjhih/android-gradle-plugin/commit/9c2212e3b1b4c6e1f7b47f2086aba1903a6258bf または https://android-review.googlesource.com/#/c/113331/にあります。

問題: https://code.google.com/p/android/issues/detail?id=78761

公式パッチはhttps://android-review.googlesource.com/#/c/113201/で既にマージされているので、次のバージョンで修正されると思います。

0.14.2 (2014/11/10) で修正済みです。( http://tools.android.com/tech-docs/new-build-systemから)

Release notes:

0.14.2 (2014/11/10)

Fix potential multi-dex issue where the dex files could be renamed during packaging, leading to the wrong main dex file being used.
Fix versionNameSuffix support
Fix BuildType.initWith to copy shrinkResources flag
setup default proguard rule file if none are provided (SDK/tools/proguard/proguard-android.txt)
BuildType.pseudoLocalesEnabled flag to include fake locales in apk.
于 2014-11-06T14:35:33.153 に答える
7

私は最近この問題を抱えていました。構成を変更していないにもかかわらず、このエラーが発生し始めました。仮想デバイスの削除や新しいデバイスの作成など、提案されたすべてのソリューションを試しました。

ただし、APK をビルドし、エミュレーターにドラッグしてインストールすると、問題なく動作することに気付きました。

最終的にプロジェクトをクリーニングして再実行すると、うまくいきました。

于 2017-10-04T23:51:23.147 に答える