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

STe*_*TeN 9 android environment-variables root

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

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

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

谢谢

ric*_*chq 7

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

在Java(和Android)中没有System.setenv(),但是如果你需要为你自己的程序设置一个环境变量来读取,总会有更好的方法.一种方法是设置和获取属性.

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

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

  • 同意应该避免环境变量,但是有合理的理由设置环境变量(例如,如果您与依赖它们的本机库连接).你说在Java中有可能但是没有提供一个例子,你能否更新你的答案? (4认同)

Abh*_*han 7

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

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

每个进程都有自己的环境,该环境是从父进程的环境复制的。所以环境变量是每个进程的。


Dav*_*sNT 5

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