【问题标题】:How to set Android environment variables for app to inherit?如何设置Android环境变量让app继承?
【发布时间】:2017-03-08 11:55:44
【问题描述】:

我使用adb shell 调试应用程序,并设置一些像export TESTVAR=test 这样的环境变量,然后我在同一个shell am start -n my.app.package 中启动应用程序,奇怪的是进程看不到TESTVAR(检查/proc/pid/environ),因为应用进程的父进程是 zygote。如何为此类应用进程设置 env?

【问题讨论】:

  • 据说/system/bin/app_process是zygote的可执行文件,也许可以通过它启动一个应用程序。 initzygote 进程是否有任何文件可以读取为环境变量以生成子进程? /system/bin/sh 真的有一个,/system/etc/mkshrc。

标签: android shell environment-variables adb


【解决方案1】:

如果您将环境变量用于测试目的,并且在生产中没有依赖它们的功能,那么此答案可能会有所帮助。但是,如果您正在连接和使用 JNI 库并希望使用环境变量作为这些库的指令,那么我不确定它是否可用。

在 API 21 中,Google 引入了Os 类以向开发人员公开系统级访问权限。到目前为止我还没有尝试过,但它应该是Android应用程序和底层Linux内核之间的接口。希望这就是您所需要的。当然,setenv 方法将您设置的参数委托给 Linux 的 setenv 方法。

就像我写的那样,我不确定这在生产中是否可行和可靠,而且这个类需要 API 级别 21,我不知道你的目标是哪个 Android 版本。

【讨论】:

  • 感谢@NitroNbg,像 LD_XXX 这样的环境变量对于 Android 中的调试目的很有用,我需要在应用启动时更改这些变量,也许可以使用 /system/bin/ 启动应用app_process(zygote的旧称)命令行,google了很多还是不知道。
  • 我在 Android API 28 上,不幸的是 Os.setenv() 没有按预期工作。在使用 System.loadLibrary() 加载库之前,我尝试使用 setenv 设置一些环境变量。加载的库没有按预期工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-04
  • 2021-03-28
  • 2022-11-18
  • 2019-07-02
相关资源
最近更新 更多