Java中的Android set(get)环境变量

时间:2011-09-29 12:05:41

标签: android environment-variables root

我对Android操作系统进行了很少的尝试,我试图调用System.getenv()来获取环境变量。它有效,例如对于$PATH,但是我无法定义自己的变量,可以通过这种方式访问​​...是否可能?

我尝试将adb shell中的export变量设置为shell用户但不起作用 - 无论我是从手机菜单启动应用程序还是使用adb shell am命令。

Runtime.getRuntime().exec()可以帮助吗?如果我root可以访问手机,会有帮助吗?

由于

4 个答案:

答案 0 :(得分:7)

环境变量仅在设置变量的进程中可见,并且在设置变量后启动子进程。当您从adb shell设置环境变量时,您不在启动Android应用程序的进程的父进程中,因此应用程序无法看到您设置的变量。

在Java(和Android)中没有System.setenv(),但是如果您需要为自己的程序设置环境变量来阅读,那么总会有更好的方法。其中一种方式是setting and getting Properties

在Java中设置环境变量实际上是不可能的(好吧,它是,但你不想这样做)。如果要设置另一个进程应该读取的变量,则可以使用ProcessBuilder,但如果该进程是从Java / Android程序启动的话。

考虑一下您要解决的问题,以及是否可以在不使用环境变量的情况下完成。它们不适合Java,在Android上更糟糕。

答案 1 :(得分:4)

可以在Android应用程序中设置环境变量。但是,正如@richq所说,这些变量只能在从设置了环境变量的应用程序(以及应用程序使用的JNI库)启动的进程中可见。 有关从Android应用程序设置环境变量的信息,请参阅此帖 https://stackoverflow.com/a/22315463/927592

答案 2 :(得分:0)

Android API 21提供了一种设置环境变量的方法。要设置环境变量,请调用Os.setenv

请参阅此android.system.Os文档和此setenv(3)文档。

每个进程都有自己的环境,该环境是从父进程的环境中复制的。因此,环境变量是按进程的。

答案 3 :(得分:0)

我无法使用 System.getEnv("VAR"),解决方案是将其添加到 build.gradle(:app) 中以备后用:

defaultConfig {
    ...
    buildConfigField "String", "API_KEY", "\"${System.env.API_KEY}\""
}

在其他类中访问它:

println(BuildConfig.API_KEY)

检查环境变量是否已添加到您的系统中。