在工作中,我们有一个基于Android的信息娱乐系统,我们不断在六个不同的测试平台上部署新版本。部署脚本的道德等同于:
for apk in ${apk_files}; do
adb install -r ${apk]
done
在此之后,我们需要手动执行以下步骤:
每次部署后执行这些步骤都是一个巨大的PITA。人们常常忘记一个或多个步骤,并使测试台处于非工作状态。这导致一堆“虚假”的错误报告浪费了大家的时间。
是否有某种方式(或许使用adb
)我们可以自动执行这些步骤?
答案 0 :(得分:1)
您可以使用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
中未列出该值,即使存在/data/system/users/0/settings_*.xml
默认值。从Android 6开始(我认为),设置不再存在于数据库中,而是存储在Entity e = new Entity("Id")
{
Additional = new EntityAdditional()
{
Editable = "Change Me!",
NotEditable = "Don't Change Me!"
}
};
Dto dto = Mapper.Map<Dto>(e);
dto.Additional.Editable = "Changed!";
Mapper.Map<Dto, Entity>(dto, e); // e NotEditable is null!
的XML文件中。你可以看到其中的值。