andoridでライブラリモジュールにProduct Flavorを設定するとエラーになってしまう件
andoridのアプリで、共通で使用するライブラリにProduct Flavorを設定すると以下のエラーになってしまう。
ERROR: Unable to resolve dependency for ':app@debug/compileClasspath': Could not resolve project :XXXX ERROR: Unable to resolve dependency for ':app@debugAndroidTest/compileClasspath': Could not resolve project :XXXX ERROR: Unable to resolve dependency for ':app@debugUnitTest/compileClasspath': Could not resolve project :XXXX
アプリモジュールのProduct Flavorの設定は結構情報があるのですが、ライブラリについてはあまり情報がなかったのでメモ。
こちらによると、ライブラリ側で設定したProduct Flavorと同じ内容をapp側のbuild.gradleにも記述する必要があるみたいです。
例えば、ライブラリで本番環境と開発環境でAPIのURLを切り替えたい場合は以下の様な記述で動作しました。
ライブラリモジュールのbuild.gradle
android { : // APIのURL設定 flavorDimensions "api" productFlavors { production { dimension "api" // 本番環境 buildConfigField "String", "API_URL_BASE", "\"https://production.hoge.moga\"" } develop { // 開発環境 dimension "api" buildConfigField "String", "API_URL_BASE", "\"https://develop.hoge.moga\"" } } }
appモジュールのbuild.gradle
android { : flavorDimensions "api" productFlavors { production { dimension "api" //matchingFallbacks = ["production"] } develop { dimension "api" //matchingFallbacks = ["develop"] } } } dependencies { : implementation project(':hogemogalib') }
flavorDimensionsはproductFlavorsの各設定を横断的にグループ化する時に使用するらしく、必須項目です。
ここでは1つしか使用していないので、あまり気にせずとりあえずapiという名前を付けています。
アプリ側のmatchingFallbacksをコメントにしていますが、ライブラリ側にしかないproductFlavorsの設定項目を
使用したときにアプリ側で代替で使用する設定名を記述します。
ここではアプリ、ライブラリとも同じ設定項目を記述しているので、特に使用しなくても問題ないっぽいです。
上記の設定でbuildTypesに指定しているrelease/debugとProductFlavorのproduction/developを組み合わせた 4パターンのビルドができるようになります。
コードからは BuildConfig.API_URL_BASE で現在選択しているProductFlavorに対応する値が取得できます。
尚、Product Flavorに定義する設定名(ここではproduction、develop)は、はbuildTypesに定義しているのと同じ名前は
使用できないらしいです。debug等を指定すると、以下のエラーになりました。
ERROR: ProductFlavor names cannot collide with BuildType names
しかしGoogleのガイド見ても私にはさっぱりわかりませんでした。こういったの理解して開発できる人本当にすごいと思います。