Xamarin.UITest仅在Android真机上运行失败该如何解决?
问题排查解决步骤
- 一加设备专属权限与环境检查
一加的氢/氧OS对调试权限有额外限制,必须完成以下配置:- 开发者选项中开启「USB调试(安全设置)」:允许通过USB调试修改权限或模拟点击
- 开发者选项中开启「允许安装未知应用(来自USB)」
- 关闭系统的「应用安装验证」功能,避免UITest自动安装测试服务时被拦截
- 给目标应用开放「后台弹出界面」「本地网络访问」权限
- 运行测试前关闭设备上的VPN、代理、网络加速类应用,避免拦截本地回环通信
- 解决签名冲突问题
从日志可见UITest会默认用Xamarin官方keystore重新签名你的已签名APK,一加系统会拦截签名不一致的应用内部通信,你需要在配置中指定自己的签名文件,修改AppInitializer代码如下:public static IApp StartApp(Platform platform) { try { if (platform == Platform.Android) return ConfigureApp.Android .ApkFile(@"C:\Users\Steve\source\repos\MyTestApp\MyTestApp.Android\bin\Dev\com.mytestapp.dev-Signed.apk") // 新增:替换为你的签名文件对应信息 .Keystore( path: @"你的keystore文件本地路径", password: "keystore密码", alias: "签名别名", aliasPassword: "别名密码" ) .StartApp(); else return ConfigureApp.iOS.StartApp(); } catch(Exception ex) { throw(ex); } } - 添加明文网络访问权限
Android 9(API 28)及以上系统默认禁止明文HTTP请求,而Xamarin.UITest和应用内部测试服务的通信依赖本地HTTP请求,你需要在AndroidManifest.xml的<application>节点添加属性:
如果你已经配置了自定义网络安全策略,需要确保规则允许127.0.0.1的明文请求。<application ... android:usesCleartextTraffic="true"> - 前置清理操作
运行测试前先完全卸载设备上的3类相关应用,避免缓存冲突:- 你自己的测试APK
com.mytestapp.dev - Xamarin.UITest自动安装的对应测试服务应用(包名一般为
com.mytestapp.dev.test) - 残留的Xamarin通用测试代理应用
- 你自己的测试APK
- AppCenter测试适配
上传到AppCenter测试时,不需要额外修改代码,只需在提交测试时选择「不要重新签名APK」选项,避免二次签名导致的权限/签名问题。
内容的提问来源于stack exchange,提问作者steve
相关产品推荐
相关产品推荐

