android - 将 google-services.json 提交到 GitHub

标签 android github travis-ci google-signin

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

  • 我需要把上面的文件提交到Github吗?
  • 其他开发人员(如果有人做出贡献)是否需要此文件?
  • 或者,他们必须自己创建吗?
  • 顺便说一句,我正在使用 Travis-CI。此文件会影响 CI 构建吗?

最佳答案

您可以创建一个新的 build variant 并存储一个模板 google-services.json 以在您的应用程序 build.gradle 中用于您在 CI 平台上的构建。

为新的 dev 构建变体使用不同的 google-services.json(参见 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-services。

您将具有以下配置:

app/
├── src/
│   ├── main/
│   └── dev/
│       └── google-services.json
├── google-services.json
└── build.gradle

您可以使用:

  • 一种新的构建类型
  • 一种新的产品 flavor (如果您已有产品 flavor )

构建类型

添加以下构建类型:

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);
        }
    }
}

产品 flavor

dev 产品风格添加到现有产品风格中:

productFlavors {

    full {
    }

    dev {
    }
}

要从常规构建中删除此 dev 产品 flavor :

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 将仅使用位于 app/src/dev/google-services.json< 的 google-services.json 构建开发版本变体

看看正在使用 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 

额外说明

请注意,此方法不限于 CI,当您需要生产 google-services.json 或不同的 AndroidManifest.xml 时,可以针对您的生产构建进行扩展(具有一些特定属性,如 fabric.io 键)

检查 this method 以防止 promise 嵌入在 AndroidManifest.xml 中的结构 key (并且不能从 gradle 导入),它使用不同的构建变体并使用参数来启用生产构建。

关于android - 将 google-services.json 提交到 GitHub,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34251441/

相关文章:

Git bash 不让我 pull

security - 公开 GH_TOKEN 以与 electron-builder 一起用于发布/更新应用程序是否存在任何安全问题?

python - 如何让 Travis-CI 在测试期间识别和打开外部文件

javascript - 使用 velocity、meteor 和 travis ci

c# - 使用 Xamarin Android 创建 PDF

android - GpsSatellite.getSnr() - 取值范围是多少?

git - 列出在 Travis 中的 pull 请求中修改的文件

github - RStudio 和 Travis CI 构建检查不匹配 (libudunits2.so)

android - 著名的旧方法 getColor (int id) 已弃用。 API 23

android - gdb 在 android 上调试 native (不是 jni)程序