Это старый вопрос, но мне самому недавно было любопытно. Я нашел метод, который не требует перекомпиляции adbd
, но он требует su
(я использую Chainfire SuperSu 2.45).
Предполагая, bash
что находится в точке /system/bin/bash
и su
находится в точке /system/xbin/su
, это, по сути, что-то вроде этого:
adb shell
(используйте интерактивную оболочку. Вызов этого процесса как однострочного может привести к прекращению работы ADB в случае возникновения проблемы)
mount -o remount,rw /system
mv /system/bin/sh /system/bin/sh.bak
echo -e '#!/system/bin/bash\n/system/xbin/su -mm -l -s /system/xbin/bash' > /system/bin/sh
Обратите внимание, что ваши пути могут отличаться; использовать which bash
и which su
быть уверенным.
chmod 777 /system/bin/sh
- Проверьте оболочку перед выходом
/system/bin/sh
. Если вы получаете ошибку, исправить ошибку или восстановить путем восстановления резервной копии: cp /system/bin/sh.bak /system/bin/sh
.
- Опционально перемонтировать / систему; большинство устройств сделает это автоматически:
mount -o remount,ro /system
И вы сделали.
Простая символическая ссылка BASH на SH не работает, потому что bash эмулирует SH при вызове таким способом.
Однако, взглянув на strace, он, похоже, ищет, bashrc
когда символическая ссылка BASH называется 'sh --login'. Хотя это можно использовать для «загрузки» оболочек с помощью скрипта, как уже упоминалось выше, способ adbd
вызова SH жестко закодирован.
Если есть проблема, и вы удалили (или переместили) /system/bin/sh
ADB, у вас не будет оболочки, которая поможет вам решить проблему. Если это произойдет, у вас есть несколько вариантов:
- Перезагрузитесь в
adbd
рекавери, которое имеет (например, CWM или TWRP) и откройте для него оболочку adb, чтобы снова скопировать /system/bin/sh.bak в / system / bin / sh.
- Используйте adb для копирования резервной копии:
adb root; adb remount; adb shell; adb pull /system/bin/sh.bak; adb push sh.bak /system/bin/sh
обратите внимание, что это не сработает на всех устройствах; некоторые отказываются позволить adb перемонтировать / system rw таким способом.
- Используйте эмулятор терминала, который можно настроить для запуска другой оболочки; обратите внимание, что некоторые сначала попробуют / system / bin / sh и принудительно закроют.
sh
,bash
когда я использую ADB для подключения. Какую сборку вы используете?