2011-09-29 16 views
7

Ho sperimentato poco con il sistema operativo Android e ho provato a chiamare System.getenv() per ottenere variabili ambientali. Funziona ad es. per $PATH, ma non ero in grado di definire la propria variabile, che può essere accessibile in questo modo ... È possibile?Variabili Android (get) variabili ambientali in Java

ho cercato di impostare e export variabili da adb shell come utente shell ma non funziona - non importa se ho iniziato l'applicazione dal menu del telefono o quando ho usato il comando adb shell am.

Può l'aiuto Runtime.getRuntime().exec() lì? Aiuterà se avrò l'accesso al telefono root?

Grazie

+0

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

risposta

7

Le variabili d'ambiente sono visibili solo in un processo che imposta la variabile e processi figli lanciato dopo aver impostato la variabile. Quando imposti la variabile d'ambiente dalla shell adb non sei nel processo genitore del processo che avvia l'applicazione Android, quindi l'applicazione non può vedere la variabile impostata.

In Java (e Android) non c'è System.setenv(), ma se è necessario impostare una variabile di ambiente per il proprio programma da leggere ci sono sempre modi migliori. Uno di questi modi è invece setting and getting Properties.

Impostare le variabili di ambiente in Java non è realmente possibile (beh, lo è, ma non si vuole farlo). È possibile utilizzare ProcessBuilder se si desidera impostare una variabile che deve essere letta da un altro processo, ma se il processo viene avviato da un programma Java/Android.

Pensa a quale problema stai cercando di risolvere e se può essere fatto senza utilizzare le variabili di ambiente. Non sono adatti a Java e sono ancora peggio su Android.

+1

Concordato che le variabili di ambiente dovrebbero essere evitate, ma ci sono legittimi motivi per impostare le variabili di ambiente (ad esempio, se ci si interfaccia con librerie native che dipendono da esse). Dici che è possibile in Java ma non fornire un esempio, potresti aggiornare la tua risposta? –

4

È possibile impostare le variabili di ambiente nelle applicazioni Android. Tuttavia, come dice @richq, tali variabili saranno visibili solo nei processi avviati dall'applicazione che ha impostato la variabile di ambiente (e le librerie JNI utilizzate dall'applicazione). Vedi questo post per quanto riguarda l'impostazione delle variabili di ambiente dall'applicazione Android: https://stackoverflow.com/a/22315463/927592