首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将服务器配置与多种生产风格相匹配

将服务器配置与多种生产风格相匹配
EN

Stack Overflow用户
提问于 2017-02-15 22:19:08
回答 2查看 85关注 0票数 0

我开发的android应用程序与一些服务器基础设施一起工作。现在有3个服务器基础架构,分别称为serv1、serv2、serv3 (在本例中)。我还有8种产品口味(flav1,flav2,...flav8),而且这个数字可能会增加。

域和端口等服务器配置存储在ServerConfig.java中。每种版本都有相应的服务器基础设施配置的ServerConfig java文件:

代码语言:javascript
复制
├ 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

这很好用,但是,我的天,有很多重复的代码。

现在我必须添加用于HTTPS验证的crt文件。我不想让apk文件包含所有3个crt文件。因此,我考虑为每个服务器配置创建一个目录:

代码语言:javascript
复制
├ 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将配置和crt复制到源主位置。

代码语言:javascript
复制
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)?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-02-16 22:50:50

@Krish的回答非常有帮助,但在我的案例中,使用flavorDimensions导致创建了48个构建变体。为了减少构建变体的列表,我结合了我的建议(关于这个主题),Krish answer和variantFilter特性。

代码语言:javascript
复制
android {
    productFlavors.whenObjectAdded { flavor ->
        flavor.ext.set('serverType', 'serv1') //set serv1 as default value //serv1/serv2/serv3 
    }

    flavorDimensions "flav", "conf"

    productFlavors {
    //===== SERVER CONFIG FLAVORS =====
        serv1 {
            dimension "conf"
        }
        serv2 {
            dimension "conf"
        }
        serv3 {
            dimension "conf"
        }
    //===== CLIENT FLAVORS =====
        flav1 {
            serverType = 'serv1' //have to be one of server config flavours name
            dimension "flav"
        }
        flav1 {
            serverType = 'serv2'
            dimension "flav"
        }
        ...
        flav8 {
            serverType = 'serv3'
            dimension "flav"
        }
    }

    variantFilter { variant ->
        def firstFlav = variant.getFlavors().get(0)
        def secondFlav = variant.getFlavors().get(1)
        if (!firstFlav.serverType.equals(secondFlav.name)) {
            variant.setIgnore(true); //hide variants where serverType mismatch server config flavor
        }
    }
}
票数 0
EN

Stack Overflow用户

发布于 2017-02-15 22:58:46

我的解决方案是使用像这样的文件夹结构,对证书文件进行一点更改,

并在gradle中与flavorDimensions一起使用。

并像这样在gradle文件中添加。

代码语言:javascript
复制
flavorDimensions "flav", "conf"

    productFlavors{
        flav1{
            applicationId "com.flav1"
            dimension "flav"
        }

        flav2{
            applicationId "com.flav2"
            dimension "flav"
        }

        serv1{
            dimension "conf"
        }

        serv2{
            dimension "conf"
        }
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42251885

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档