来自相同代码库的移动应用程序克隆

时间:2017-04-26 10:07:30

标签: android gradle android-gradle android-productflavors

我有一个Android应用程序,我想为不同的客户定制,通常更改颜色。

我可以使用口味,但是 问题是每个应用程序应该有2个阶段(因此,每个客户端有2个应用程序),1个用于QA,1个用于Prod,他们使用不同的rest-api URL,为每个客户定制。

对我来说最理想的是一种嵌套风格的方法,以便我可以为每种风格定义属性,但不支持它。这也允许我修改client_1的一些布局,并使用main中的其余布局,我也需要这样做。例如:

 productFlavors {
    client_1 {
        dev {
            buildConfigField "String", "API_URL", "https://...."
        }
        prod {
            buildConfigField "String", "API_URL", "https://...."
        }
    }
    client_2 {
        dev { //...
        }
        prod {
            //...
        }
    }
}

知道如何实现这一目标吗?

另一种选择是拥有一个通用的图书馆应用程序,并为不同的客户端配置不同的应用程序,但这会使它更复杂。

2 个答案:

答案 0 :(得分:2)

在我使用的项目中,使用产品风格构建类型。我会在这里解释一下。 我的项目看起来像enter image description here

并在gradle文件中添加以下行

buildTypes {
        prod {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }

        dev {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }


    productFlavors {

        client_1 {
            applicationId "com.example.client_1"
            versionCode 1
        }

        client_2 {
            applicationId "com.example.client_2"
            versionCode 1
        }

    }

答案 1 :(得分:2)

当应用程序基于多个条件时,您可以定义风味维度,而不是创建大量风味。

风味维度定义了将用于生成变体的笛卡尔积。

示例:

flavorDimensions("dimA", "dimB")

productFlavors {

    row1 {
        ...
        dimension = "dimA"
    }
    row2 {
        ...
        dimension = "dimA"
    }
    row3 {
         ...
        dimension = "dimA"
    }

    col1 {
        ...
        dimension = "dimB"
    }
    col2 {
        ...
        dimension = "dimB"
    }
    col3 {
         ...
        dimension = "dimB"
    }
}

此配置将生成18个(3 * 3 * 2)变体(如果您有2个标准构建类型:debugrelease)。 将创建以下构建变体:

row1-col1-debug 
row1-col2-debug 
row1-col3-debug 
row1-col1-release
row1-col2-release
row1-col3-release

row2-col1-debug 
row2-col2-debug 
row2-col3-debug 
row2-col1-release
row2-col2-release
row2-col3-release

row3-col1-debug 
row3-col2-debug 
row3-col3-debug 
row3-col1-release
row3-col2-release
row3-col3-release