代码之家  ›  专栏  ›  技术社区  ›  Christopher Orr

自动更改android模拟器区域设置

  •  26
  • Christopher Orr  · 技术社区  · 14 年前

    对于自动化测试(使用hudson),我有一个脚本,它为android操作系统版本、屏幕分辨率、屏幕密度和语言的许多组合生成一堆模拟器。
    这很好,除了语言部分。

    我需要找到一种自动更改android系统区域设置的方法。以下是我可以想到的一些方法,按优先顺序排列:

    • 在启动模拟器之前直接提取/编辑/重新打包qemu图像
    • 启动后在模拟器上运行某种系统区域设置更改apk
    • 启动后更改仿真器文件系统上的区域设置
    • 启动后更改仿真器上某些sqlite db中的区域设置
    • 运行一个密钥序列(通过模拟器的telnet接口),打开设置应用程序并更改区域设置
    • 手动 为每个平台版本启动模拟器,在设置中手动更改区域设置,保存并存档图像以备以后部署

    有什么办法可以通过上述方法或其他方式做到这一点吗?

    您知道系统在何处保存/读取区域设置吗?


    解决方案:
    多亏了dtmilano关于相关属性的信息,以及我的进一步调查,我想出了一个比上面所有的想法都更好更简单的解决方案!

    我已经用细节更新了他下面的回答。

    2 回复  |  直到 5 年前
        1
  •  53
  •   Community noseratio    7 年前

    我个人认为最简单的方法是启动模拟器,可能是一个干净的实例,除非您正在运行依赖于其他应用程序的集成测试,然后使用adb更改区域设置:

    $ adb shell '
    setprop persist.sys.language en;
    setprop persist.sys.country GB;
    stop;
    sleep 5;
    start'
    

    或者你想设定的地点。 要验证更改是否成功,请使用

    $ adb shell 'getprop persist.sys.language'
    

    您可能还想在已知端口上运行模拟器,请检查 my answer in this thread .


    注意,您还可以直接设置系统属性 启动模拟器时 :

    emulator -avd my_avd -prop persist.sys.language=en -prop persist.sys.country=GB
    

    这样,您可以创建任何类型的纯旧仿真器,然后立即使用您选择的区域设置启动它, 没有 首先必须对模拟器图像进行任何修改。

    此区域设置将在模拟器的未来运行中保持不变,但您当然可以在启动或运行时再次更改它。

        2
  •  7
  •   denys    5 年前

    接受的答案不再有效。 persist.sys.language persist.sys.country 从模拟器属性中消失。

    我的解决方案是在android模拟器上使用预装的“自定义语言环境”应用程序。只需向其发送带有额外语言参数的intent,如下所示:

    adb shell am broadcast -a com.android.intent.action.SET_LOCALE --es com.android.intent.extra.LOCALE EN
    

    更多信息请点击此处- prepare android emulator for UI test automation.

    更新:根据jonas alves的注释,以下命令在api 28+上有效:

    adb shell am broadcast -a com.android.intent.action.SET_LOCALE --es com.android.intent.extra.LOCALE "en_US" com.android.customlocale2