私はいくつかのサーバーインフラストラクチャーで動作するAndroidアプリケーションを開発しています。 serv1、serv2、serv3という3つのサーバー・インフラストラクチャーがあります(この例では)。 また、私は8種類のフレーバー(flav1、flav2、... flav8)を持っており、その数は増加している可能性があります。多数のプロダクションフレーバーを使用したサーバー構成の一致
ドメインやポートなどのサーバー構成はServerConfig.java
に格納されます。多くの重複したコードにあり、私見を
├ app/src
| ├ flav1/java/app/package/name/ServerConfig.java //config for serv1
| ├ flav2/java/app/package/name/ServerConfig.java //config for serv1
| ├ flav3/java/app/package/name/ServerConfig.java //config for serv2
| ├ flav4/java/app/package/name/ServerConfig.java //config for serv3
| ├ flav5/java/app/package/name/ServerConfig.java //config for serv2
| ├ flav6/java/app/package/name/ServerConfig.java //config for serv3
| ├ flav7/java/app/package/name/ServerConfig.java //config for serv1
| └ flav8/java/app/package/name/ServerConfig.java //config for serv3
そして、それが正常に動作しますが、: 各味は、対応するサーバインフラストラクチャの構成でServerConfigのjavaファイルを持っています。
ここで、HTTPS検証用のcrtファイルを追加する必要があります。私はapkファイルに3つのcrtファイルがすべて含まれていることを望んでいません。 だから私は、サーバー構成ごとにディレクトリを作成する方法について考える:
├ app/src/main/java/app/package/name
├ app/server
| ├ serv1
| | ├ ServerConfig.java
| | └ ca.crt
| ├ serv2
| | ├ ServerConfig.java
| | └ ca.crt
| ├ serv3
| | ├ ServerConfig.java
| | └ ca.crt
そしてメインの場所を調達するための構成とCRTをコピーするbuild.gradleを使用しています。
android {
productFlavors.whenObjectAdded { flavor ->
flavor.ext.set('serverType', 'serv1') //serv1/serv2/serv3
}
productFlavors {
flav1 {
serverType = 'serv1'
}
flav1 {
serverType = 'serv2'
}
...
flav8 {
serverType = 'serv3'
}
}
}
afterEvaluate {
android.applicationVariants.all { variant ->
variant.productFlavors.each { flavor ->
if(flavor.serverType.contains("serv1"){
//add dependency to copy task to pre + variant.name + Build
//to copy serv1 config and crt from app/server/serv1 to app/src/main/java/app/package/name
}
...
}
}
}
このソリューションの大きな欠点は、コーディングと貼り付けのためのハードコードされた場所です。したがって、ServerConfigとca.crtのリファクタリング(例:名前の変更)はすべてbuild.gradleファイルを変更する必要があります。
サーバー構成(ServerConfig.javaおよびca.crt)と複数のプロダクションフレーバをマッチングするためのより良いソリューションがありますか?
フレーバーが他のフレーバーから継承することができれば非常に役に立ちます。 [商品の問題の継承の可能性](https://code.google.com/p/android/issues/detail?id=183350) – obywatelgcc