Android 从同一代码库克隆移动应用程序
我有一个android应用程序,我想为不同的客户定制,通常会改变颜色 我可以用口味,但是 问题是每个应用程序应该有两个阶段(因此,每个客户端有两个应用程序),一个用于QA,一个用于Prod,它们使用不同的RESTAPI URL,为每个客户端定制 对我来说最理想的方法是嵌套味道,这样我就可以为每个味道定义属性,但它不受支持。这也将允许我修改客户端_1的一些布局,并使用main中的其余布局,我也需要这样做。例如: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
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,它将正常工作。如果对你有帮助,请接受我的回答