Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android在Java中设置(获取)环境变量_Android_Environment Variables_Root - Fatal编程技术网

Android在Java中设置(获取)环境变量

Android在Java中设置(获取)环境变量,android,environment-variables,root,Android,Environment Variables,Root,我在Android操作系统上做了一些实验,我尝试调用System.getenv()来获取环境变量。例如,它适用于$PATH,但我无法定义自己的变量,该变量可以通过这种方式访问。。。可能吗 我曾尝试以shell用户的身份从adb shell设置和导出变量,但无论我是从电话菜单启动应用程序还是使用adb shellam命令,都无法工作 Runtime.getRuntime().exec()在这方面有帮助吗?如果我有root权限访问手机,会有帮助吗 谢谢环境变量仅在设置变量的进程中可见,并且在设置变量

我在Android操作系统上做了一些实验,我尝试调用
System.getenv()
来获取环境变量。例如,它适用于
$PATH
,但我无法定义自己的变量,该变量可以通过这种方式访问。。。可能吗

我曾尝试以
shell
用户的身份从adb shell设置和导出变量,但无论我是从电话菜单启动应用程序还是使用adb shell
am
命令,都无法工作

Runtime.getRuntime().exec()
在这方面有帮助吗?如果我有
root
权限访问手机,会有帮助吗


谢谢

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

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

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


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

可以在Android应用程序中设置环境变量。然而,正如@richq所说,这些变量将只在从设置了环境变量(以及应用程序使用的JNI库)的应用程序启动的进程中可见。 有关从Android应用程序设置环境变量的信息,请参阅本文:

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

请参阅本文档和本文档


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

我无法使其与System.getEnv(“VAR”)一起工作,解决方案是将其添加到build.gradle(:app)中以供后者使用:

defaultConfig {
    ...
    buildConfigField "String", "API_KEY", "\"${System.env.API_KEY}\""
}
在其他类中访问它:

println(BuildConfig.API_KEY)

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

同意应避免使用环境变量,但设置环境变量有正当理由(例如,如果您正在与依赖环境变量的本机库进行交互)。您说在Java中这是可能的,但没有提供示例,您能更新您的答案吗