自动配置Android设置?

时间:2018-05-02 22:42:13

标签: android

在工作中,我们有一个基于Android的信息娱乐系统,我们不断在六个不同的测试平台上部署新版本。部署脚本的道德等同于:

for apk in ${apk_files}; do
    adb install -r ${apk]
done

在此之后,我们需要手动执行以下步骤:

  1. 将家庭应用设置为我们刚安装的应用之一(始终,而不是一次
  2. 成为开发人员,并启用保持清醒选项
  3. 选择Google TTS引擎进行文字转语音功能,而不是Pico
  4. 每次部署后执行这些步骤都是一个巨大的PITA。人们常常忘记一个或多个步骤,并使测试台处于非工作状态。这导致一堆“虚假”的错误报告浪费了大家的时间。

    是否有某种方式(或许使用adb)我们可以自动执行这些步骤?

1 个答案:

答案 0 :(得分:1)

  1. 您可以使用adb shell pm disable ...停用其他家庭应用。我不认为有一个命令行选项将应用程序设置为默认值。我记得以前看过这个,并且存在一个“首选应用程序”XML文件。如果你想调查它,神奇就会发生在PackageManagerService.addPreferredActivityInternal()。看起来它将数据写入磁盘上的文件:package-restrictions.xml。我想你可以弄清楚它的格式并编写文件(你需要root)。

  2. 这由系统设置“stay_on_while_plugged_in”控制。您可以使用adb shell settings system put ...

  3. 进行设置
  4. 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>设置它。

  5. 我注意到,如果以前未设置该值,则使用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文件中。你可以看到其中的值。