web-dev-qa-db-ja.com

複数のdexファイルで<my package> / BuildConfigが定義されていますが、原因が見つかりません:

私は新しいgradleビルドシステムを使用していますが、次の問題に直面しています:

UNEXPECTED TOP-LEVEL EXCEPTION:
com.Android.dex.DexException: Multiple dex files define Lcom/kibo/mobi/BuildConfig;
    at com.Android.dx.merge.DexMerger.readSortableTypes(DexMerger.Java:594)
    at com.Android.dx.merge.DexMerger.getSortedTypes(DexMerger.Java:552)
    at com.Android.dx.merge.DexMerger.mergeClassDefs(DexMerger.Java:533)
    at com.Android.dx.merge.DexMerger.mergeDexes(DexMerger.Java:170)
    at com.Android.dx.merge.DexMerger.merge(DexMerger.Java:188)
    at com.Android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.Java:439)
    at com.Android.dx.command.dexer.Main.runMonoDex(Main.Java:287)
    at com.Android.dx.command.dexer.Main.run(Main.Java:230)
    at com.Android.dx.command.dexer.Main.main(Main.Java:199)
    at com.Android.dx.command.Main.main(Main.Java:103)

依存関係の初期化何も表示されません。ここにあります:

 firstDebugCompile - ## Internal use, do not manually configure ##
 \--- KiboGradle:KiboSDK:unspecified
 +--- KiboGradle:TextInputAPI:unspecified
 +--- KiboGradle:VoiceImeUtils:unspecified
 +--- com.google.Android.gms:play-services:5.0.77
 |    \--- com.Android.support:support-v4:19.1.0
 +--- com.squareup.picasso:picasso:2.3.2
 +--- com.google.code.gson:gson:2.2.4
 \--- com.crittercism:crittercism-Android-agent:4.5.1

問題が重複したサポートライブラリではないことを確認しようとしたので、追加しようとしました。

compile ('com.google.Android.gms:play-services:5.0.77'){
    exclude module: 'support-v4'
}

その結果、いくつかのsupport-v4ライブラリクラスが見つからないため、このライブラリは他の場所からコンパイルされません。

この問題を引き起こす可能性があることを念頭に置いていた1つのことは、orederでFlavors feautreを使用して、異なるリソースファイルを使用してアプリケーションのいくつかのバージョンを作成するという事実です。

そして、エラーにあるファイルを見ると、私はこれを見る:

**
* Automatically generated file. DO NOT MODIFY
*/
package com.kibo.mobi;

public final class BuildConfig {
  public static final boolean DEBUG = Boolean.parseBoolean("true");
  public static final String PACKAGE_NAME = "com.kibo.mobi.test.official";
  public static final String BUILD_TYPE = "debug";
  public static final String FLAVOR = "liverpool";
  public static final int VERSION_CODE = 1;
  public static final String VERSION_NAME = "1.0";
}

そのため、ファイルのパッケージと文字列値で指定されたパッケージは同じではありません。

この問題を引き起こす可能性のある構成の問題を誰でも見ることができますか?

29
Emil Adz

私の場合、AndroidManifest.xmlファイルに同じパッケージ名のモジュールが2つあったため、同様のエラーが発生しました。モジュールで異なるパッケージ名を使用すると、問題が解決しました。

ライブラリjarが依存関係として複数のモジュールに2回(またはそれ以上)含まれている場合にも、同じことが起こります。この場合、エラーメッセージには、そのライブラリのパッケージ名に基づいて名前が付けられた重複した構成に関するメッセージが表示されます。ライブラリを1つのモジュールに依存関係として含めることで解決し、2番目のモジュールには依存関係に最初のモジュールがありました。

76
Mixaz

これをbuild.gradleに追加します。

Android {
    dexOptions {
        preDexLibraries = false
    }
}

このように競合するBuildConfig.Java

編集:

上記が機能する理由:Android studioは最初に dex アプリモジュールをデックスする前のライブラリです。アプリと同じパッケージ名のライブラリモジュールがある場合モジュール、この「事前設定」はBuildConfig.Javaアプリ用と同じパッケージ内。

'pre-dexing'ではない ビルドプロセスを少し遅くする なので、代わりにライブラリのパッケージ名を変更することをお勧めします。

22
iceman

私にとっては、単にプロジェクトをきれいにするだけでこのエラーは解消されました。

11
Steve D.

instant apkの署名でこの問題が発生していました。問題:

悪いモジュール/アプリ/manifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
    package="com.example.stackoverflow">

良い:module/app/manifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
    package="com.example.stackoverflow.app">

パッケージ名の最後に.appを追加するだけです

3
Pablo Cegarra

NewRelicを使用している場合は、少なくとも5.21.1

0
Sami