일부 서버 인프라에서 작동하는 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 자바 파일이 있습니다.
이제 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 (예 : rename)의 모든 리팩토링은 build.gradle 파일을 변경해야합니다.
서버 구성 (ServerConfig.java 및 ca.crt)을 여러 프로덕션 환경과 일치시키는 데 더 나은 솔루션이 있습니까?
맛이 다른 것으로부터 상속받을 수 있다면 매우 도움이 될 것입니다. [productFlavor 문제를 상속하는 가능성] (https://code.google.com/p/android/issues/detail?id=183350) – obywatelgcc