【问题标题】:Android OS 11+ pushing data files to an applications scoped storageAndroid OS 11+ 将数据文件推送到应用程序范围的存储
【发布时间】:2022-01-18 19:33:45
【问题描述】:
我有一个 Android 算法库,我想在一个可以在真实设备上运行的应用程序中进行测试。为了运行这个测试,我需要能够将数据文件从计算机推送到手机,推送到正在测试的应用程序可以读取的位置。在 OS 11 之前,这可以使用 adb push ... 命令完成,但新的范围存储隐私功能将不再允许我这样做。
无论解决方案是什么,它都不需要人工干预,因为此测试的目的是作为 CI/CD 管道的一部分自动运行。
有人有解决办法吗?提前感谢您的建议!
【问题讨论】:
标签:
android
automation
adb
【解决方案1】:
您可以将此权限添加到清单中:
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
要授予此权限,您需要启用它,但据我所知,这不能以编程方式更改,但您可以使用此 adb 命令通过 UI 更改它(或者您可以编写一个 UI Automator 脚本更健壮):
adb shell "am start -a android.settings.MANAGE_APP_ALL_FILES_ACCESS_PERMISSION \
-d package:<REPLACE_WITH_YOUR_PACKAGE_NAME> ; \
sleep 2 ; \
input keyevent KEYCODE_DPAD_DOWN ; \
input keyevent KEYCODE_DPAD_DOWN ; \
input keyevent KEYCODE_DPAD_CENTER"
现在您可以正常读取文件了:
@Test
fun myTest() {
val content = File("/sdcard/Download/myFile.txt")
.useLines(Charsets.UTF_8) {
it.joinToString("\n")
}
Log.d("TAG", content)
}