Вы можете создать новый вариант сборки и сохранить шаблон google-services.json
для использования. для вашей сборки на вашей платформе CI в вашем приложении build.gradle
а>.
Используйте другой google-services.json
для нового варианта сборки dev
(см. этот пост). Добавьте следующий шаблон google-services.json
в app/src/dev
папку< /а> :
{
"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
будет собирать только вариант сборки для разработчиков, используя google-services.json
, расположенный в app/src/dev/google-services.json
.
Взгляните на этот пример проекта, в котором используется проект google-services 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), который использует другой вариант сборки и использует параметр для включения производственной сборки.
person
Bertrand Martel
schedule
18.03.2017