Еще один способ удаления предустановленных приложений, android 12

У меня телефон Vivo Y31 и производитель решил добавить vivo.uninstall.compatibility.not_adbUninstall в некоторые свои приложения, из-за чего их стало нельзя удалять через adb командой

pm uninstall -k --user 0

Выдается ошибка

Failure [DELETE_FAILED_USER_RESTRICTED]

Покопавшись в службах нашел интересную команду(на других телефонах номер может быть другим)

TRANSACTION_setSystemAppInstallState = 134

setSystemAppInstallState(String var1, boolean var2, int var3)

По логике тут сначала название пакета, 0/1 - состояние, а потом номер пользователя.

И с её помощью получилось удалить неудаляемый и неотключаемый Jovi

adb shell service call package 134 s16 com.vivo.hiboard i32 0 i32 0

package - название службы, 134 - номер команды, s16 для строки, i32 для boolean и int

На выходе получил

Result: Parcel(00000000 00000001 '........')

Программа удалена!

Для получения номера команды для вашего телефона нужно декомпилировать JAR файл /system/framework/framework.jar и открыть файл IPackageManager.java

На телефоне я это смог сделать установив эмулятор консоли termux, в нем установил и обновил archlinux, далее там установил java (pacman -S jdk-openjdk). Скачал архив dex2jar, закинул его в папку termux вместе с framework.jar, а потом получил промежуточный файл fw

sh d2j-dex2jar.sh -f -o fw framework.jar

Его я закинул на сайт http://www.javadecompilers.com/ и там уже получил нужный код. (На телефоне не хватает памяти).

12
20 комментариев