Ответ 1
Вы можете создать новый вариант сборки и сохранить шаблон google-services.json
, который будет использоваться для вашей сборки на платформе CI, в вашем приложении build.gradle
.
Используйте другой google-services.json
для нового варианта сборки dev
(см. этот пост). Добавьте следующий шаблон 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, если вы также используете службу Google Analytics или GCM.
У вас будет следующая конфигурация:
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
Ранее мы гарантировали, что этот вариант dev
будет использоваться только тогда, когда указан параметр build=dev
Отредактируйте .travis.yml
, чтобы изменить конфигурацию сборки:
script:
- ./gradlew clean build -Pbuild=dev
-Pbuild=dev
будет собирать только вариант сборки dev, используя google-services.json
, расположенный в app/src/dev/google-services.json
Посмотрите этот пример проекта, который использует Google-сервис Google, проект
В журнале Travis вы можете видеть, что анализируемый файл 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)
Отметьте этот метод, чтобы предотвратить фиксацию ключей фабрики, встроенных в AndroidManifest.xml (и их нельзя импортировать из gradle), использующих другой вариант сборки и использующих параметр для включения производственной сборки.