【问题标题】:How to set an environment variable in Android?如何在 Android 中设置环境变量?
【发布时间】:2020-03-05 07:53:47
【问题描述】:

我正在开展一个项目,我正在使用 Android 操作系统为零售店开发一个自助服务终端应用程序。出于我的目的,我需要能够在 Android 设备上设置一个环境变量:

  1. 独立于任何应用程序;
  2. 在应用程序和系统重新启动后保持不变。

奖励:如果我可以从 adb 设置变量,那就更好了。

令人惊讶的是,事实证明这比预期的要困难。

  1. SharedPreferences 不会削减费用,因为变量取决于创建它的应用程序。
  2. Os.setenv 设置了一个变量,该变量在应用程序关闭或重新启动后立即被删除。
  3. adb shell export 似乎完全没有效果。

有人解决过这个问题吗?

【问题讨论】:

标签: android environment-variables


【解决方案1】:

如果您想使用 Android 框架/以 Android 方式向其他 Android 应用程序公开数据,您可以使用 ContentProvider。或者,如果您有 root 访问权限并且更喜欢 adb,那么您可以使用 setpropgetprop

$ adb shell setprop my.random.prop ok
$ adb shell getprop my.random.prop //outputs "ok"

如果您有权访问 Android 源代码,您可以向init.rc 添加一个在启动时运行的命令。或者,您可以在data/local 之类的位置创建一个文件?

编辑: Alllain 在 cmets 中指出,将persist 添加到属性(即persist.device.id)可以使其在重新启动后仍然存在。

【讨论】:

  • setprop 似乎有效。对于那些感兴趣的人:我必须添加persist.(如persist.device.id)以使该属性在重新启动后保持不变。
  • 我不知道 - 我会把它添加到我的答案中
【解决方案2】:

使用 android studio 将其设置为应用级别 build.gradle

将您的值文件粘贴到src/main/res/raw 文件夹中

task copySecretKey(type: Copy) {
    def File secretKey = file "$System.env.YOUR_VARIABLE"
    from secretKey.getParent()
    include secretKey.getName()
    into 'src/main/res/raw'
    rename secretKey.getName(), "VALUE_OF_VARIABLE_FROM_RAW_FILE" // in my case it is credential.json
}
preBuild.dependsOn(copySecretKey)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-02
    • 2014-09-29
    • 2016-06-27
    • 2012-08-03
    • 2017-07-31
    • 2015-08-01
    • 2011-08-23
    相关资源
    最近更新 更多