web-dev-qa-db-ja.com

Android gradle buildTypes:Duplicate class

アプリをgradleを使用するように変換し、buildTypesを使用しようとしています。リリースビルド用に変更したいConstantsクラスがあります。そのため、src/main/Java/my/package/name/Constants.Javasrc/release/Java/my/package/name/Constants.Javaにファイルがあります。

これをビルドしようとすると、gradleは、リリースのビルドタイプのConstantsファイルでビルドが失敗し、重複するクラスであるというエラーが表示されます。

次のように、build.gradleに別のsourceSetを追加してみました。

sourceSets {
    main {
        Java.srcDirs = ['src/main/Java'];
        //...
    }
    release {
        Java.srcDirs = ['src/release/Java'];
    }
}

しかし、これでも同じエラーが発生します。だから、私はここで何が間違っているのだろうと思いますか?

32
Arne517

mainおよびreleaseにクラスを含めることはできません。 debugreleaseのように分割する必要があります。

gradleは、各buildTypeのソースセットをmainとマージします。
これが、releaseビルドでクラスが複製される理由です。

したがって、ルールは次のとおりです。クラスをmainに、またはeverybuildTypeに入れますが、両方には入れません。

76
flx

「修正」からの回答は途中で助けになりましたが、(クラスConfigに)定数が欠落しているというメインGradleからエラーが発生しました。これは、クラスが有料版と無料版のみでメインではなかったためです。 Configクラスが見つかりませんでした。これがスタジオのバグかどうかわかりません...私は最終的に次のように解決しました:

buildTypes {

    release {
        ...
        buildConfig "public static final boolean XYZ = false;"
    }

}

そして、Config.XYZクラス定数を使用する代わりに、buildConfig.XYZを使用しました

0
powder366