我正在创建一个公共(public) android 项目,并且我正在使用 Google 登录服务。我是按照this tutorial做的.正如它所说,我有 google-services.json 文件。
- 我需要把上面的文件提交到Github吗?
- 其他开发人员(如果有人做出贡献)是否需要此文件?
- 或者,他们必须自己创建吗?
- 顺便说一句,我正在使用 Travis-CI。此文件会影响 CI 构建吗?
最佳答案
您可以创建一个新的 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
您可以使用:
- 一种新的构建类型
- 一种新的产品 flavor (如果您已有产品 flavor )
构建类型
添加以下构建类型:
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);
}
}
}
产品 flavor
将 dev
产品风格添加到现有产品风格中:
productFlavors {
full {
}
dev {
}
}
要从常规构建中删除此 dev
产品 flavor :
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
我们之前已确保此dev
变体仅在指定参数build=dev
时使用
编辑 .travis.yml
以修改构建配置:
script:
- ./gradlew clean build -Pbuild=dev
-Pbuild=dev
将仅使用位于 app/src/dev/google-services.json< 的
google-services.json
构建开发版本变体
看看正在使用 this sample project 的 google-services Google 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 以防止 promise 嵌入在 AndroidManifest.xml 中的结构 key (并且不能从 gradle 导入),它使用不同的构建变体并使用参数来启用生产构建。
关于android - 将 google-services.json 提交到 GitHub,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34251441/