Android por variables de desarrollador

Mi equipo trabaja con Git y ahora estamos creando una aplicación para Android. Esta aplicación consume nuestro service web, que cada desarrollador construye en su propia computadora mientras se desarrolla.

Dado que no podemos usar localhost dentro de la aplicación (ya que apunta al dispositivo en sí), debemos especificar la dirección de networking (por ejemplo, 192.168.1.123 ), ya está codificada. El problema es que, principalmente, nuestras direcciones de networking no son las mismas y luego cada desarrollador debe editar manualmente la dirección para poder codificar.

Estoy tratando de descubrir forms más interesantes de hacer este process. Mi primera suposition fue que podría hacer algo como config/application.yml Rails o como config/application.yml Spring Boot. Este file estaría en .gitignore y, al configurar su entorno de desarrollo, cada desarrollador establecería allí su dirección de networking en una variable. Este enfoque es agradable principalmente porque podemos configurar este file en serveres de CI, luego la implementación puede automatizarse en entornos de producción (por ejemplo, apuntando a my-aplication.com lugar de a la dirección de networking del desarrollador).

Otra forma en la que he estado pensando es utilizar algo como my-application.dev y dejar que el equipo host (cuando se usa el emulador) resuelva en su file de hosts, regresando. Hay dos problemas principales en este enfoque: a) nos gustaría mantener la configuration dentro de la carpeta del proyecto. b) Al desplegar en producción, deberíamos editar esto manualmente.

Entonces, ¿hay alguna forma de hacer esto? Teniendo en count que apreciamos tener esta configuration dentro de la carpeta del proyecto y no depende de IDE.

¡Gracias por adelantado!

Paso # 1: defina una propiedad en gradle.properties , en el directory raíz del proyecto, que contenga la dirección IP en cuestión, como por ejemplo:

 DEV_SERVER_URL=https://192.168.1.123 

Paso # 2: en su file app/build.gradle , exponer esa propiedad a través de buildConfigField , o posiblemente a través de resValue , para que esté disponible para el código de Java a través de BuildConfig o un recurso de cadena. Para get crédito adicional, utilice la propiedad solo en el tipo de compilation de debug , utilizando el valor de producción en la release (presumiblemente apuntando al server web de producción). Por ejemplo:

  debug { buildConfigField "String", "SERVER_URL", '"'+DEV_SERVER_URL+'"' } release { buildConfigField "String", "SERVER_URL", '"https://prod.this-is-so-fake.com"' } 

Paso # 3: Modifique el código de Java para hacer reference al campo BuildConfig o al recurso de cadena que configuró en el Paso # 2.

Definir Properties

 def Properties props = new Properties() props.load(new FileInputStream(rootProject.file('app/custom.properties'))) 

Luego:

 buildConfigField "String", "CUSTOM_FIELD", '"'+props['customFieldName']+'"' 

Tus custom.properties deberían contener algo como:

 customFieldName=customString