You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在安装APP前用ADB在Android设备存储字符串供首次启动读取?

可行解决方案

针对你的CI/CD场景,推荐两种符合要求的实现方式:

方式一:使用/data/local/tmp目录存储文件

/data/local/tmp是Android系统预留的全局临时目录,所有版本(包括Android 12+)都允许应用直接访问,无需额外运行时权限,且不会随应用安装被清空。

步骤1:通过adb写入字符串

# 创建应用专属临时目录(避免与其他应用冲突)
adb shell mkdir -p /data/local/tmp/com.my.app
# 写入目标字符串到文件
adb shell echo "your_target_config_value" > /data/local/tmp/com.my.app/init_config.txt

步骤2:应用首次启动时读取

以Kotlin为例:

val configFilePath = "/data/local/tmp/com.my.app/init_config.txt"
val configFile = File(configFilePath)
if (configFile.exists()) {
    val configValue = configFile.readText().trim()
    // 在这里使用读取到的配置值
    // 可选:读取后删除文件,避免后续启动重复读取
    configFile.delete()
}

方式二:设置Debug系统属性

通过adb设置专属的debug系统属性,应用读取该属性值,适合轻量字符串场景。

步骤1:通过adb设置属性

adb shell setprop debug.com.my.app.init_config "your_target_config_value"

步骤2:配置应用权限并授权

在应用的AndroidManifest.xml中添加权限:

<uses-permission android:name="android.permission.READ_DEBUG_RESOURCES" />

通过adb授予该权限(无需用户交互):

adb shell pm grant com.my.app android.permission.READ_DEBUG_RESOURCES

步骤3:应用读取属性值

以Java为例:

import android.os.SystemProperties;

// 读取属性值,第二个参数为默认值
String configValue = SystemProperties.get("debug.com.my.app.init_config", "default_value");
// 使用配置值

方案验证(符合你的所有要求)

  1. 无用户交互权限:两种方式均通过adb完成前置操作,仅方式二需要adb grant授权(无用户弹窗);
  2. Android 12+兼容:/data/local/tmp访问权限在Android 12+未收紧,系统属性读取权限通过adb grant可正常获取;
  3. 独立于APK修改:通过adb命令直接修改文件或属性,无需重新打包APK;
  4. 非Instrumentation传递:完全脱离测试框架,属于系统级或全局目录操作。

为什么之前的方案不可行

  • /sdcard/Downloads:Android 11+引入分区存储,访问该目录需要MANAGE_EXTERNAL_STORAGE权限,必须用户手动授权,不符合要求;
  • /sdcard/Android/data/com.my.app/files/:部分厂商的系统会在应用首次安装时自动清空该目录,导致配置丢失。

内容的提问来源于stack exchange,提问作者Nilzor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 22:33:24