华为联运:资源混淆导致的浮标显示异常

2024-06-20 18:12

本文主要是介绍华为联运:资源混淆导致的浮标显示异常,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在这里插入图片描述

问题

显示正常

正常情况,华为联运包登录成功之后会显示浮标(悬浮球),拖动浮标会出现拖到此处隐藏字样,如下所示:

在这里插入图片描述

显示异常

而在我们的横屏游戏中,遇到拖动到此处隐藏有部分内容被遮挡了,导致被拒审。

粗略看上层遮挡部分的高度正好等同于状态栏的高度,一开始怀疑是否设置全屏或水滴屏、刘海屏适配问题,经大概测试似乎不是。

在这里插入图片描述

分析

我们出包一般是先出资源混淆 + 代码混淆的包,这个包是有问题的。

后面尝试出一个非资源混淆 + 代码混淆的包,运行竟然是正常的,不得不怀疑是资源混淆导致的。

经查看华为链接 SDK 代码知道,浮标相关布局是这三个文件

在这里插入图片描述

布局文件内容对比过程中发现c_buoycircle_hide_guide_dialog.xml 和 c_buoycircle_window_small.xml 的内容完全一致(因为此前已有一部分华为资源是在白名单内不会被混淆),只有c_buoycircle_hide_notice.xml第二个布局文件内容存在差异
在这里插入图片描述

看到这里你可能已经明白了

看到这里怀疑到:
这个 LinearLayout 和 TextView 的资源 ID 被混淆了,难道这两个 view 是通过反射实例化?因为混淆找不到资源,导致部分逻辑没有走而出现问题?

经查看代码发,发现果然如此,它通过getIdentifier 和资源名称获得资源 ID 从而获得 view,关键在于 getIdentifier 是通过源资源名称获取 ID的,这个名称不能被混淆。

代码上如果top_notice_bg能够获取到布局,那么会对这个布局设置一个setMargins,恰巧 marginTop 的值正是状态栏高度

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

解决

那就变得简单了,既然是微信资源混淆导致,那把这个资源 ID 添加到白名单即可

R.id.top_*

其实还有一个问题:

为什么只有横屏会出现这种情况,竖屏不会?(这是华为联运 SDK 的代码逻辑了,不多想,躺平)

这篇关于华为联运:资源混淆导致的浮标显示异常的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1078881

相关文章

售价599元起! 华为路由器X1/Pro发布 配置与区别一览

《售价599元起!华为路由器X1/Pro发布配置与区别一览》华为路由器X1/Pro发布,有朋友留言问华为路由X1和X1Pro怎么选择,关于这个问题,本期图文将对这二款路由器做了期参数对比,大家看... 华为路由 X1 系列已经正式发布并开启预售,将在 4 月 25 日 10:08 正式开售,两款产品分别为华

Java Optional避免空指针异常的实现

《JavaOptional避免空指针异常的实现》空指针异常一直是困扰开发者的常见问题之一,本文主要介绍了JavaOptional避免空指针异常的实现,帮助开发者编写更健壮、可读性更高的代码,减少因... 目录一、Optional 概述二、Optional 的创建三、Optional 的常用方法四、Optio

Java异常架构Exception(异常)详解

《Java异常架构Exception(异常)详解》:本文主要介绍Java异常架构Exception(异常),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. Exception 类的概述Exception的分类2. 受检异常(Checked Exception)

Java报NoClassDefFoundError异常的原因及解决

《Java报NoClassDefFoundError异常的原因及解决》在Java开发过程中,java.lang.NoClassDefFoundError是一个令人头疼的运行时错误,本文将深入探讨这一问... 目录一、问题分析二、报错原因三、解决思路四、常见场景及原因五、深入解决思路六、预http://www

一文带你深入了解Python中的GeneratorExit异常处理

《一文带你深入了解Python中的GeneratorExit异常处理》GeneratorExit是Python内置的异常,当生成器或协程被强制关闭时,Python解释器会向其发送这个异常,下面我们来看... 目录GeneratorExit:协程世界的死亡通知书什么是GeneratorExit实际中的问题案例

Linux虚拟机不显示IP地址的解决方法(亲测有效)

《Linux虚拟机不显示IP地址的解决方法(亲测有效)》本文主要介绍了通过VMware新装的Linux系统没有IP地址的解决方法,主要步骤包括:关闭虚拟机、打开VM虚拟网络编辑器、还原VMnet8或修... 目录前言步骤0.问题情况1.关闭虚拟机2.China编程打开VM虚拟网络编辑器3.1 方法一:点击还原VM

Java捕获ThreadPoolExecutor内部线程异常的四种方法

《Java捕获ThreadPoolExecutor内部线程异常的四种方法》这篇文章主要为大家详细介绍了Java捕获ThreadPoolExecutor内部线程异常的四种方法,文中的示例代码讲解详细,感... 目录方案 1方案 2方案 3方案 4结论方案 1使用 execute + try-catch 记录

CSS模拟 html 的 title 属性(鼠标悬浮显示提示文字效果)

《CSS模拟html的title属性(鼠标悬浮显示提示文字效果)》:本文主要介绍了如何使用CSS模拟HTML的title属性,通过鼠标悬浮显示提示文字效果,通过设置`.tipBox`和`.tipBox.tipContent`的样式,实现了提示内容的隐藏和显示,详细内容请阅读本文,希望能对你有所帮助... 效

解决java.lang.NullPointerException问题(空指针异常)

《解决java.lang.NullPointerException问题(空指针异常)》本文详细介绍了Java中的NullPointerException异常及其常见原因,包括对象引用为null、数组元... 目录Java.lang.NullPointerException(空指针异常)NullPointer

Rust中的Drop特性之解读自动化资源清理的魔法

《Rust中的Drop特性之解读自动化资源清理的魔法》Rust通过Drop特性实现了自动清理机制,确保资源在对象超出作用域时自动释放,避免了手动管理资源时可能出现的内存泄漏或双重释放问题,智能指针如B... 目录自动清理机制:Rust 的析构函数提前释放资源:std::mem::drop android的妙