android - 自动配置 Android 设置?
问题描述
在工作中,我们有一个基于 Android 的信息娱乐系统,我们不断地在六个不同的测试台上部署新版本。部署脚本在道德上等同于:
for apk in ${apk_files}; do
adb install -r ${apk]
done
在此之后,我们需要手动执行以下步骤:
- 将家庭应用程序设置为我们刚刚安装的应用程序之一(始终,而不是仅一次)
- 成为开发人员,并启用保持清醒选项
- 为文本转语音功能选择 Google TTS 引擎而不是 Pico
在每次部署后执行这些步骤是一个巨大的 PITA。人们经常忘记一个或多个步骤,使测试台处于非工作状态。这会导致一堆“虚假”的错误报告,浪费大家的时间。
有什么方法(adb
也许是使用)可以使这些步骤自动化吗?
解决方案
您可以使用 禁用其他家庭应用程序
adb shell pm disable ...
。我认为没有将应用程序设置为默认值的命令行选项。我记得以前研究过这个,并且有一个“首选应用程序”XML 文件存储在其中。如果你想研究它,魔法就会发生在PackageManagerService.addPreferredActivityInternal()
. 看起来它将数据写入磁盘上的文件:package-restrictions.xml
. 我想你可以弄清楚它的格式并编写文件(你需要root)。这由系统设置“stay_on_while_plugged_in”控制。您可以使用
adb shell settings system put ...
.TTS 引擎存储在安全设置“tts_default_synth”中。你可以看到像这样的值,
$ adb shell settings get secure tts_default_synth com.svox.pico com.svox.pico
你可以用
adb shell settings put secure "tts_default_synth" <the value>
.
我注意到,如果之前未设置该值,则当您使用获取的settings
命令获取该值时,即使有默认值null
,它也未在 中列出。settings list
从 Android 6 开始(我认为),设置不再位于数据库中,而是存储在 .xml 文件中的 XML 文件中/data/system/users/0/settings_*.xml
。您可以看到其中的值。
推荐阅读
- android - 关于 Google Play 目标 API 级别要求的问题
- flask - Pytest Flask 应用程序的数据库无法正常工作
- python - Django 非托管模型 - 从 JSON 数据构建查询集
- jquery - 如何从ajax读取excel到web api
- c# - C# Microsoft.Office.Interop.Word 计算文本高度
- django - django 语言更改仅在重新加载后生效
- c# - WebRequest System.Net.WebException:无法连接到远程服务器端口号在异常中更改
- javascript - 如何在角度 6 中创建带有圆角的 chart.js 垂直条聊天?
- docker - 无法从 Docker 容器连接到本地主机中的非 docker MySQL 服务器
- angular - 如何在延迟加载的不同模块中声明的两个组件之间共享数据 - Angular 4