Подтвердить что ты не робот

Commiting google-services.json для GitHub

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

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

Ответ 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), использующих другой вариант сборки и использующих параметр для включения производственной сборки.

Ответ 2

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

Вы можете взглянуть на мой сценарий travis здесь