2011-09-29 15 views
7

He experimentado poco con el sistema operativo Android e intenté llamar al System.getenv() para obtener variables de entorno. Funciona, p. para $PATH, pero no pude definir la propia variable, que puede ser accesible de esta manera ... ¿Es posible?Android set (get) variables de entorno en Java

me han tratado de establecer y export las variables de adb shell como usuario shell pero no funciona - no importa si empezaba la aplicación desde el menú del teléfono o cuando utilicé el comando adb shell am.

¿Puede el Runtime.getRuntime().exec() ayudar allí? ¿Ayuda si tengo root acceso al teléfono?

Gracias

+0

[os.getenv()] (http://developer.android.com/reference/android/system/Os.html#getenv (java. lang.String)), y [Os.setenv()] (http://developer.android.com/reference/android/system/Os.html#setenv) – Paschalis

Respuesta

7

Las variables de entorno son accesibles solamente en un proceso que establece la variable, y los procesos secundarios en marcha después de ajustar la variable. Cuando configura la variable de entorno desde el shell adb, no está en el proceso principal del proceso que inicia la aplicación Android, por lo que la aplicación no puede ver la variable que estableció.

En Java (y Android) no hay System.setenv(), pero si necesita establecer una variable de entorno para que su propio programa lo lea siempre hay mejores formas. Una de ellas es setting and getting Properties.

Establecer variables de entorno en Java no es realmente posible (bueno, lo es, pero no desea hacerlo). Puede usar ProcessBuilder si desea establecer una variable que otro proceso debería leer, pero eso es si el proceso se inicia desde un programa Java/Android.

Piensa qué problema estás tratando de resolver, y si se puede hacer sin usar variables de entorno. No son una buena opción en Java, y son aún peores en Android.

+1

De acuerdo en que las variables de entorno deben evitarse, pero existen razones para establecer variables de entorno (por ejemplo, si está interactuando con bibliotecas nativas que dependen de ellas). Usted dice que es posible en Java pero no proporciona un ejemplo, ¿podría actualizar su respuesta? –

4

Es posible para establecer las variables de entorno en las aplicaciones de Android. Sin embargo, como dijo @richq, esas variables solo serán visibles en los procesos iniciados desde la aplicación que ha establecido la variable de entorno (y las bibliotecas JNI utilizadas por la aplicación). Ver este post para considerar variables de entorno de la aplicación Android: https://stackoverflow.com/a/22315463/927592