2011-09-29 265 views
7

我對Android操作系統進行了一些嘗試,我試圖調用System.getenv()來獲取環境變量。它適用於爲$PATH,但我無法定義自己的變量,這可以通過這種方式訪問​​......這可能嗎?Android在Java中設置(獲取)環境變量

我已經嘗試設置和亞行外殼爲shell用戶export變量,但它不工作 - 如果不管,我開始從手機菜單中的應用程序或當我使用的亞行外殼am命令。

Runtime.getRuntime().exec()可以幫助嗎?如果我有root訪問電話會有幫助嗎?

感謝

+0

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

回答

7

環境變量只在設置變量,並設置變量之後推出的子進程的過程是可見的。當您從adb shell設置環境變量時,您不在啓動Android應用程序的進程的父進程中,因此應用程序無法看到您設置的變量。

在Java(和Android)中沒有System.setenv(),但是如果你需要爲你自己的程序設置一個環境變量來讀取,總會有更好的方法。其中一種方法是改爲setting and getting Properties。在Java中設置環境變量實際上是不可能的(當然,但你不想這樣做)。您可以使用ProcessBuilder如果要設置另一個進程應該讀一個變量,但如果過程是從Java/Android的程序啓動之時。

想想你要解決什麼問題,如果它可以在不使用環境變量來完成。它們不適合Java,在Android上更糟糕。

+1

同意這樣的環境變量應該是可以避免的,但也有合法的設置環境變量的原因(例如,如果您正在與依賴它們的本機庫進行交互)。你說這在Java中是可能的,但是不提供一個例子,你能否更新你的答案? –

4

可能在Android應用程序中設置環境變量。但是,正如@richq所說的那樣,這些變量將僅在從設置了環境變量(以及應用程序使用的JNI庫)的應用程序啓動的進程中可見。 看到這個職位對與來自Android應用程序設置環境變量: https://stackoverflow.com/a/22315463/927592