Отправка google-services.json на GitHub

Я создаю общедоступный проект Android и использую службу входа в Google. Я делаю это в соответствии с этим руководством. Как говорится, у меня есть файл google-services.json.

  • Нужно ли мне зафиксировать указанный выше файл на Github?
  • Нужен ли этот файл другим разработчикам (если кто-то вносит свой вклад)?
  • Или они должны создать там свой собственный?
  • Кстати, я использую Travis-CI. Повлияет ли этот файл на сборку CI?

person Jayanga Kaushalya    schedule 13.12.2015    source источник
comment
Для меня это действительно важный файл.   -  person набиячлэвэли    schedule 13.12.2015
comment
Да, но нужно ли мне передавать этот файл на Github? Поскольку он содержит мой идентификатор приложения Google и прочее, не означает ли это, что другие разработчики также должны создавать его для себя?   -  person Jayanga Kaushalya    schedule 16.12.2015
comment
Если он содержит ваши конфиденциальные данные и необходим Travis для его создания, вы можете файл зашифровать его. Если он не содержит конфиденциальных данных и необходим, добавьте его. Во всех остальных случаях игнорируйте его. (Я бы также посмотрел, добавлены ли репозитории Android, и сделал бы то же самое)   -  person набиячлэвэли    schedule 16.12.2015
comment
Google не рекомендует включать Google -services.json в системе управления версиями только для проектов с открытым исходным кодом: для проектов с открытым исходным кодом мы обычно не рекомендуем включать файл конфигурации или объект приложения Firebase в систему управления версиями, поскольку в большинстве случаев ваши пользователи должны создавать свои собственные проекты Firebase. и указать своим приложениям собственные ресурсы Firebase (через собственный файл конфигурации Firebase или объект).   -  person Jacek Tymicki    schedule 30.07.2021


Ответы (3)


Вы можете создать новый вариант сборки и сохранить шаблон 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

Вы можете использовать travis encrypt-file google-services.json

Документация

Вы можете сделать это:

  • установил клиент командной строки Travis CI, запустив $ gem install travis.

  • вошли в Travis CI, используя $ travis login или $ travis login --pro

    $ 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

Вы можете скопировать его в свой файл .travis.yml, как я сделал здесь

Не забудьте поместить файл .enc в репозиторий GitHub.

Если у вас есть несколько файлов, вы можете заархивировать их, а затем разархивировать расшифрованный файл на Travis ci.

Например, вы можете сделать так:

$ 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

Я это сделал.

В моем случае у меня было два файла для сборки моего приложения. Итак, я использовал это из-за того, что Трэвис не поддерживает несколько зашифрованных файлов. Поэтому вы заархивируете потом на один файл и зашифруете этот файл.

Вы можете посмотреть мой скрипт travis здесь

person Amadeu Cavalcante Filho    schedule 25.03.2018

Документация Firebase, по-видимому, подразумевает, что нет проблем с фиксацией файла на GitHub.

Вот выдержка из документации.

Файл конфигурации Firebase содержит уникальные, но не секретные идентификаторы вашего проекта. Чтобы узнать больше об этом файле конфигурации, посетите Понимание Проекты Firebase.

person Dennis Kamau    schedule 31.01.2021