开发笔记-疑难杂症
整理之前的近期小记时,发现有一些笔记不太好归类,且可能比较偏门,统一放到这里,汇集到一定量后可以再分类存放
No.1 听云集成报错 No virtual method isVisible()
1 |
|
报错信息如上图,初步推断为听云嵌码插桩逻辑有些问题,部分类应该跳过插桩的过程,搜索相关内容寥寥无几,且不相关,听云客服疑似空号,添加失败,客服群也加不进去,最后从非常旧和凌乱的文档中看到一个不太起眼的描述:
1 |
|
把报错中指出的类填入这个 noInstrumentedClasses 中,再次编译,还是不行,后来发现是他的配置内容有缓存在本地,clean project 再重新跑就可以了,记录这个不是为了下次接入再查阅,而是提醒自己需要提升信息搜集能力和文档查阅能力,同时多从报错中推断;处理类似的第三方接入问题时,更改配置要 clean project,避免部分配置缓存在本地造成误判,认为自己的写法有误;另外,接入第三方库时尽量选取维护比较积极,售后比较靠谱的
No.2 Mac 处理 Adobe Genuine Software Integrity Service
使用”不明来路”的 ps, 某一天突然弹出个窗,必须点一下才能关掉,而且过一会又弹出来,无法彻底关闭
解决方法:
- 关闭所有 Adobe 软件
- $ sudo rm /Library/Application\ Support/Adobe/AdobeGCClient/AdobeGCClient.app/Contents/MacOS/AdobeGCClient
- 启动 ps,就正常了
No.3 Android SSL 验证服务器证书 Hostname 不匹配错误
有时候开发需要改动 host,然后会报 host name 不匹配的错误,
1 |
|
错误原因是验证证书时发现真正请求和服务器的证书域名不一致,这时就可以在客户端代码中增加如下代码,忽略hostname 的验证
1 |
|
No.4 电脑可以科学上网但是模拟器不能的情况
自己胡乱鼓捣的时候,发现有这样一种情况:电脑已经开启了科学上网,模拟器可以上网,但是不能浏览外网
解决方法:
- 打开模拟器配置,找到 proxy 选项
- ip 写 127.0.0.1,端口写代理的端口(如果使用的是 Clash,打开 Clash 主界面 -> General 应该就可以看到)
- 保存设置,再尝试一下
No.5 AS 4.2 Gradle 面板中 Tasks 不见了
某次想要执行一些 Gradle 命令,点开 Gradle 面板时,发现其中的 Tasks 不见了
解决办法如下:
No.6 gradle.properties 中文乱码
如果发现 gradle.properties 原本应该是中文的一些注释变成了乱码,可以留意一下 IDE 右下方的编码是什么格式,如果是 ISO-8859-1,那么就可以到设置里找到 Editor -> File Encodings 选项,把默认的 properties 格式改成 UTF-8,如下图
No.7 返回手势需要执行两次
我们平时使用返回手势时,手机边缘会出现一个返回箭头以示成功触发,松开手指就会执行返回操作,但是我开发时发现我的 App 存在一个问题,返回手势第一次触发无反应,第二次才会出现箭头,此时把手指移回边缘,也就是把返回操作取消掉,再执行,又是无反应,再触发一次才能成功。简而言之就是我每次想触发返回,都要执行两次手势
看了一下 Logcat,发现频繁打印 Android handleResized abandoned!
,问问 AI,得到这样的答复:这个日志通常由 SurfaceFlinger 或 ViewRootImpl 打印,表示在处理窗口大小变化时遇到问题,导致一些窗口调整操作被中止或放弃
检查代码发现,注释掉处理全屏的代码后,这个现象就不再会发生,再继续追问,得到这样的答复:如果你观察到 Android handleResized abandoned!
频繁出现在全屏模式下,这通常与窗口大小调整、系统栏状态变化或 SurfaceView 的 Surface 变化有关
我又多尝试了一下,发现这个与全屏情况下,触碰边缘后弹出状态栏有一点像,类似于正常情况下第一次触碰手机屏幕边缘时,状态栏弹出来,然后才能响应接下来第二次的操作。之所以我不能第一时间发现,就是因为我的全屏代码似乎没有生效,导致状态栏一直显示着,但是却需要两次去触发返回
我的设置全屏代码如下,有很多已经被废弃的属性,可能是因为我提升了 Android 版本,其中有一些属性已经无效了导致出现问题。我想替换 ImmersionBar 库来做全屏,发现它的 fullScreen 方法也失效了,应该也是因为同样的原因。于是换用了 ImmersionBar 库的 hideBar 方法,隐藏状态栏和导航栏来实现全屏,暂告一段落,这里先记录一下,具体的原因后续有兴趣再研究了
1 |
|