我对Android操作系统进行了很少的尝试,我试图调用System.getenv()
来获取环境变量。它有效,例如对于$PATH
,但是我无法定义自己的变量,可以通过这种方式访问...是否可能?
我尝试将adb shell中的export
变量设置为shell
用户但不起作用 - 无论我是从手机菜单启动应用程序还是使用adb shell am
命令。
Runtime.getRuntime().exec()
可以帮助吗?如果我root
可以访问手机,会有帮助吗?
由于
答案 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)
检查环境变量是否已添加到您的系统中。