web-dev-qa-db-ja.com

予期しないトップレベルの例外:com.Android.dex.DexException:複数のdexファイルが定義しています

google analytics の構成をAndroidプロジェクトに追加してプロジェクトをビルドすると、次のエラーが表示されます。

:app:transformClassesWithDexForDebug
UNEXPECTED TOP-LEVEL EXCEPTION:
com.Android.dex.DexException: Multiple dex files define Ljavax/inject/Inject;
    at com.Android.dx.merge.DexMerger.readSortableTypes(DexMerger.Java:596)
    at com.Android.dx.merge.DexMerger.getSortedTypes(DexMerger.Java:554)
    at com.Android.dx.merge.DexMerger.mergeClassDefs(DexMerger.Java:535)
    at com.Android.dx.merge.DexMerger.mergeDexes(DexMerger.Java:171)
    at com.Android.dx.merge.DexMerger.merge(DexMerger.Java:189)
    at com.Android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.Java:502)
    at com.Android.dx.command.dexer.Main.runMonoDex(Main.Java:334)
    at com.Android.dx.command.dexer.Main.run(Main.Java:277)
    at com.Android.dx.command.dexer.Main.main(Main.Java:245)
    at com.Android.dx.command.Main.main(Main.Java:106)

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:transformClassesWithDexForDebug'.
> com.Android.build.transform.api.TransformException: com.Android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command '/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/bin/Java'' finished with non-zero exit value 2

* Try:
Run with --info or --debug option to get more log output.

* Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:transformClassesWithDexForDebug'.
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.Java:69)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.Java:46)
    at org.gradle.api.internal.tasks.execution.PostExecutionAnalysisTaskExecuter.execute(PostExecutionAnalysisTaskExecuter.Java:35)
    at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.Java:64)
    at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.Java:58)
    at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.Java:42)
    at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.Java:52)
    at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.Java:53)
    at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.Java:43)
    at org.gradle.api.internal.AbstractTask.executeWithoutThrowingTaskFailure(AbstractTask.Java:310)
    at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.executeTask(AbstractTaskPlanExecutor.Java:79)
    at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.processTask(AbstractTaskPlanExecutor.Java:63)
    at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.run(AbstractTaskPlanExecutor.Java:51)
    at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor.process(DefaultTaskPlanExecutor.Java:23)
    at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter.execute(DefaultTaskGraphExecuter.Java:88)
    at org.gradle.execution.SelectedTaskExecutionAction.execute(SelectedTaskExecutionAction.Java:37)
    at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.Java:62)
    at org.gradle.execution.DefaultBuildExecuter.access$200(DefaultBuildExecuter.Java:23)
    at org.gradle.execution.DefaultBuildExecuter$2.proceed(DefaultBuildExecuter.Java:68)
    at org.gradle.execution.DryRunBuildExecutionAction.execute(DryRunBuildExecutionAction.Java:32)
    at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.Java:62)
    at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.Java:55)
    at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.Java:149)
    at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.Java:106)
    at org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLauncher.Java:86)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter$DefaultBuildController.run(InProcessBuildActionExecuter.Java:90)
    at org.gradle.tooling.internal.provider.runner.BuildModelActionRunner.run(BuildModelActionRunner.Java:54)
    at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.Java:35)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.Java:41)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.Java:28)
    at org.gradle.launcher.daemon.server.exec.ExecuteBuild.doBuild(ExecuteBuild.Java:49)
    at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.Java:36)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.Java:120)
    at org.gradle.launcher.daemon.server.exec.WatchForDisconnection.execute(WatchForDisconnection.Java:37)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.Java:120)
    at org.gradle.launcher.daemon.server.exec.ResetDeprecationLogger.execute(ResetDeprecationLogger.Java:26)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.Java:120)
    at org.gradle.launcher.daemon.server.exec.RequestStopIfSingleUsedDaemon.execute(RequestStopIfSingleUsedDaemon.Java:34)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.Java:120)
    at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.Java:74)
    at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.Java:72)
    at org.gradle.util.Swapper.swap(Swapper.Java:38)
    at org.gradle.launcher.daemon.server.exec.ForwardClientInput.execute(ForwardClientInput.Java:72)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.Java:120)
    at org.gradle.launcher.daemon.server.health.DaemonHealthTracker.execute(DaemonHealthTracker.Java:47)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.Java:120)
    at org.gradle.launcher.daemon.server.exec.LogToClient.doBuild(LogToClient.Java:66)
    at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.Java:36)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.Java:120)
    at org.gradle.launcher.daemon.server.exec.EstablishBuildEnvironment.doBuild(EstablishBuildEnvironment.Java:71)
    at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.Java:36)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.Java:120)
    at org.gradle.launcher.daemon.server.health.HintGCAfterBuild.execute(HintGCAfterBuild.Java:41)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.Java:120)
    at org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy$1.run(StartBuildOrRespondWithBusy.Java:50)
    at org.gradle.launcher.daemon.server.DaemonStateCoordinator$1.run(DaemonStateCoordinator.Java:246)
    at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.Java:54)
    at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.Java:40)
Caused by: org.gradle.internal.UncheckedException: com.Android.build.transform.api.TransformException: com.Android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command '/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/bin/Java'' finished with non-zero exit value 2
    at org.gradle.internal.UncheckedException.throwAsUncheckedException(UncheckedException.Java:45)
    at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.Java:78)
    at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$IncrementalTaskAction.doExecute(AnnotationProcessingTaskFactory.Java:243)
    at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.Java:219)
    at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$IncrementalTaskAction.execute(AnnotationProcessingTaskFactory.Java:230)
    at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.Java:208)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.Java:80)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.Java:61)
    ... 57 more
Caused by: com.Android.build.transform.api.TransformException: com.Android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command '/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/bin/Java'' finished with non-zero exit value 2
    at com.Android.build.gradle.internal.transforms.DexTransform.transform(DexTransform.Java:411)
    at com.Android.build.gradle.internal.pipeline.TransformTask.transform(TransformTask.Java:112)
    at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.Java:75)
    ... 63 more
Caused by: com.Android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command '/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/bin/Java'' finished with non-zero exit value 2
    at com.Android.build.gradle.internal.process.GradleProcessResult.assertNormalExitValue(GradleProcessResult.Java:42)
    at com.Android.builder.core.AndroidBuilder.convertByteCode(AndroidBuilder.Java:1325)
    at com.Android.build.gradle.internal.transforms.DexTransform.transform(DexTransform.Java:396)
    ... 65 more
Caused by: org.gradle.process.internal.ExecException: Process 'command '/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/bin/Java'' finished with non-zero exit value 2
    at org.gradle.process.internal.DefaultExecHandle$ExecResultImpl.assertNormalExitValue(DefaultExecHandle.Java:365)
    at com.Android.build.gradle.internal.process.GradleProcessResult.assertNormalExitValue(GradleProcessResult.Java:40)
    ... 67 more

これは何を意味し、このエラーを防ぐにはどうすればよいですか?

45
confile

ここでゲームに少し遅れましたが、これはおそらくアプリのbuild.gradleファイルにリストした依存関係の問題です。

多くのテストの後、私は問題を追跡し、他の人の助けになると信じています。

推奨されないこと:

Build.gradleでmultiDexを有効にするための絶対的なneedを持たない限りしないでください、これは単に基盤をステップオーバーあなたのアプリの問題とその根本に到達していない。また、apkのサイズを不必要に大きくしているため、dexファイルに競合するメソッドがあると、予期しないクラッシュが発生する可能性があります。

注目すべきこと:

Build.gradleファイルのすべての依存関係を確認します。既に含まれている依存関係も含む依存関係を参照していますか?たとえば、appcompat-v7を含める場合、v7にはv4のすべての機能が含まれるため、appcompat-v4を含める必要はありません。

実際に見つかったもの(私の問題により、アプリがdexファイルのメソッド制限を超えています)----> GOOGLE PLAY SERVICES

Build.gradle compile 'com.google.Android.gms:play-services:8.3.0'のこの行からすべてのgoogle play servicesライブラリの依存関係STAY AWAYを必要とせず、代わりに必要なものを使用してください!!

Googleには、選択的にコンパイルするためのライブラリの包括的なリストがありますhere

以上のことから、おそらく次の1行のみをGoogleアナリティクスのgradleに含める必要があります。

  dependencies{
       compile 'com.google.Android.gms:play-services-analytics:8.3.0'
  }

編集

また、プロジェクトのルートに移動して(またはAndroid studioのターミナルを使用して)実行することにより、依存関係ツリーを表示できます。

./gradlew app:dependencies

幸運と幸せなコーディング!

更新

Android St​​udio 2.2以降、アプリケーションでmulti-dexを使用する必要があるかどうかを試行錯誤する必要がなくなりました。 Apk Analyzer を使用して、本当に必要かどうかを確認してください!

97
kandroidj

説明:65,000以上のメソッドを使用したアプリの構築

Androidアプリケーション(APK)ファイルには、アプリの実行に使用されるコンパイル済みコードを含むDalvik実行可能(DEX)ファイル形式の実行可能バイトコードファイルが含まれます。 Dalvik実行可能ファイルの仕様では、単一のDEXファイル内で参照できるメソッドの総数を65,536に制限しています(Androidフレームワークメソッドを含む) 、ライブラリメソッド、および独自のコード内のメソッド。この制限を超えるには、multidex構成と呼ばれる複数のDEXファイルを生成するようにアプリのビルドプロセスを構成する必要があります。

注:これにより、アプリのすべてのメソッドを参照できます。 2つのモジュール(制限:2 x 65K)がありますが、1つにコンパクト化されているようです。これには、ビルドプロセスのコスト(時間)が伴います。

解決策:

  1. ライブラリでコードをフォーマットして、余分なクラスを削除し、制限メソッドを超えないようにする必要があります。たとえば、マップplay-services(com.google.Android.gms:play-services:8.1.0)を使用する場合、(compile 'com.google.Android.gms:play-services-maps:8.1に変更できます。 0 ')不要なライブラリの依存関係を排除します。次に、AndroidStudioでGradleを同期し、実行されるかどうかを確認します。実行しない場合は、ポイント2に進みます。
  2. これをbuild.gradle(アプリモジュール)に追加します。
Android {
   ...
   defaultConfig {
      ...
      multiDexEnabled true
   }
}
12
SergioLucas

私にとっては、レトロフィット2用のsimplexmlコンバーターに関連していました。

compile ("com.squareup.retrofit2:converter-simplexml:2.0.0-beta4"){ exclude module: 'stax' exclude module: 'stax-api' exclude module: 'xpp3'}

5
Denis Nek

Android 5.0以降のMultidexサポート

Android 5.0以降はARTと呼ばれるランタイムを使用します。これは、アプリケーションAPKファイルからの複数のdexファイルの読み込みをネイティブでサポートします。 ARTは、アプリケーションのインストール時にクラス(..N).dexファイルをスキャンし、Androidデバイスによる実行のために単一の.oatファイルにコンパイルするプリコンパイルを実行します。 Android 5.0ランタイムの詳細については、「ARTの紹介」を参照してください。

つまり、アプリはAPIレベル21以上で正常に動作します。

Android 5.0より前のMultidexサポート

Android 5.0より前のプラットフォームのバージョンは、アプリコードの実行にDalvikランタイムを使用します。デフォルトでは、DalvikはアプリをAPKごとに1つのclasses.dexバイトコードファイルに制限します。この制限を回避するには、multidexサポートライブラリを使用できます。これは、アプリのプライマリDEXファイルの一部になり、追加のDEXファイルとそこに含まれるコードへのアクセスを管理します。

そのため、まず、正しい依存関係をインポートしたことを確認します。

dependencies {
  compile 'com.Android.support:multidex:1.0.1'
}

マニフェストで、multidexサポートライブラリのMultiDexApplicationクラスをアプリケーション要素に追加します。

<?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>
</manifest>

その代わりに、アプリがApplicationクラスを拡張する場合、attachBaseContext()メソッドをオーバーライドし、MultiDex.install(this)を呼び出してmultidexを有効にすることができます。

   @Override
protected void attachBaseContext(Context base) {
    super.attachBaseContext(base);
    MultiDex.install(this);
}

最後に、multiDexEnabled trueを追加して、以下のようにbuild.gradleファイルを更新する必要があります。

defaultConfig {  
        applicationId '{Project Name}'  
        minSdkVersion 15  
        targetSdkVersion 23  
        versionCode 1  
        versionName "1.0"  
        multiDexEnabled true  
    }  

それがあなたのお役に立てば幸いです。

3

私が遭遇したのとまったく同じ問題!

依存関係が重複していることが原因であることがわかりました。 build.gradleでは、1つの依存関係が既に他の依存関係に含まれている可能性があり、競合が発生します。必要な依存関係を削除し、問題を解決しました。

2
JohannaX

私の場合、build.gradleファイルに2回これがありました

compile 'com.google.Android.gms:play-services-auth:8.4.0'

2番目のエントリを削除すると、正常に機能しました。

2
techtinkerer

ビルドファイルに特定の依存関係を含めます。

アプリにマップを追加する場合は、include compile 'com.google.Android.gms: play-services-location:9.2.1 '


代わりにコンパイル 'com.google.Android.gms:play-services:9.2.1'

1
Vikas

これを修正するために行ったのは、ここから段階的な変更を削除したことです( https://developers.google.com/analytics/devguides/collection/Android/v4/ )そしてAndroidで_ Studioは「ファイル/プロジェクト構造」に入り、分析をクリックします。ボックスがオンになっている場合はチェックを外し、gradle syncをオンにし、もう一度チェックボックスをオンにして、ボタンをクリックしてサインインします。実際のトラッカーIDをmTracker = analytics.newTracker(<here>)にコピーする必要があります。このページをご覧ください。 https://developers.google.com/Android/reference/com/google/Android/gms/analytics/GoogleAnalytics

1
Ryan Johnston

同じ問題が、react-native-svgを使用する場合。これは私を助けました:

cd Android
./gradlew clean

ソース

0
Zdeněk

Android開発者Webサイトから:

Android 5.0(APIレベル21)以降は、ARTと呼ばれるランタイムを使用し、APKファイルからの複数のDEXファイルのロードを単純にサポートします。

私は最小SDKを21に設定し、問題を解決しました(もちろん、最小SDKを21以上に設定しても問題ない場合は、特定のケースを確認する必要があります)

0
Chehadeh

実際には、Android St​​udioモジュールが多すぎると、multidexが有効になっていない状態でこのエラーが発生していることがわかりました。マルチデックスを有効にしないようにしようとしている場合、制限は約26モジュールであると思われました。これはAndroid St​​udio 1.5.1でのものでした

0

google Analytics SDK V3を使用していると思いますが、代わりにV4を使用していますGoogle AnalyticsのSDK V3を使用しているときに同じ問題に直面しています /v4 / 詳細については、このリンクを参照してください。

0
Satyavrat

これは、Android St​​udioを最新バージョン1.4に更新した場合に発生する可能性があります。サポートライブラリを最新バージョンに更新しましたか? compileSdkVersionは23でなければなりません。

apply plugin: 'com.Android.application'

Android {
compileSdkVersion 23 //update this to 23
buildToolsVersion "21.1.2"

defaultConfig {
    applicationId "your.package.name"
    minSdkVersion 16
    targetSdkVersion 21
    multiDexEnabled true //enable this
}

buildTypes {
    release {
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.txt'
        }
    }
}

dependencies {
// update these to 23 if you have them and add the multidex
    compile 'com.Android.support:support-v4:23.0.1'
    compile 'com.Android.support:appcompat-v7:23.0.1'
    compile 'com.Android.support:design:23.0.1'
    compile 'com.google.Android.gms:play-services:+'

    compile 'com.Android.support:multidex:1.0.1'

}
0
user2759839