您可以创建一个新的build variant 并存储一个模板google-services.json 用于在您的应用程序build.gradle 中构建您的CI 平台。
为新的dev 构建变体使用不同的google-services.json(请参阅this post)。将以下google-services.json 模板添加到app/src/dev folder :
{
"project_info": {
"project_number": "",
"project_id": ""
},
"client": [
{
"client_info": {
"mobilesdk_app_id": "1:123456789012:android:1234567890123456",
"android_client_info": {
"package_name": "com.your.package"
}
},
"oauth_client": [
{
"client_id": "",
"client_type": 3
},
{
"client_id": "",
"client_type": 1,
"android_info": {
"package_name": "com.your.package",
"certificate_hash": ""
}
}
],
"api_key": [
{
"current_key": ""
}
],
"services": {
"analytics_service": {
"status": 2,
"analytics_property": {
"tracking_id": ""
}
},
"appinvite_service": {
"status": 1,
"other_platform_oauth_client": []
},
"ads_service": {
"status": 1
}
}
}
],
"configuration_version": "1"
}
请注意,如果您还使用 Google Analytics 或 GCM 服务,我已扩展此 google-services。
您将拥有以下配置:
app/
├── src/
│ ├── main/
│ └── dev/
│ └── google-services.json
├── google-services.json
└── build.gradle
你可以使用任何一个:
- 一种新的构建类型
- 一种新的产品风味(如果您已经有现有的)
构建类型
添加以下构建类型:
buildTypes {
dev {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
我们不需要在常规构建中构建这个“dev”构建变体,所以如果没有指定参数,你可以排除这个变体。将以下内容添加到您的应用中 build.gradle :
def build_param = "${build}";
if (build_param != "dev") {
//exclude production build
android.variantFilter { variant ->
if (variant.buildType.name.equals('dev')) {
variant.setIgnore(true);
}
}
} else {
//exclude all except production build
android.variantFilter { variant ->
if (!variant.buildType.name.equals('dev')) {
variant.setIgnore(true);
}
}
}
产品风味
将dev 产品风格添加到现有产品风格中:
productFlavors {
full {
}
dev {
}
}
要从常规构建中删除此 dev 产品风味:
def build_param = "${build}";
if (build_param != "dev") {
//exclude dev
android.variantFilter { variant ->
if (variant.getFlavors().get(0).name.equals('dev')) {
variant.setIgnore(true);
}
}
} else {
//exclude all but dev
android.variantFilter { variant ->
if (!variant.getFlavors().get(0).name.equals('dev')) {
variant.setIgnore(true);
}
}
}
最后,将您的应用模块 google-services.json 添加到 .gitignore:
app/google-services.json
我们之前已确保仅在指定参数build=dev 时才会使用此dev 变体
编辑.travis.yml 以修改构建配置:
script:
- ./gradlew clean build -Pbuild=dev
-Pbuild=dev 只会使用位于app/src/dev/google-services.json 的google-services.json 构建开发版本变体
看看使用google-services Google project的this sample project
在Travis log 中,您可以看到正在解析的JSON 文件是dev 构建变体的文件:
Parsing json file: /home/travis/build/bertrandmartel/android-googlesignin/app/src/dev/google-services.json
补充说明
请注意,此方法不限于 CI,当您需要生产 google-services.json 或不同的 AndroidManifest.xml(具有某些特定属性,如 fabric.io 键)时,可以将其扩展到您的生产构建
检查this method 以防止提交嵌入在 AndroidManifest.xml 中的结构密钥(并且不能从 gradle 导入)使用不同的构建变体并使用参数来启用生产构建。