问题描述
有谁知道为什么 Google Pixel 5 和 Google Pixel 5e (API 30) 在查看由 Automatic Robo Script 在Firebase 测试实验室?
我们在测试此应用时没有遇到此类显示问题,该应用在 Unity 2017 中构建并导出到 Android Studio,然后作为 .aab 构建上传到 Firebase 测试实验室,并在其他 20 台设备上运行,其中一些在 Firebase 测试中正确显示实验室包括其他像素。
在 Android Studio Pixel 2、Pixel 4 和 Pixel XL 模拟器中专门测试 API 30 时,我们也没有出现显示问题。
不确定是否是 Pixel 5 的功能让机器人卡住了,而真正的用户会知道要刷掉屏幕或其他什么东西。除了购买 Pixel 5 进行调试之外的任何帮助都将不胜感激。
Image produced by firebase robo script exploring the app
-------------- 更新:-----------
我一直在 Pixel 5 上使用我的 5 次每日 Robo 测试来尝试调试这个问题,我想我要解决的第一件事是 Play 管理中心的预发布报告中显示的一些构建警告(但不是在Android Studio 或 Firebase 的测试结果)类型为“不支持的 API”:
StrictMode policy violation: android.os.strictmode.NonSdkApiUsedViolation: Landroid/view/textclassifier/logging/SmartSelectionEventTracker$SelectionEvent;->selectionAction(III)Landroid/view/textclassifier/logging/SmartSelectionEventTracker$SelectionEvent;
at android.os.StrictMode.lambda$static$1(StrictMode.java:428)
at android.os.-$$Lambda$StrictMode$lu9ekkHJ2HMz0jd3F8K8MnhenxQ.accept(UnkNown Source:2)
at java.lang.class.getDeclaredMethodInternal(Native Method)
at java.lang.class.getPublicmethodRecursive(Class.java:2075)
at java.lang.class.getmethod(Class.java:2063)
at java.lang.class.getmethod(Class.java:1690)
at cEa.a(PG:9)
at cEi.a(PG:12)
at org.chromium.content.browser.selection.SmartSelectionClient.<init>(PG:5)
at cEQ.a(UnkNown Source:7)
at org.chromium.android_webview.AwContents.e(PG:245)
at org.chromium.android_webview.AwContents.d(PG:210)
at org.chromium.android_webview.AwContents.<init>(PG:77)
at to.run(PG:15)
at aJK.a(PG:13)
at aJL.run(UnkNown Source:2)
at org.chromium.base.task.PostTask.b(PG:16)
at aJK.a(PG:7)
at com.android.webview.chromium.WebViewChromiumFactoryProvider.b(PG:6)
at com.android.webview.chromium.WebViewChromium.init(PG:105)
at android.webkit.WebView.<init>(WebView.java:422)
at android.webkit.WebView.<init>(WebView.java:348)
at android.webkit.WebView.<init>(WebView.java:331)
at android.webkit.WebView.<init>(WebView.java:318)
at android.webkit.WebView.<init>(WebView.java:308)
at com.google.android.gms.ads.internal.webview.ac.<init>(:com.google.android.gms.policy_ads_fdr_dynamite@[email protected]:1)
at com.google.android.gms.ads.internal.webview.s.a(UnkNown Source:0)
at com.google.android.gms.ads.internal.util.bi.b(:com.google.android.gms.policy_ads_fdr_dynamite@[email protected]:3)
at com.google.android.gms.ads.internal.webview.v.a(:com.google.android.gms.policy_ads_fdr_dynamite@[email protected]:2)
at com.google.android.gms.ads.internal.js.l.<init>(:com.google.android.gms.policy_ads_fdr_dynamite@[email protected]:4)
at com.google.android.gms.ads.internal.js.n.run(UnkNown Source:0)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at qd.a(:com.google.android.gms.policy_ads_fdr_dynamite@[email protected]:0)
at com.google.android.gms.ads.internal.util.f.a(:com.google.android.gms.policy_ads_fdr_dynamite@[email protected]:1)
at qd.dispatchMessage(:com.google.android.gms.policy_ads_fdr_dynamite@[email protected]:0)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6718)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
我们使用的一个 SDK 是适用于 Unity 的 Google Mobile Ads(版本 5.4.0),它在我们的 Android Studio 项目模块之外有自己的 build.gradle 文件,其默认设置(通过 Unity 2017 导出时不支持 API 30) 如下:
buildToolsversion '29.0.2'
targetSdkVersion 19
在黑屏状态的实例中,我已根据 Android Studio 的建议(其中 targetSdkVersion 19 显示为红色)将这些更新为:
buildToolsversion '31.0.0-rc3'
targetSdkVersion 30
在将这些设置回明显损坏的 Unity 默认设置并重新上传到 Robo 测试后,它起作用了! Pixel 5 显示全屏。我有一种感觉,但是因为在反转该过程时会带回黑屏,第二次将其向前推并没有解决它。现在我的日常测试结束了。
解决方法
Google 在其发布前报告中用于帮助开发人员突出显示设备特定 UI 问题的软件本身不稳定,并且与控制台中的建议相反,不应用于 Unity3D 项目,尽管事实上Unity 项目构成了上传到 Google Play 的大部分游戏。
感谢 Mindful QA 人员的善意和慈善帮助,我们已经能够在包括 Pixel 5 在内的许多物理设备上对此进行测试,并且可以确认黑色矩形问题是 Google 的 Firebase 测试实验室独有的它是 Google Play 中预发布报告屏幕背后的引擎,它是运行 API 30 的物理设备,并且它们无法在所有 Unity3D 项目中绘制连贯的屏幕。
即使使用完全空的 Unity3D 项目,我们也始终如一地重现了这一点。我们还在导出到 Android Studio 之前在 Unity 2017 中构建的 Unity3D 项目和完全在最新版本的 Unity (2021.1.6f1) 中构建的 Unity3D 项目中重现了这一点。
我已尽力通过他们的 Google 网上论坛页面推荐的流程向 Firebase 团队报告此事,但 3 周后我没有收到回复。 Google Play 开发人员支持现已调查该问题,但无法确认该错误,也无法将其记录在适当的团队中以进行修复,因此我想它会持续一段时间。在此之前,希望这可以帮助那些浪费数周时间试图了解为什么在上传到 Google Play 的应用中出现黑色矩形的开发者,当他们遵循在 Play 管理中心中突出显示 UI 问题的推荐流程时。
使用 Empty Unity3D 项目重现此内容的步骤如下:
- 下载 Unity 2021.1.6f1 并在硬盘上为项目创建一个新文件夹。
- 在 Unity Hub 中,确保 Unity 2021 为 SDK、NDK 和 JDK 添加了 Android Build 支持和模块: Unity Hub Settings
- Inside Unity -> Edit -> Preferences,确保 SDK、JDK 和 NDK 的外部工具都设置为“Install With Unity(推荐)” Unity external Path config
- 在 Unity 文件 -> 构建设置 -> 播放器设置 -> 其他设置中确保目标 SDK 设置为自动(安装最高)并且 Android 11 出现在列表中:Player Settings
- 将项目构建为 .apk。
- 转到 https://console.firebase.google.com 并选择现有项目或创建新项目。
- 在继续上传 .apk 之前,从左侧面板中选择测试实验室并选择运行测试。
- 选择自定义并使用过滤器查找任何运行 API 30 的物理设备,在撰写本文时,这可能是设置为使用 API 30 的 Pixel 5e 或 Pixel 4。方向可以是纵向或横向。
- 选择 Confirm,然后选择 Start 1 Test。这大约需要 5 分钟。
- 测试完成后,选择测试,然后按 ScreenShots 并观察黑色矩形 Empty Project Black Rectangle
这种情况在任何运行 API 29 或更低版本的设备上都不会发生,我们测试过的设备总共包括:
Firebase 成功(无黑色矩形): LG H932 (API 26) 连结 5 (API 23) MHA-L29 (API 24) H8216 (API 28) 像素 2 (API 27) 像素 (API 26) 一加 A5010 (API 28) SM-G955F (API 26) 银河 S9 (API 26) 像素 3 (API 28) 红米 6A (API 27) 诺基亚 1 (API 27)
Firebase 失败(黑色矩形): 像素 4 (API 30) 像素 5e (API 30) 像素 5 (API 30)
API 30 设备在大约 19/20 的测试中始终失败。显然每天有 5 个免费测试,这些数据需要开发人员很长时间来收集,所以我希望它可以帮助那些试图修复这个错误或理解为什么他们自己的项目在上传到 Google Play 时有黑色矩形的人.