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
これは何を意味し、このエラーを防ぐにはどうすればよいですか?
ここでゲームに少し遅れましたが、これはおそらくアプリの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 Studio 2.2以降、アプリケーションでmulti-dexを使用する必要があるかどうかを試行錯誤する必要がなくなりました。 Apk Analyzer を使用して、本当に必要かどうかを確認してください!
Androidアプリケーション(APK)ファイルには、アプリの実行に使用されるコンパイル済みコードを含むDalvik実行可能(DEX)ファイル形式の実行可能バイトコードファイルが含まれます。 Dalvik実行可能ファイルの仕様では、単一のDEXファイル内で参照できるメソッドの総数を65,536に制限しています(Androidフレームワークメソッドを含む) 、ライブラリメソッド、および独自のコード内のメソッド。この制限を超えるには、multidex構成と呼ばれる複数のDEXファイルを生成するようにアプリのビルドプロセスを構成する必要があります。
注:これにより、アプリのすべてのメソッドを参照できます。 2つのモジュール(制限:2 x 65K)がありますが、1つにコンパクト化されているようです。これには、ビルドプロセスのコスト(時間)が伴います。
解決策:
Android { ... defaultConfig { ... multiDexEnabled true } }
私にとっては、レトロフィット2用のsimplexmlコンバーターに関連していました。
compile ("com.squareup.retrofit2:converter-simplexml:2.0.0-beta4"){ exclude module: 'stax' exclude module: 'stax-api' exclude module: 'xpp3'}
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
}
それがあなたのお役に立てば幸いです。
私が遭遇したのとまったく同じ問題!
依存関係が重複していることが原因であることがわかりました。 build.gradleでは、1つの依存関係が既に他の依存関係に含まれている可能性があり、競合が発生します。必要な依存関係を削除し、問題を解決しました。
私の場合、build.gradleファイルに2回これがありました
compile 'com.google.Android.gms:play-services-auth:8.4.0'
2番目のエントリを削除すると、正常に機能しました。
ビルドファイルに特定の依存関係を含めます。
アプリにマップを追加する場合は、include compile 'com.google.Android.gms: play-services-location:9.2.1 '
代わりにコンパイル 'com.google.Android.gms:play-services:9.2.1'
これを修正するために行ったのは、ここから段階的な変更を削除したことです( 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
Android開発者Webサイトから:
Android 5.0(APIレベル21)以降は、ARTと呼ばれるランタイムを使用し、APKファイルからの複数のDEXファイルのロードを単純にサポートします。
私は最小SDKを21に設定し、問題を解決しました(もちろん、最小SDKを21以上に設定しても問題ない場合は、特定のケースを確認する必要があります)
実際には、Android Studioモジュールが多すぎると、multidexが有効になっていない状態でこのエラーが発生していることがわかりました。マルチデックスを有効にしないようにしようとしている場合、制限は約26モジュールであると思われました。これはAndroid Studio 1.5.1でのものでした
google Analytics SDK V3を使用していると思いますが、代わりにV4を使用していますGoogle AnalyticsのSDK V3を使用しているときに同じ問題に直面しています /v4 / 詳細については、このリンクを参照してください。
これは、Android Studioを最新バージョン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'
}