Это старый вопрос, но мне самому недавно было любопытно. Я нашел метод, который не требует перекомпиляции 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/shADB, у вас не будет оболочки, которая поможет вам решить проблему. Если это произойдет, у вас есть несколько вариантов:
- Перезагрузитесь в
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 для подключения. Какую сборку вы используете?