You need to enable JavaScript to run this app. Pixel 5上Firebase Robo测试应用右侧60%屏幕被黑色块遮挡的原因排查
优惠活动
大模型
产品
解决方案
定价
更多

Pixel 5上Firebase Robo测试应用右侧60%屏幕被黑色块遮挡的原因排查

问题根因分析
  • 报错堆栈明确指向异常来源为Google Mobile Ads 5.4.0版本内部创建WebView时,调用了Android 11(API 30)的非公开SDK接口SmartSelectionEventTracker$SelectionEvent.selectionAction(),触发系统StrictMode策略拦截。
  • 该右侧60%纯黑悬浮层,是广告WebView加载时的未完成渲染占位层:API 30的Pixel 5原生系统对非SDK接口的拦截优先级远高于其他厂商定制API 30机型,且Pixel 5的原生WebView版本对旧版Ads SDK的兼容逻辑更严格,直接导致WebView初始化卡住,无法完成渲染流程,停留在黑色占位状态。
  • 其他测试场景无异常的原因:
    • 低版本API设备无该非SDK接口限制,WebView可正常初始化
    • 其他Pixel机型/Android Studio模拟器要么WebView版本较低,要么系统放宽了非SDK接口拦截规则
    • Robo测试为自动遍历点击逻辑,会提前触发广告SDK初始化,且静态截图不会触发用户滑动等重绘操作,刚好截到了WebView卡住的状态;真实用户滑动时会触发WebView重绘或划走广告页面,因此可直接消除黑块。
  • 之前修改targetSdk的临时效果,本质是Android非SDK接口限制与targetSdk版本绑定的规则导致的:低targetSdk(19)会豁免部分非SDK接口限制,而后续配置反复出现异常,是因为WebView为独立系统组件,会自动更新版本,即使targetSdk配置不变,新版WebView也会强制对旧版Ads SDK的调用进行拦截,不存在长期生效的效果。
可落地解决方案
  1. 升级Google Mobile Ads SDK版本
    • 5.4.0版本已停止维护,且未适配API 30的非SDK接口规则。Unity 2017可兼容最后一个支持该Unity版本的Ads SDK版本为6.4.2,该版本已移除了对SmartSelectionEventTracker的非公开调用,可从根源消除拦截报错。
    • 升级时注意将Ads SDK的独立build.gradle配置与主工程对齐,避免targetSdk不一致导致的合并缓存问题。
  2. 临时豁免非SDK接口拦截
    若暂时无法升级SDK,可在应用主工程的Application类的attachBaseContext方法中加入以下代码,将相关类加入隐藏API豁免列表,绕过系统拦截:
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
        try {
            Class<?> vmRuntimeClass = Class.forName("dalvik.system.VMRuntime");
            Method getRuntime = vmRuntimeClass.getDeclaredMethod("getRuntime");
            getRuntime.setAccessible(true);
            Object vmRuntime = getRuntime.invoke(null);
            Method setExemptions = vmRuntimeClass.getDeclaredMethod("setHiddenApiExemptions", String[].class);
            setExemptions.setAccessible(true);
            setExemptions.invoke(vmRuntime, (Object) new String[]{"Landroid/view/textclassifier/logging/"});
        } catch (Exception e) {}
    }
    
  3. 优化Robo测试配置
    • 在Firebase Robo测试的配置中,添加白名单规则跳过广告组件的遍历触发,避免提前加载未渲染完成的广告页面。
    • 上传测试包时关闭Robo测试的自动截图触发,或调整截图时机在应用启动后3秒(预留WebView初始化时间)。
  4. 配置对齐修正
    由于Google Play上架AAB的最低targetSdk要求已升至API 31,Ads SDK独立build.gradle中的低targetSdk配置会被主工程的高版本配置覆盖,无实际作用,直接移除该独立配置中的targetSdk、buildToolsVersion声明,统一使用主工程的配置即可,避免合并缓存导致的随机异常。

内容的提问来源于stack exchange,提问作者derrypool123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.23 13:24:04