Magisk 模块似乎不支持多用户
qianbinbin opened this issue · 21 comments
在主用户下安装了模块,Gboard 中显示有词库
其他用户下的 Magisk 也显示模块已安装,但 Gboard 中没有词库,重启无效
这应该是正常现象。
多用户的状态下,每个用户的应用都有自己独立的数据文件,如果你在主用户安装,主用户 Gboard 的数据肯定不能被其它用户运行的 Gboard 读取。
而 Magisk 的数据是在一个单独的文件夹里,似乎是 /data/abd/magisk/
(这会我手机不在身边暂时没法验证),这个位置的数据所有用户都可以读取。但这里存放的只是一些模块相关的信息,比如哪个模块被安装了,哪个模块可以升级了之类的。
对于我这个模块而言,词库数据是需要写入应用数据文件夹的,因为 Gboard 只能读取相关的位置,在多用户状态下,应该是哪个用户安装了模块哪个用户就有相关的词条数据,就如同你的描述。
要不你试试在别的用户下再安装一遍模块?注意,这仅仅是我的推想,可能会有用。
Magisk 模块应该是所有用户共享的,Gboard 词库数据是各用户独立的
我完全删除了模块,并在其他用户下重新安装,结果仍然是只有主用户下 Gboard 有词库
是否应该在生成词库数据时,写入到所有用户的 Gboard 相关目录下?
写入到所有用户相关目录不是好的方法,因为现在这个模块的安装卸载已经不是magisk的标准方式了,如果全部写入会制造很多未知的麻烦。
最好的方式还是各个用户独立安装,但又因为magisk是统一的数据,某一用户的安装卸载就会影响到别的用户……
至于你刚刚试验的结果,应该是我模块里的数据路径问题,我一直没考虑过多用户的情况,这个还有待验证。
Magisk 下面有一个“多用户模式”,你这个是什么设置?
Magisk 下面有一个“多用户模式”,你这个是什么设置?
每个用户有独立的超级用户规则
我还在测试,如果可行,应该会更新一版来做到支持安装到当前用户的数据目录下,即每个需要词库的子用户独立按需安装,但现在还有一些问题需要解决。
好,谢谢
已更新。
子用户独立按需安装或卸载即可。
我完全删除了模块,并在其他用户下重新安装,结果仍然是只有主用户下 Gboard 有词库
新版本重复以上步骤,结果还是一样
这个功能要是不太好做就算了
我看脚本的功能就是把 data/db
复制到 Gboard 数据库目录下的 PersonalDictionary.db
,那我直接手动复制就可以了
你确认新版本结果还是一样?
奇怪了,我这边两台设备都测试成功了。
你手机系统版本是多少?安装的时候模块信息显示的是给“主用户”还是“用户XX”?
Android 12,Lineage OS 19.1
安装的时候只显示主用户,工作用户是用 Shelter 创建的
呃,那尴尬了,怪我没说清楚
Shelter 和 Island 这类应用创建的其实不能算做多用户,它更像是给应用创建了另外一个配置文件让它去读取不同的数据,和 Android 系统自带的多用户还是有很大的区别。
由于这类应用创建的数据位置因为使用者的自定义而形式各异,为了考虑到模块最大程度的兼容性,我目前并没有一个泛用的方式来实现数据写入,所以……你只能是自己手动复制数据了,注意数据库权限。
不过你倒是也提醒了我,我之前更新的时候只是说多用户,也没有明确是什么途径实现的多用户,还是需要在介绍里面声明一下。
好,谢谢
补一个说明
@qianbinbin
经过测试,Shelter 可以用,但因为运行 Magisk 的系统帐号还是主帐号(只有使用 Android 系统创建的多用户下才能识别是哪一个帐号),所以模块在判断的时候不能识别出 Shelter 的用户,解决方法是手动处理这个步骤。
你在 /data/adb/wuhgit/CustomPinyinDictionary/
这个目录下创建一个文件名为 10
的空文件,然后再安装模块即可。
下次安装更新的时候也会同步更新主用户和 Shelter 用户,如果 Shelter 这个用户不想用了,删除刚刚创建的那个空文件即可。
试了一下,安装时确实可以,但卸载时不会删除,不过这已经满足我的需要了
再做个补充:10
应该是类似 userid 的东西,如果多次创建可能会递增
卸载不会删除还是相同的原因,运行在主帐号的 Magisk 无法识别当前的用户,即便把 Magisk 应用安装到 Shelter 中也是如此,所以要手动删除那个空白文件。
10
的确是 userid ,但 Shelter 似乎只能创建这一个,当然我没做太多的测试,有待观察。
系统自带的多帐号就是递增,不过后者的识别就没有问题,我测试过同时创建数个帐号都可以正确识别。
Shelter 的也会递增,我以前有次变成了 11,忘了是怎么弄的了。。
先在 adb shell 中执行一次 ls /data/user
(需要 su 提权),按实际情况添加空白文件即可。