Tag Archives: Mimboloveroot
.. если завершено оно было операционной системой по причине недостатка памяти. В этом случае приложение стартует с последней бывшей видимой activity. Зачем это нужно ? Чтобы убийство процессов было прозрачно для пользователя. Рассмотрим типичную ситуацию: у вас открыто приложение, и в этот момент вам позвонили. Если вы после ответа на звонок обнаружите своё приложение заново запускающимся, вас это не обрадует. В общем, нам надо научиться поддерживать это поведение, так чтобы можно было стартануть приложение с любой Activity. А для того, чтобы адаптироваться к таким вещам, нужно эти вещи уметь воспроизводить. В моём случае сценарий воспроизведения такой:
- Открываем наше приложение, переходим со стартовой Activity на тестируемую
- Переходим в окно с уведомлениями (которое выползает сверху) и нажимаем на значок настроек
Этим мы переходим в системное приложение настроек, которое закрывает наше приложение - Убиваем процесс командой
ps | grep su.elwood | awk '{print $2}' | xargs kill
( su.elwood – имя пакета вашего приложения )
Это можно сделать либо в консоли adb -d shell, либо по ssh, если он у вас, конечно, установлен
Также понадобится root (в adb shell перед выполнением команды нужно выполнить команду su). - Нажимаем кнопку Back на телефоне
Обязательно нужно, чтобы какое-то другое приложение закрывало наше, иначе ОС подумает, что программа упала сама, и при перезапуске стартанёт приложение с основной Activity.
Теперь мы научились воспроизводить это поведение, и можем протестировать наше приложение, пробуя запускать его со всех доступных Activities. Осталось только решить, как обрабатывать такие ситуации программно. Здесь я могу отметить, что помимо введения флагов в некоторое глобальное состояние, можно еще абузить особенность андроида, состоящую в том, что при таком перезапуске ОС запомнит стек Activities, который был на момент остановки процесса. И если при перезапуске с “неверной” Activity вы сделаете finish(), то будет создан экземпляр Activity, которая лежала под ней в исходном процессе (если таковая, конечно, была).
Предварительно необходимо
Рутованный телефон с установленным BusyBox и один из SSH серверов (я использую SSH/SFTP Daemon).
Алгоритм
Скачиваем архив с собранным под ARM бинарником, запускаем SSH сервер на телефоне, подключаемся к нему через Putty, разблокируем файловую систему /system для записи:
su -
busybox mount -o remount,rw /system
Подключаемся через WinSCP, раскидываем файлы так, как они размещены в архиве.
Добавляем +x на файлы /data/xbin/* :
chmod +x /data/xbin/*
Также устанавливаем права тут (хотя вроде и без этого работает):
busybox chmod -R 0755 /system/etc/terminfo
busybox chmod -R 0644 /system/etc/terminfo/?/*
После этого проверяем, что /data/xbin/mc стартует в сеансе Putty, и возвращаем read-only на /system:
busybox mount -o remount,ro /system
Результат
Вполне рабочий mc с работающим вьювером (редактор глючит, видимо надо что-то пофиксить в конфигах или добавить). Остальные плагины пока не смотрел.
0