前置き
gradleの超ベンリ機能にBuildTypes,flavorsがあります。
- BuildTypes
Release, Debugを切り替えることができます。
buildTypes {
release {
runProguard true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.hoge
}
debug {
debuggable true
applicationIdSuffix = '.alpha'
versionNameSuffix = 'a'
}
}
- flavors
同じアプリの別機能を実装する際に利用します。
productFlavors {
//通常版
normal {
applicationId = 'com.tomoima.hogeApp'
}
//海外版
abtest {
applicationId = 'com.tomoima.hogeGlobalApp'
}
}
詳しくはこちらhttp://vividcode.hatenablog.com/entry/android-app/build-variantsを見ると勉強になります。
問題
BuildTypesやflavorsを使うことで,同じクラス名でソースコードを切り替えることが出来るようになります。で、切り替えたいjavaファイル(ここではMoge.java)以下のようにファイルを置くと、エラーメッセージがでます。
//debug版
src/debug/java/com/tomoima/hogeApp/Moge.java
//release版
src/release/java/com/tomoima/hogeApp/Moge.java
出るメッセージ(IDEで赤線がでます):
"Duplicate class found src/main/java/com/tomoima/hogeApp/Moge.java"
原因
src/main配下においてあるファイルとBuildTypesやflavors配下にあるファイル名が重なるとNGのようです。
解決策
src/main配下にある同じMoge.javaファイルを消せばOKです。
あとは、BuildVariantでビルドしたいタイプを切り替えるか、ターミナルからgradleのオプションでビルドを切り替えることができます。