Comprometiendo google-services.json a GitHub

Estoy creando un proyecto público de Android y estoy usando el service de inicio de session de Google. Lo estoy haciendo de acuerdo con este tutorial . Como dice, tengo el file google-services.json. ¿Debo enviar el file anterior a Github? ¿Otros desarrolladores (si alguien contribuye) necesitan este file? ¿O tienen que crear allí propio? Por cierto, estoy usando Travis-CI. ¿Afectará este file a CI build?

Puede crear una nueva variante de compilation y almacenar una plantilla google-services.json para usarla en su compilation en su plataforma de CI en su aplicación build.gradle .

Use un google-services.json diferente para la nueva variante de compilation dev (vea esta publicación ). Agregue la siguiente plantilla google-services.json a la carpeta 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" } 

Tenga en count que he extendido estos services de google en caso de que también utilice Google Analytics o el service GCM.

Tendría la siguiente configuration:

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

Puedes usar:

  • un nuevo tipo de construcción
  • un nuevo sabor de producto (si ya tiene alguno)

Tipo de compilation

Agregue el siguiente tipo de compilation:

 buildTypes { dev { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } 

No es necesario crear esta variante de compilation "dev" en compilation normal, por lo que puede excluir esta variante si no se especifica un parámetro. Agregue lo siguiente a su aplicación 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); } } } 

Sabor del producto

Agregue el sabor del producto dev a los existentes:

 productFlavors { full { } dev { } } 

Para eliminar este sabor del producto dev de la compilation normal:

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

Finalmente, agregue el module de su aplicación google-services.json a .gitignore :

 app/google-services.json 

Previamente hemos asegurado que esta variante de desarrollo solo se usará cuando se especifique el parámetro build=dev

Edite .travis.yml para modificar la configuration de compilation:

 script: - ./gradlew clean build -Pbuild=dev 

-Pbuild=dev solo comstackrá la variante de desarrollo dev utilizando google-services.json ubicado en app/src/dev/google-services.json

Eche un vistazo a este proyecto de ejemplo que está usando el proyecto Google de Google-Services.

En el logging de Travis , puede ver que el file JSON que se analiza es el de la variante de compilation dev :

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

Nota extra

Tenga en count que este método no está limitado a CI y puede ampliarse para su compilation de producción cuando necesite una producción google-services.json o un AndroidManifest.xml diferente (con algunas properties específicas, como la key fabric.io )

Verifique este método para evitar el compromiso de las keys de estructura incrustadas en AndroidManifest.xml (y no se puede importar desde gradle) que esté utilizando una variante de compilation diferente y que use un parámetro para habilitar la compilation de producción.