我正在创建一个公共android项目,我正在使用Google登录服务。我按照this tutorial这样做。正如它所说,我有google-services.json文件。
您可以在应用程序build variant中创建一个新的google-services.json
并存储模板build.gradle
,用于在CI平台上构建。
使用不同的google-services.json
作为新的dev
构建变体(请参阅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服务。
您将具有以下配置:
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);
}
}
}
最后,将您的app模块google-services.json
添加到.gitignore
:
app/google-services.json
我们之前已确保仅在指定参数dev
时才使用此build=dev
变体
编辑.travis.yml
以修改构建配置:
script:
- ./gradlew clean build -Pbuild=dev
-Pbuild=dev
将只使用位于google-services.json
的app/src/dev/google-services.json
构建dev build变体
看看使用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以防止嵌入在AndroidManifest.xml中的结构密钥(并且无法从gradle导入)承诺使用不同的构建变体并使用参数来启用生成构建。
你可以使用travis encrypt-file google-services.json
你可以这样做:
$ gem install travis
安装Travis CI命令行客户端。$ travis login
或$ travis login --pro
登录Travis CI
$ travis encrypt-file super_secret.txt
encrypting super_secret.txt for rkh/travis-encrypt-file-example
storing result as super_secret.txt.enc
storing secure env variables for decryption
然后它将在控制台上打印:
openssl aes-256-cbc -K $encrypted_0a6446eb3ae3_key -iv $encrypted_0a6446eb3ae3_iv -in super_secret.txt.enc -out super_secret.txt -d
您可以将它复制到qazxsw poi文件中,就像我执行qazxsw poi一样
不要忘记将您的.travis.yml
文件放在GitHub存储库中。
如果您有多个文件,可以压缩它们然后解压缩Travis ci上的解密文件。
例如,你可以这样做:
here
我做的。
在我的情况下,我有两个文件用于我的应用程序的构建。因此,我使用.enc
,因为travis不支持多个加密文件。因此,您在一个文件上压缩并加密此文件。
你可以看看我的travis脚本$ tar cvf secrets.tar foo bar
$ travis encrypt-file secrets.tar
$ vi .travis.yml
$ git add secrets.tar.enc .travis.yml
$ git commit -m 'use secret archive'
$ git push