如何在安装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"); // 使用配置值
方案验证(符合你的所有要求)
- 无用户交互权限:两种方式均通过adb完成前置操作,仅方式二需要adb grant授权(无用户弹窗);
- Android 12+兼容:/data/local/tmp访问权限在Android 12+未收紧,系统属性读取权限通过adb grant可正常获取;
- 独立于APK修改:通过adb命令直接修改文件或属性,无需重新打包APK;
- 非Instrumentation传递:完全脱离测试框架,属于系统级或全局目录操作。
为什么之前的方案不可行
/sdcard/Downloads:Android 11+引入分区存储,访问该目录需要MANAGE_EXTERNAL_STORAGE权限,必须用户手动授权,不符合要求;/sdcard/Android/data/com.my.app/files/:部分厂商的系统会在应用首次安装时自动清空该目录,导致配置丢失。
内容的提问来源于stack exchange,提问作者Nilzor
相关产品推荐
相关产品推荐

