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

时间:2010-03-10 14:04:29

标签: android android-emulator qemu

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

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

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

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

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


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

我已经在下面更新了他的答案。

3 个答案:

答案 0 :(得分:53)

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

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

此语言环境将在以后运行模拟器时保留,但当然您可以在启动时或运行时再次更改它。

答案 1 :(得分:7)

接受的答案不再适用。 <nav class="navbar navbar-default navbar-fixed-top"> <div class="container"> <div class="navbar-header"> <!--Logo--> <div class="navbar-brand logo"> <p>DeepRoot Productions</p> </div> <!--Hamburger Menu--> <button class="navbar-toggle" data-toggle="collapse" data-target=".navHeaderCollapse"> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button> </div> <!--Full-Width Navbar--> <div class="collapse navbar-collapse navHeaderCollapse"> <ul class="nav navbar-nav navbar-right"> <li><a class="right-space" href="#">Home</a></li> <li><a class="right-space" href="#">Portfolio</a></li> <li><a class="right-space" href="#">About</a></li> <li><a href="#">Contact</a></li> </ul> </div> </div> </nav> persist.sys.language已从模拟器属性中消失。

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

persist.sys.country

此处提供更多信息 - 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

答案 2 :(得分:2)

似乎Android模拟器现在支持在启动时设置区域设置:

emulator -avd <avd-name> -change-locale fr-CA

来源-https://androidstudio.googleblog.com/2019/09/emulator-29112-stable.html