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