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的调用进行拦截,不存在长期生效的效果。
可落地解决方案
- 升级Google Mobile Ads SDK版本
- 5.4.0版本已停止维护,且未适配API 30的非SDK接口规则。Unity 2017可兼容最后一个支持该Unity版本的Ads SDK版本为6.4.2,该版本已移除了对
SmartSelectionEventTracker的非公开调用,可从根源消除拦截报错。 - 升级时注意将Ads SDK的独立build.gradle配置与主工程对齐,避免targetSdk不一致导致的合并缓存问题。
- 5.4.0版本已停止维护,且未适配API 30的非SDK接口规则。Unity 2017可兼容最后一个支持该Unity版本的Ads SDK版本为6.4.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) {} } - 优化Robo测试配置
- 在Firebase Robo测试的配置中,添加白名单规则跳过广告组件的遍历触发,避免提前加载未渲染完成的广告页面。
- 上传测试包时关闭Robo测试的自动截图触发,或调整截图时机在应用启动后3秒(预留WebView初始化时间)。
- 配置对齐修正
由于Google Play上架AAB的最低targetSdk要求已升至API 31,Ads SDK独立build.gradle中的低targetSdk配置会被主工程的高版本配置覆盖,无实际作用,直接移除该独立配置中的targetSdk、buildToolsVersion声明,统一使用主工程的配置即可,避免合并缓存导致的随机异常。
内容的提问来源于stack exchange,提问作者derrypool123
相关产品推荐
相关产品推荐

