Я разрабатываю приложение для Android для работы с некоторой серверной инфраструктурой. Теперь есть 3 серверные инфраструктуры, называемые serv1, serv2, serv3 (в этом примере). Также у меня есть 8 продуктов (flav1, flav2, ... flav8), и это число может быть увеличено.Соответствующая конфигурация сервера со многими производственными аксессуарами
Конфигурация сервера, такая как домен и порт, хранится в ServerConfig.java
. Каждый аромат имеет 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
И это работает отлично, но, ИМХО, есть ко многим дублируется кода.
Теперь мне нужно добавить файл crt для проверки HTTPS. Я не хочу, чтобы файл 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
И использовать 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) с несколькими вариантами производства?
Было бы очень полезно, если вкус может наследовать от другого. [Возможность наследовать проблему ProductFlavor] (https://code.google.com/p/android/issues/detail?id=183350) – obywatelgcc