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

问题描述 投票:27回答:2

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

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

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

是否可以通过上述方法或其他方式完成任何想法?

您知道系统持久存储/读取区域设置的位置吗?


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

我已经在下面更新了他的答案和详细信息。

android android-emulator qemu
2个回答
54
投票

我个人认为最简单的方法是启动模拟器,可能是一个干净的实例,除非您运行依赖于其他应用程序的集成测试,然后使用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

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

此区域设置将在以后运行模拟器时保留,但当然您始终可以在启动时或运行时再次更改它。


7
投票

接受的答案不再适用。 persist.sys.languagepersist.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
© www.soinside.com 2019 - 2024. All rights reserved.