对于自动化测试(使用Hudson),我有一个脚本,可以为Android OS版本,屏幕分辨率,屏幕密度和语言的许多组合生成一堆模拟器。 这种方法很好,除了语言部分。
我需要找到一种自动更改Android系统区域设置的方法。以下是我能想到的一些方法,按优先顺序排列:
是否可以通过上述方法或其他方式完成任何想法?
您知道系统持久存储/读取区域设置的位置吗?
解: 感谢dtmilano关于相关属性的信息,以及我的一些进一步调查,我提出了一个比上述所有想法更好更简单的解决方案!
我已经在下面更新了他的答案和详细信息。
我个人认为最简单的方法是启动模拟器,可能是一个干净的实例,除非您运行依赖于其他应用程序的集成测试,然后使用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
这样,您可以创建任何类型的普通旧模拟器,然后使用您选择的区域设置立即启动它,而无需先对模拟器图像进行任何修改。
此区域设置将在以后运行模拟器时保留,但当然您始终可以在启动时或运行时再次更改它。
接受的答案不再适用。 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