将google-services.json提交给GitHub

问题描述 投票:14回答:2

我正在创建一个公共android项目,我正在使用Google登录服务。我按照this tutorial这样做。正如它所说,我有google-services.json文件。

  • 我需要将上述文件提交给Github吗?
  • 其他开发者(如果有人贡献)需要这个文件吗?
  • 或者,他们是否必须创建自己的?
  • 顺便说一句,我正在使用Travis-CI。此文件是否会影响CI构建?
android github travis-ci google-signin
2个回答
14
投票

您可以在应用程序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.jsonapp/src/dev/google-services.json构建dev build变体

看看使用this sample projectgoogle-services Google project

Travis log中,您可以看到正在解析的JSON文件是dev构建变体的文件:

Parsing json file: /home/travis/build/bertrandmartel/android-googlesignin/app/src/dev/google-services.json 

Extra Note

请注意,此方法不限于CI,当您需要生产google-services.json或不同的AndroidManifest.xml(具有某些特定属性,如fabric.io密钥)时,可以扩展您的生产版本

检查this method以防止嵌入在AndroidManifest.xml中的结构密钥(并且无法从gradle导入)承诺使用不同的构建变体并使用参数来启用生成构建。


3
投票

你可以使用travis encrypt-file google-services.json

Documentation

你可以这样做:

  • 通过运行$ 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

© www.soinside.com 2019 - 2024. All rights reserved.