芽衣 发表于 2021-2-9 22:06

〖简单教程〗讯飞输入法 v9.1.9466 谷歌版 突破剪贴板保存上限

本帖最后由 芽衣 于 2021-2-9 23:02 编辑

前几天正己发了个能保存999条剪贴板记录的讯飞输入法,https://www.52pojie.cn/thread-1367700-1-1.html,不过他没说怎么改的,自己独食。现在以我的角度来分析一下这个输入法是怎么修改上限的,思路可能有些不一样,但目的是一致的(废话
准备工具:
1、ddms
2、反编译工具,移动pc端均可



软件有签名校验,直接用一键即可,不再具体分析。整体比较简单,不设权限了。

https://static.52pojie.cn/static/image/hrline/5.gif

首先清空所有剪贴板的内容,直接用ddms抓他的文字id,那么可以得到clipboard_menu_first_prompt。为什么我要清空他呢?如果保存有内容,那么就不会显示了,所以肯定存在着字符串长度判断,isEmpty()方法。既然有判断有无内容,那么我首先猜测他应该也会有储存上限的判断,按照开发思路不应该调来调去,而是在一个类。

反编译后代码搜索这个id,只有1个sget,点进去,代码位于app/ccf。然后转换成Java。





关键点this.g,如果为空则显示,上面有个判断条件,当然这不是重点。右键查找用例。





查看红框部分,来到这里。


```
public void c() {
      if (this.o.size() == 0) {
            this.h.setText("");
            this.g.setVisibility(0);
      } else {
            int i2 = (!RunConfig.isUserLogin() || TextUtils.isEmpty(AssistSettings.getUserId()) || RunConfig.getInt("account_level", 0) < 5) ? 100 : 500;
            this.h.setText("(" + this.o.size() + "/" + i2 + ")");
            if (this.o.size() == i2) {
                this.h.setTextColor(getResources().getColor(edp.clipboard_menu_list_count_max_tv));
            } else {
                this.h.setTextColor(getResources().getColor(edp.clipboard_menu_list_count_tv));
            }
            if (this.i) {
                this.i = false;
            } else {
                this.g.setVisibility(8);
            }
      }
      this.j.notifyDataSetChanged();
    }
```



this.o.size()就是剪贴板储存的内容数目了。代码开头就进行了数目判断,如果this.o.size()==0,==符号的意思是两边是否相等,左边等于右边,所以要2个=,单独1个是赋值,如果结果为真就执行大括号{ }里面的代码,新手的话你就这么记。所以剪贴板没有内容的时候就会显示那串文字了。




好接着继续看,如上图,this.h.setText是不是很熟悉,里面的内容就是"(" + this.o.size() + "/" + i2 + ")"




显示的内容id是clipboard_menu_list_count_tv。对应上面的代码,这下就清晰了。代码逻辑为:i2为储存上限,this.o.size()为当前储存的数量。如果储存的数量==储存上限,那么显示红色文字。如果账户等级(account_level)<5,那么i2上限为100,否则500。
知道了代码逻辑后,直接改掉赋值即可。100的16进制为0x64,500是0x1f4。






如上图,可以知道v0寄存器储存着上限,那么直接在地址:goto_36下方任意对v0赋值即可。比如赋值8888条上限,效果如图:




但是还有一个问题,实际操作后发现上限虽然提高了,但是当前储存的数量并没有大于100,说明还是有其他的判断,因为他要移除超出的部分,那么直接找this.o.size()的来源即可。同理位于cbl这个类。







如上图,v0寄存器就是i,超过就移除最后一个内容,所以地址:goto_84下方v0赋值改到8888即可。

```
const/16 v0, 0x22b8

move v1, v0
```


正己 发表于 2021-2-9 22:59

芽衣 发表于 2021-2-9 22:52
没说啊,哪有人问……
证明一下,俺没恰独食,只不过说得比较简略{:17_1072:}

芽衣 发表于 2021-2-10 17:43

lncyq 发表于 2021-2-10 11:47
刚才安装了,反馈一下,运行不了。在切换输入法时,讯飞输入法就闪退

谷歌版长时间不更新,可能对一些新设备不稳定。

1901323679 发表于 2021-2-9 22:11

谢谢分享

不明所以 发表于 2021-2-9 22:19

g感谢分享

Rolanju 发表于 2021-2-9 22:21

支持楼主分享

白天起不来 发表于 2021-2-9 22:26

讯飞输入法还是挺不错的

um.haha 发表于 2021-2-9 22:41

,我是真的用不到8888,不过技术是狠ok,靴靴

arq2020 发表于 2021-2-9 22:41

谢谢楼主

正己 发表于 2021-2-9 22:47

我说了,在帖子的回复中,有一个人给我问了思路,又给你水了一贴,草率了{:17_1072:}

芽衣 发表于 2021-2-9 22:52

正己 发表于 2021-2-9 22:47
我说了,在帖子的回复中,有一个人给我问了思路,又给你水了一贴,草率了

没说啊,哪有人问……
页: [1] 2 3 4 5 6
查看完整版本: 〖简单教程〗讯飞输入法 v9.1.9466 谷歌版 突破剪贴板保存上限