在构建过程中区分 Android app.gradle 文件中的 productFlavors
Differentiate between productFlavors in Android app.gradle file during build process
android {
final String analyticsJSON = "lite"
compileSdkVersion 23
buildToolsVersion "23.0.2"
defaultConfig {
applicationId "com.ralok.apps"
minSdkVersion 10
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
productFlavors {
findlostandroidphone {
versionCode 1
versionName 'v1.0'
applicationId 'com.ralok.apps.findlostandroidphone'
}
findlostandroidphonepro {
versionCode 1
versionName 'v1.0'
applicationId 'com.ralok.apps.findlostandroidphonepro'
}
if (analyticsJSON.equals("lite")) {
println "--> FLPLite JSON copied!"
copy {
from 'src/findlostandroidphone/'
include 'google-services.json'
into '.'
}
} else {
println "--> FLPPro JSON copied!"
copy {
from 'src/findlostandroidphonepro/'
include 'google-services.json'
into '.'
}
}
}
signingConfigs {
lite_release {
keyAlias 'ASDFGHJKL'
keyPassword 'ASDFGHJKL'
storeFile file('ASDFGHJKL.jks')
storePassword 'ASDFGHJKL'
}
pro_release {
keyAlias 'POIUYTREWQ'
keyPassword 'POIUYTREWQ'
storeFile file('POIUYTREWQ.jks')
storePassword 'POIUYTREWQ'
}
}
buildTypes {
debug {
minifyEnabled false
debuggable true
}
release {
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
每次我必须手动更改最终字符串 analyticsJSON = "lite/pro" 以便 if 循环复制把右边的json文件复制到根目录下。无论如何我可以自动执行此操作并始终在 analyticsJSON 字符串中具有正确的 productFlavour 而不是我每次在 productFlavors 之间切换时手动更改值。我的 groovy 很糟糕,我已经尝试过但未能实现。
你不需要区分构建系统会为你做。只需将文件放在每个构建风格的正确路径中。例如。
findlostandroidphone
将您的 google-services.json
放在以下位置。
src/findlostandroidphone/google-services.json
构建文件将自动复制到该产品风味的最终位置。 pro
版本相同。
您现在拥有的将在配置阶段执行。这可能适用于...对于单一构建类型。如果您想同时构建这两种类型,那么您应该移动文件并完全删除 final String analyticsJSON = "lite"
。然后在执行阶段 gradle 将复制文件并使用 productFlavor
.
的正确文件执行构建
最终在版本 com.google.gms:google-services:2.0.0-alpha3
中实现了处理不同风格的解决方案
https://developers.google.com/android/guides/google-services-plugin#adding_the_json_file
https://github.com/googlesamples/google-services/issues/54
另一种替代解决方案已启用
How do i keep different configurations for my android app with GCM 3.0
android {
final String analyticsJSON = "lite"
compileSdkVersion 23
buildToolsVersion "23.0.2"
defaultConfig {
applicationId "com.ralok.apps"
minSdkVersion 10
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
productFlavors {
findlostandroidphone {
versionCode 1
versionName 'v1.0'
applicationId 'com.ralok.apps.findlostandroidphone'
}
findlostandroidphonepro {
versionCode 1
versionName 'v1.0'
applicationId 'com.ralok.apps.findlostandroidphonepro'
}
if (analyticsJSON.equals("lite")) {
println "--> FLPLite JSON copied!"
copy {
from 'src/findlostandroidphone/'
include 'google-services.json'
into '.'
}
} else {
println "--> FLPPro JSON copied!"
copy {
from 'src/findlostandroidphonepro/'
include 'google-services.json'
into '.'
}
}
}
signingConfigs {
lite_release {
keyAlias 'ASDFGHJKL'
keyPassword 'ASDFGHJKL'
storeFile file('ASDFGHJKL.jks')
storePassword 'ASDFGHJKL'
}
pro_release {
keyAlias 'POIUYTREWQ'
keyPassword 'POIUYTREWQ'
storeFile file('POIUYTREWQ.jks')
storePassword 'POIUYTREWQ'
}
}
buildTypes {
debug {
minifyEnabled false
debuggable true
}
release {
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
每次我必须手动更改最终字符串 analyticsJSON = "lite/pro" 以便 if 循环复制把右边的json文件复制到根目录下。无论如何我可以自动执行此操作并始终在 analyticsJSON 字符串中具有正确的 productFlavour 而不是我每次在 productFlavors 之间切换时手动更改值。我的 groovy 很糟糕,我已经尝试过但未能实现。
你不需要区分构建系统会为你做。只需将文件放在每个构建风格的正确路径中。例如。
findlostandroidphone
将您的 google-services.json
放在以下位置。
src/findlostandroidphone/google-services.json
构建文件将自动复制到该产品风味的最终位置。 pro
版本相同。
您现在拥有的将在配置阶段执行。这可能适用于...对于单一构建类型。如果您想同时构建这两种类型,那么您应该移动文件并完全删除 final String analyticsJSON = "lite"
。然后在执行阶段 gradle 将复制文件并使用 productFlavor
.
最终在版本 com.google.gms:google-services:2.0.0-alpha3
中实现了处理不同风格的解决方案https://developers.google.com/android/guides/google-services-plugin#adding_the_json_file https://github.com/googlesamples/google-services/issues/54
另一种替代解决方案已启用
How do i keep different configurations for my android app with GCM 3.0