前言

办法很多,我记得我很早之前弄的时候有一种简便方法,但时间一长不太记得清,碰巧正好遇到个朋友有这个问题,于是记录一下解决过程.

碰巧遇到Android 12新特性:XML优化成Binary XML了.文件大小减少了大约2.4倍,读取速度提高了4.3倍.更多参考Android ABX

坏处就是修改起来有点麻烦了.😅不过问题不大,版本低于12的修改起来简单多了.所以修改版本>=12的话前提第3点就尤为重要.

虽然本人之前搞Android系统比较熟练,但毕竟转IOS很久了.不是特别熟悉了😂

冻结错误开不机一般问题表现为卡二屏(即跳过一屏加载引导画面),这种问题可以初步确认是系统问题.

如果只是二屏加载时间长,可以查看magsik模块是否过多等等不玩Android了,不多说了

本方法前提(前3点必备):

  1. 解锁BootLoader (如果你是华为手机,除了交钱有可能解决外基本上没其他办法了.另外,华为手机不配搞机.原因有很多.)
  2. 刷入支持解密的第三方REC(Recovery)
  3. 有一定智力基础和动手能力.
  4. (可选,如果满足更简单些)支持连接你手机的数据线,支持连接手机的PC且正确安装了相关驱动程序并(也是可选的:)正确配置了ADB

解决过程

进入恢复模式(Recovery Mode)

电源+音量上键.出现画面松开电源键即可.(本操作可能不是对所有机型适用,至少对大部分手机是适用的.)

满足前提第4点但未配置ADB:

自行操作:

/data/system/users/0/package-restrictions.xml(0是指的userid)复制到/sdcard(主要是方便在电脑上修改)

然后将此文件(如图所示)复制到电脑上进行下面的修改.

image-20220823204709428

如果你的安卓版本低于12或xml未采用abx格式:

打开此文件,你会看到一些受限制的应用的包名和应用的状态等.比如某个APP处于disable状态,或者某个APP具有更高的优先级等

我们主要关注它的状态即enabled的值.

image-20220824104132700

数字为3时是禁用状态,为1时是状态正常.如果你清楚冻结了某个应用而无法开机的包名,只需修改出问题的即可.而不必全部修改.

如果不清楚,将全部enabled=“3”替换为enabled="1"即可.

修改完成后将文件覆盖回去,然后再剪切并覆盖到/data/system/users/0/package-restrictions.xml并修改它的权限为-rw-rw----(即只有Owner和Group有读Read和写Write权限其余都没有.)数字表示:0600

然后重启即可解决问题.

如果你的安卓版本>=12或xml采用abx格式:

下载该开源项目

使用Python通过命令来将abx转化可读的xml

image-20220824110619053

然后参考上面👆的修改方式进行修改即可.

修改完后,

使用Java通过运行Main.java带上参数(可读xml的文件路径)转化为abx格式然后再覆盖回去.之后操作.参考上面👆

以下为我使用IntelliiJ IDEA运行的命令和相关截图.仅供参考!

1
/Library/Java/JavaVirtualMachines/jdk-17.0.1.jdk/Contents/Home/bin/java -javaagent:/Applications/IntelliJ IDEA.app/Contents/lib/idea_rt.jar=49316:/Applications/IntelliJ IDEA.app/Contents/bin -Dfile.encoding=UTF-8 -classpath /Users/lanyun/Downloads/makeabx/src/out/production/makeabx com.ccl.abxmaker.Main /Users/lanyun/Downloads/ccl_abx/package-restrictions.xml

image-20220824111132161

image-20220824111214170

满足前提第4点且配置ADB:

如果你的安卓版本>=12或xml采用abx格式请参考上面👆的办法解决.

方法一:

pull拉取文件,命令运行.

1
adb -d pull /data/system/users/0/package-restrictions.xml xx(为你的目录,例如C:\或者.即当前目录)

参考上面👆内容修改后再push回去.

1
2
3
adb -d push “xx(本地xml文件的路径)” /data/system/users/0/
chmod 0660 package-restrictions.xml
reboot #重启完成✅

方法二(本人未试过,理论可行):

adb shell pm list packages 打印设备上的所有软件包,若使用—user参数则查询用户的空间的包

adb shell pm list packages -d 输出被禁用的软件包

冻结(禁用)应用命令:adb shell pm disable-user +应用名

解冻(启用)应用命令:adb shell pm enable +应用名

其他ADB命令自行搜索🔍.

方法三:

运行以下命令

1
2
3
4
adb shell	#之后命令需以root身份运行.若不是root身份可能需要su一下
cd /data/system/users/0/
find ./ -name 'package-restrictions.xml' | xargs perl -pi -e 's|enabled="1"|enabled="3"|g'
reboot

不满足前提第4点:

如果你的安卓版本>=12或xml采用abx格式请参考上面👆的办法解决.

可用在REC终端中使用以下命令解决.

1
2
3
cd /data/system/users/0/
find ./ -name 'package-restrictions.xml' | xargs perl -pi -e 's|enabled="1"|enabled="3"|g'
reboot

其他简易解决办法

直接重刷一遍完整包就行了,数据啥的都不会丢失.

不想要数据的话,双清也能行.