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

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

  • 在启动模拟器之前直接提取/编辑/重新打包 QEMU 映像
  • 启动后在模拟器上运行某种系统区域设置更改 APK
  • 启动后更改模拟器文件系统上的区域设置
  • 启动后更改模拟器上某些 SQLite DB 中的区域设置
  • 运行按键序列(通过模拟器的 telnet 接口),这将打开设置应用程序并更改区域设置
  • 手动 启动每个平台版本的模拟器,在设置中手动更改区域设置,保存并存档映像以供以后部署

有什么想法是否可以通过上述方法或其他方法来完成?

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


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

我在下面更新了他的答案并提供了详细信息。

有帮助吗?

解决方案

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

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

或您想要设置的任何区域设置。要验证您的更改是否成功,只需使用

$ adb shell 'getprop persist.sys.language'

您可能还想在已知端口上运行模拟器,请检查 我在这个帖子中的回答.


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

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

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

该区域设置将在模拟器的未来运行中持续存在,当然您始终可以在启动时或运行时再次更改它。

其他提示

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

我的解决方案是使用 Android 模拟器上预装的“自定义区域设置”应用程序。只需将带有额外语言参数的意图发送给它,如下所示:

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

更多信息在这里 - 为 UI 测试自动化准备 Android 模拟器。

更新:根据 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
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top