Cómo pasar un parámetro al código Java en la configuración de ejecución / depuración de Android Studio
Mi aplicación androide hace algunas peticiones http a mi servidor. Sin embargo, a veces estoy depurando el nuevo código de api que se ejecuta en mi máquina de desarrollo. Me gustaría ser capaz de pasar algo (como una variable de entorno) por lo que en mi código , si está presente que sería capaz de utilizar que como el nombre de host para las solicitudes de api desde el emulador de Android.
Así que estoy buscando una manera de pasar algo como:
- Error: Programa "/ndk-build.cmd" no se encuentra en PATH
- La conexión a adb ha fallado y se ha producido un error grave. Debe reiniciar adb y Eclipse.Por favor, asegúrese de que adb esté correctamente ubicado
- Instalación de Android Studio, no apunta a un error de instalación de JVM válido
- Variables de entorno Linux para Linux
- Android (get) variables ambientales en Java
API_SERVER=http://10.0.2.2/myapp/
Y en mi código lo usaría de alguna manera, por ejemplo:
final static String API_SERVER_REAL = "http://example.com/"; final String apiServerOverride = System.getenv("API_SERVER"); final String API_SERVER = (null != apiServerOverride && !apiServerOverride.isEmpty() ? apiServerOverride : API_SERVER_REAL);
- .bashrc no lee ruta de entorno correctamente con espacios
- Android maven plugin no obtiene ANDROID_HOME env variable en Eclipse
- Eclipse no se inicia (Ubuntu): termina JVM. Código de salida = 2
- Argumentos / variables personalizados pasados al emulador de Android
- ¿Cómo configurar ANDROID_NDK_HOME para que Android Studio no solicite la ubicación de ndk?
- Acceso a variables de entorno desde Android Studio gradle build
- Establecer la variable de entorno ANDROID_HOME en mac
Sugiero el uso de productFlavors . Cada sabor puede contener ajustes específicos del entorno. Simplemente tengo una clase llamada 'Medio ambiente' que contiene todas las public static final String
que necesito y cada sabor del producto incluye una versión diferente de esta clase con los valores establecidos para el entorno.
Sé que este hilo es muy antiguo, pero en mi opinión ninguna de las respuestas proporcionadas realmente resuelve el problema. Los sabores son inadecuados para parametrizar su compilación con cosas como las URL de la API, e incluso peor para cosas como las claves API, etc.
En primer lugar, build.gradle
que define los sabores es parte de la fuente del proyecto, por lo tanto, no debe contener dicha información con el fin de ser comprometido con seguridad en los sistemas de control de origen.
En segundo lugar, puede surgir la necesidad de probar diferentes sabores contra diferentes puntos finales / claves API. ¿Qué pasa si sólo quieres golpear a algún servidor de depuración http que acaba de crear para solucionar un error? ¿Crearías un sabor para eso? Probablemente no … Los sabores son buenos para cosas como "sabor libre" y "sabor superior".
Este problema se resuelve fácilmente usando el indicador gradles -P
. Puede acceder a las propiedades gradle que se pasan de esta manera como variables regulares dentro de su gradle.build, y puede variar su comportamiento en consecuencia.
Si desea insertar esta bandera más en su aplicación, puede utilizar la solución de Scott que se publicó aquí, combinada con la bandera proporcionada.
El comando build probablemente se vería así:
$ gradle build -Papiroot=http://www.example.com
Y en su build.gradle
se define la tarea writeValue
esta manera:
task writeValue(type:Exec) { commandLine '/usr/local/bin/adb', 'shell', "echo 'API_SERVER=${apiroot}' > /data/data/values.properties" }
FYI el indicador -P se puede configurar fácilmente en Android Studio navegando desde el menú:
Run -> Run / Debug Configurations -> Defaults -> Gradle -> Parámetros de secuencia de comandos
Probablemente la cosa más simple es escribir los datos que desea pasar a un archivo en el dispositivo en / data / data; Su aplicación de Android puede leer el dispositivo trivialmente (tal vez lo convierten en un archivo .properties y utilice java.util.Properties
para leerlo). Para escribirlo, utilice este tipo de tarea en su archivo build.gradle (y use la ruta correcta al comando adb para su configuración):
task writeValue(type:Exec) { commandLine '/usr/local/bin/adb', 'shell', 'echo \'API_SERVER=http://10.0.2.2/myapp/\' > /data/data/values.properties' }
Hay documentación sobre las tareas de exec de Gradle en http://www.gradle.org/docs/current/dsl/org.gradle.api.tasks.Exec.html
Puede ejecutar esta tarea manualmente desde Android Studio mediante la vista de tareas de Gradle:
Debido a un error en Android Studio, no puedes pasar parámetros de vm o de script desde una configuración gradle. El problema está aquí .
Como una solución en Linux envs (probablemente Mac también), puede crear una configuración bash donde podrá agregar todos los parámetros deseados.