—— Android 免root 查看撤回消息 !
Anti-recall v5.2+ 查看撤回文字 图片 闪照
I'm not only a programmer, but a gentleman
—— Android 免root 查看撤回消息 !
Anti-recall v5.2+ 查看撤回文字 图片 闪照
如果你刚开始接触 Accessibility Service, 肯定知道 findAccessibilityNodeInfosByViewId()
这个函数,
他能方便的根据 View
的 id
找到这个 node
.
但它其实非常的费时, 在我的测试下, 如果用它获取QQ的文字消息, 找一次就得 50-150毫秒.
而在屏幕滚动时, 会产生非常多的 event, 用户体验极差.
从适配早期微信的不固定ID所启发, 我可以根据 node tree 从顶上找下来. 微信你ID会变, UI总不怎么变吧?
我把这一套东西搬到QQ, 根据测试好的位置直接找, 只需要 5-10毫秒就获取, 性能提升极大.
但这会花很多的开发和测试时间, 在不同的状态: 好友 群 单向好友 临时对话, 他们的UI布局会稍有不同. 但为了极致性能, 这点时间值得.
接下来要设置合理的过滤器, 过滤掉不需要的事件.
首先 在QQ的聊天界面, 它的子节点特别多, 在8-15个.
在有新消息或者滚动时, 只需要关注装消息的容器发出的事件, 也就是 AbsListView.equals(event.getClassName())
当非当前聊天对象发来消息时, 会显示在屏幕上, 这是一条 class 为 android.widget.TextView
的 event.
但这样的event太多了, 后来我发现, 会先产生一条 TYPE_WINDOW_STATE_CHANGED
, 我先在那时判断是否有这个窗口就好
github: https://github.com/JasonQS/hexo-theme-yilia
增加了 abstract 字段 当设置这个字段时 首页显示文章的摘要
修改了封面的样式 手机端封面全屏 上下颜色可在config.yml自定义
——tim.apk简单逆向
因为防撤回的一个需求: 屏幕上读取到的QQ表情, 存下来是一些无法显示的乱码,
比如 /呲牙 对应的是 0x1400.
因此我的防撤回在找上下文的时候, 如果遇到QQ表情就会GG.
曾经想用 判断是否是相似list 来纠正这些小不同, 结果写出来很麻烦, 性能不好,
于是尝试从tim.apk里寻找映射关系