web-dev-qa-db-ja.com

パスでクラス「Android.support.multidex.MultiDexApplication」が見つかりませんでした:DexPathList

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

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マネージャーから最新のサポートライブラリとリポジトリがインストールされていることを確認しました。

40

私の構成:

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
    }
}

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

build/intermediates/dex/debug:

-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では、classs.dexのメインクラスは、classes2.dexより大きくなければなりませんが、そうではありません。また、クラスをチェックするためにdex2jarと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)。(from 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.
16
Andrew Chen

ジェットパックバージョン、つまりandroidxを使用していたため、解決策は役に立ちませんでした。ライブラリ。

公式 doc に従いました。
そして
名前をandroidx .... Multidexに変更する必要がありました。

<application
            Android:name="androidx.multidex.MultiDexApplication" >
        ...
</application>

Hope Itは、jetpackでmultidexを追加しようとしている他の人々を助けます。

10
Man

私の場合、マニフェストのコードの下の変更によって解決されました

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

Android:name="androidx.multidex.MultiDexApplication"
7
Pooja

Multidex構成を使用するようにアプリプロジェクトを設定するには、アプリがサポートする最小Androidバージョンに応じて、アプリプロジェクトに以下の変更を加える必要があります。

MinSdkVersionが21以上に設定されている場合、次に示すように、モジュールレベルのbuild.gradleファイルでmultiDexEnabledをtrueに設定するだけです。

Android {
    defaultConfig {
        ...
        minSdkVersion 21 
        targetSdkVersion 26
        multiDexEnabled true
    }
    ...
}

ただし、minSdkVersionが20以下に設定されている場合、次のようにmultidexサポートライブラリを使用する必要があります。

  • モジュールレベルのbuild.gradleファイルを変更してmultidexを有効にし、次に示すようにmultidexライブラリを依存関係として追加します。

    Android {
        defaultConfig {
            ...
            minSdkVersion 15 
            targetSdkVersion 26
            multiDexEnabled true
        }
        ...
    }
    
    dependencies {
      compile 'com.Android.support:multidex:1.0.1'
    }
    
  • Applicationクラスをオーバーライドするかどうかに応じて、次のいずれかを実行します。

    • Applicationクラスをオーバーライドしない場合は、マニフェストファイルを編集して、次のようにタグにAndroid:nameを設定します。

      <?xml version="1.0" encoding="utf-8"?>
      <manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
          package="com.example.myapp">
          <application
                  Android:name="Android.support.multidex.MultiDexApplication" >
              ...
          </application>
      </manifest>
      
    • Applicationクラスをオーバーライドする場合は、次のようにMultiDexApplication(可能な場合)を拡張するように変更します。

      public class MyApplication extends MultiDexApplication { ... }
      
    • または、Applicationクラスをオーバーライドしてもベースクラスを変更できない場合は、代わりにattachBaseContext()メソッドをオーバーライドし、MultiDex.install(this)を呼び出してmultidexを有効にできます。

      public class MyApplication extends SomeOtherApplication {
        @Override
        protected void attachBaseContext(Context base) {
           super.attachBaseContext(base);
           MultiDex.install(this);
        }
      }
      
6

最新のAndroid Studioを使用し、公式ドキュメントに従ってmultidexにサポートを追加しました https://developer.Android.com/studio/build/multidex.html しかし、それでも同じ例外が発生し、それを解決するのに多くの時間を費やしました。最後に、「Java例外ブレークポイント-例外」と「例外ブレークポイント-スローされた場合」を有効にしたことがわかりました。それらを無効にすると、アプリは問題なく実行されました。

Multidexに関する公式ドキュメント https://developer.Android.com/studio/build/multidex.html に従ってください。できます。

3
Vince Yuan

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

ただし、APKをビルドし、エミュレーターにドラッグしてインストールすると、正常に機能することに気付きました。

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

3
sorter

非常に奇妙なことに、私は同じエラーメッセージを受け取りましたが、いくつかのgradle行を修正した後、動作しました。たぶんそれは誰かを助ける:

プロジェクトbuild.gradle:

から:

..

dependencies {
        // Android Gradle Plugin
        classpath 'com.Android.tools.build:gradle:3.2.1'
        // Analytics
        **classpath 'com.google.gms:google-services:3.0.0'**
}

..

宛先:..

dependencies {
        // Android Gradle Plugin
        classpath 'com.Android.tools.build:gradle:3.2.1'
        // Analytics
        **classpath 'com.google.gms:google-services:3.2.1'**
}

..

モジュールbuild.gradleで:

から:

..

dependencies {
    implementation 'com.Android.support:multidex:1.0.3'
    implementation 'com.Android.support:support-v4:26.1.0'
    implementation 'com.Android.support:support-compat:26.1.0'
    implementation 'com.Android.support:appcompat-v7:26.1.0'
    **implementation 'com.google.Android.gms:play-services-analytics:12.0.1'**
}

..

に:

..

dependencies {
    implementation 'com.Android.support:multidex:1.0.3'
    implementation 'com.Android.support:support-v4:26.1.0'
    implementation 'com.Android.support:support-compat:26.1.0'
    implementation 'com.Android.support:appcompat-v7:26.1.0'
    **implementation 'com.google.Android.gms:play-services-analytics:16.0.5'**
}

..

私のコードには他の変更はありませんでしたが、修正版は4.xエミュレータでも機能しました。 **マークされた行のみが変更されます。

0
Miki

これは私のために働いた。

ファイル-> Gradleファイルとプロジェクトを同期

0
just aguy