?

Log in

No account? Create an account
lqp
March 27th, 2019
04:42 pm

[Link]

Previous Entry Share Flag Next Entry
переустановка удаленного системного приложения под android
С год назад я в очередной раз перепрошил свой планшет (Samsung SM-T285, Android 5.1.1) стоковой прошивкой и после этого запустил (из-под TWRP) скрипт, удаляющий bloatware. Теперь, год спустя, я обнаружил, что скрипт оказался несколько слишком агрессивный и удалил некоторые нужные приложения. В частности VpnDialogs, необходимый для работы orbot. За прошедшее время я в системе много что нагородил, поставил app2sd , поместил в rom несколько программ и накатил туда же кучу апдейтов - словом перепрошивка заново не вариант.

Рассказываю, как я достал нужные файлы из прошивки и записал их в планшет. Авось кому пригодится, там есть несколько не вполне прямолинейных моментов.

1) Распаковываю файл прошивки T285XXU0APE1_T285OXE0APC1_T285XXU0APF1_HOME.tar.md5 . Естественно, tar-ом

tar xvf T285XXU0APE1_T285OXE0APC1_T285XXU0APF1_HOME.tar.md5

2) получается куча файлов, в частности нужный мне system.img . Этот system.img не является еще образом диска, он пожат некоей технологией под названием sparse image file. Его нужно распаковать командой

simg2img system.img system.raw

программа simg2img в моем дистрибутиве (debian testing) находится в пакете android-sdk-libsparse-util

3) полученный образ system.raw все еще нельзя смонтировать, потому что что у него обрезан конец - незначащие последние блоки данных. Нужно добить файл пустыми блоками до двух гигабайт. Возможно, для этого существует более элегантное решение, но я поступил в лоб, использовав dd

dd if=/dev/zero of=sys.raw count=524300 bs=4096
dd if=system.raw of=sys.raw conv=notrunc

Необходимые числа можно посмотреть в dumpe2fs и/или в ругани dmesg при попытке подмонтировать system.raw

4) теперь можно смонтировать образ диска куда-нибудь в файловую систему, бо это обычный ext4

sudo mount -o loop sys.raw /mnt/01/

5) для перемещения файлов на их место в планшете надо использовать adb. Для того пользоваться adb нужно разрешить его в настройках планшета. Я не буду это описывать, поскольку все разрешения у меня стоят уже очень давно и подробностей я уже не помню. Документации на эту тему вагон.

6) По какой-то причине файлы нельзя записать прямо на их место в /system/priv-app/. Нужно сначала записать их в пользовательское пространство, чтобы затем шеллом под adb переместить их на место. Нет, и после перемонтирования /system тоже нельзя.

adb push /mnt/01/priv-app/VpnDialogs/ /sdcard

7) теперь запускаем шелл и перемонтируем /system для записи
adb shell
>su
>mount -oremount,rw /system

8) Теперь можно копировать. Из под той же сессии adb shell
cp -r /sdcard/VpnDialogs /system/priv-app/

9) После копирования пермишены по какой-то трансцедентной причине портятся. Поэтому нужно файл за файлом их восстановить.
>chmod 755 /system/priv-app/Vpn/Dialogs/
>chmod 755 /system/priv-app/Vpn/Dialogs/arm/
>chmod 744 /system/priv-app/Vpn/Dialogs/*.apk
>chmod 744 /system/priv-app/Vpn/Dialogs/arm/*.odex

10) перемонтировать /system обратно в ro мне было лень, тем более что он все равно туда сбросится при перезагрузке.

11) Обратите внимание, что приложение должно быть извлечено из того же самого образа, который был прошит. Приложения в /priv-app вроде как подписаны, и приложение из другой сборки может не заработать.
--- Powered by LiveJournal.com