Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/185.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 从同一代码库克隆移动应用程序_Android_Gradle_Android Gradle Plugin_Android Productflavors - Fatal编程技术网

Android 从同一代码库克隆移动应用程序

Android 从同一代码库克隆移动应用程序,android,gradle,android-gradle-plugin,android-productflavors,Android,Gradle,Android Gradle Plugin,Android Productflavors,我有一个android应用程序,我想为不同的客户定制,通常会改变颜色 我可以用口味,但是 问题是每个应用程序应该有两个阶段(因此,每个客户端有两个应用程序),一个用于QA,一个用于Prod,它们使用不同的RESTAPI URL,为每个客户端定制 对我来说最理想的方法是嵌套味道,这样我就可以为每个味道定义属性,但它不受支持。这也将允许我修改客户端_1的一些布局,并使用main中的其余布局,我也需要这样做。例如: productFlavors { client_1 { de

我有一个android应用程序,我想为不同的客户定制,通常会改变颜色

我可以用口味,但是 问题是每个应用程序应该有两个阶段(因此,每个客户端有两个应用程序),一个用于QA,一个用于Prod,它们使用不同的RESTAPI URL,为每个客户端定制

对我来说最理想的方法是嵌套味道,这样我就可以为每个味道定义属性,但它不受支持。这也将允许我修改客户端_1的一些布局,并使用main中的其余布局,我也需要这样做。例如:

 productFlavors {
    client_1 {
        dev {
            buildConfigField "String", "API_URL", "https://...."
        }
        prod {
            buildConfigField "String", "API_URL", "https://...."
        }
    }
    client_2 {
        dev { //...
        }
        prod {
            //...
        }
    }
}
你知道我怎样才能做到吗


另一种选择是使用一个公共库应用程序,并为不同的客户机使用不同的应用程序及其配置,但这将使其更加复杂。

在我的项目中,我使用了具有产品风格的构建类型。我会在这里解释。 我的项目看起来像这样

并将这些行添加到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
        }

    }

在我的项目中,我使用了具有产品风格的构建类型。我会在这里解释。 我的项目看起来像这样

并将这些行添加到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
        }

    }

当应用程序基于多个标准时,您可以定义口味维度,而不是创建许多口味

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

例如:

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)个变体(如果您有两种标准构建类型:
debug
release
)。 将创建以下生成变体:

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

当应用程序基于多个标准时,您可以定义口味维度,而不是创建许多口味

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

例如:

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)个变体(如果您有两种标准构建类型:
debug
release
)。 将创建以下生成变体:

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

当启动屏幕加载时,尝试从api获取url。并将其用于app@gdogaru您可以将ProductFlavors与生成类型一起使用。@divyeshport我不仅需要api url,还需要定义更多的属性,而且通用api是不可行的solution@Krish对于生成类型,我可以为所有具有该生成类型的对象定义相同的属性,对于flavor buildType,我需要单独的属性combination@gdogaru你们检查我的答案了吗?当启动屏幕加载时,尝试从api获取url。并将其用于app@gdogaru您可以将ProductFlavors与生成类型一起使用。@divyeshport我不仅需要api url,还需要定义更多的属性,而且通用api是不可行的solution@Krish对于生成类型,我可以为所有具有该生成类型的对象定义相同的属性,对于flavor buildType,我需要单独的属性combination@gdogaru你检查我的答案了吗?这会有用的,我看到的缺点是“错误”。为了创建发布版本,您需要有一个标志或修改版本文件,我不这么认为。您还可以添加一个发布buildtype,它将正常工作。如果这对你有帮助,请接受我的回答,这会起作用,我看到的缺点是“错误”。为了创建发布版本,您需要有一个标志或修改版本文件,我不这么认为。您还可以添加一个发布buildtype,它将正常工作。如果对你有帮助,请接受我的回答