¿Cómo no include un file de class con cadenas de API en git, pero aún así getlo en un server de compilation?

Actualmente estoy trabajando en mi proyecto final como estudiante de TI del año pasado, para lo cual estoy creando una aplicación para Android.

En algún lugar de mi aplicación, les permití a mis usuarios editar una image justo después de que fuera tomada desde el interior de mi aplicación. Como esta no es una funcionalidad básica en la aplicación, utilizo una biblioteca que hace el trabajo a la perfección. Para esto, uso Adobe Creative SDK.

Seguí sus directrices sobre cómo integrar las keys API requeridas y todo, y actualmente todo está funcionando como se pretendía a nivel local. En mi server de compilation automático, por otro lado, mis comstackciones fallan porque no puede get las keys de API ya que el file de class que las contiene no se agrega en el repository de git desde el que se crea el server.

¿Cómo puedo proporcionar mi server de compilation con esas keys de API sin exponerlas en git?

FYI: en mi class de aplicación, así es como se retiran las keys.

private static final String CREATIVE_SDK_CLIENT_ID = Keys.CSDK_CLIENT_ID; private static final String CREATIVE_SDK_CLIENT_SECRET = Keys.CSDK_CLIENT_SECRET; private static final String CREATIVE_SDK_REDIRECT_URI = Keys.CSDK_REDIRECT_URI; private static final String[] CREATIVE_SDK_SCOPES = Keys.CSDK_SCOPES; 

¡Gracias por adelantado!

Logré resolver este problema haciendo uso de variables de entorno.

El server de compilation buildía las aplicaciones con Jenkins, así que logré configurar variables de entorno en la configuration del proyecto Jenkins. Para get más información sobre cómo hacerlo, también donde encontré cómo hacerlo: http://blog.zuehlke.com/en/configure-your-android-project-on-jenkins/

Ahora establecemos las variables de entorno en el server de compilation, pero, por supuesto, nuestra aplicación aún debe poder comstackrse desde las máquinas de nuestros desarrolladores. Para poder hacer eso, necesitamos establecer esas variables de entorno en esas máquinas también.

Puede encontrar muchas guías sobre cómo hacerlo en una plataforma específica. Sin embargo, esta página la explica en deuda para múltiples plataforms: https://superuser.com/questions/284342/what-are-path-and-other-environment-variables-and-how-can-i-set-or-use -ellos

Una vez que haya establecido las variables de entorno en las máquinas requeridas, debe getlas en su aplicación. Para leer las variables de entorno cuando la aplicación get's build hacemos uso de gradle. En su app.gradle debe hacer lo siguiente:

 buildTypes { buildTypes.each { it.buildConfigField 'String', 'ENV_VAR_ALIAS', "$System.env.ENV_VAR_KEY" } } 

ENV_VAR_ALIAS es el alias que le damos a la variable de entorno para acceder más adelante en nuestro código, por ejemplo, una class de aplicación o una class de actividad.

ENV_VAR_KEY es el nombre de la variable de entorno que queremos get. Si configuró la variable de entorno de esta manera, por ejemplo:
Clave: MY_SECRET_KEY y valor: MY_SECRET_VALUE
ENV_VAR_KEY debería ser MY_SECRET_KEY

Una vez hecho esto, ahora podemos acceder al valor de la variable de entorno en el código usando BuildConfig de la siguiente manera:

 private final static String MY_ENV_VAR_VALUE = BuildConfig.ENV_VAR_ALIAS; 
Intereting Posts