- How to set up Syncthing with a tray icon on a Windows PC you don’t have admin rights to
- How to Afford the Latest New Apple Products
- How to restore the People Pane in Outlook 365
- How to get around Outlook 365 automatically encrypting emails you save to your computer
- How to connect to the NETGEAR BR500 router using OpenVPN-GUI on Windows
- How to fix the HDHomeRun app getting stuck on the Recorded screen or being unable to find any tuners
- How to convert a Workday job listing login redirect to the actual job listing
- How to fix Windows Hello facial recognition locking your screen while the PC is use
- How to resolve the Resilio Sync service “Error 1069: The service did not start due to a logon failure.” on Windows
- How to reset a default app preference in Samsung One UI 3.1 (Android 11)
- Особенности Android-окружения
- Первый пример
- Автозапуск
- Запуск скриптов до и после установки прошивки
- INFO
- Что еще?
- Вместо выводов
- Contents
- 1. Install Busybox for Android 12+ devices
- 2. Download Ubuntu rootfs
- 3. Install applications
- 3.1. Start SSH service in chroot
- 3.2. Install XFCE4 and VNC server
- 3.3. Start PulseAudio
- 3.4. Add a normal user
- 3.5. Do not install Snap packages
- 4. References
- Leave a comment
- ADB
- WARNING
- Adb-sync
- Adbfs
- Go-mtpfs
- SSH
- Bash, tmux, mc
- Rsync
- SSHButton
- Выводы
- Table of Contents
- Why root Android Phones?
- Install Android Oreo
- 1. Unlock bootloader
- No warranty after rooting the device
- Download ADB, Fastboot & phone’s USB drivers
- Download and install the device USB driver
- Install custom recovery
- Install superuser
- Conclusion
- Frequently Asked Questions
- Which Android devices are easy to root?
- Why would you root an Android?
- What are the risks of rooting a phone?
- Can you root an Android phone without a computer?
- how to root android phone without any app
- how to root Android phone without pc
- Can I root my phone for free?
How to set up Syncthing with a tray icon on a Windows PC you don’t have admin rights to
How to Afford the Latest New Apple Products
How to restore the People Pane in Outlook 365
How to get around Outlook 365 automatically encrypting emails you save to your computer
How to connect to the NETGEAR BR500 router using OpenVPN-GUI on Windows
How to fix the HDHomeRun app getting stuck on the Recorded screen or being unable to find any tuners
How to convert a Workday job listing login redirect to the actual job listing
How to fix Windows Hello facial recognition locking your screen while the PC is use
If this is happening to you, you may have Personify ChromaCam installed. Stop the matching service in Serices.msc, then uninstall all Personify apps (as well as Logitech Capture). Fixed the problem for me with the Logitech BRIO 4K webcam on Windows 10. from jdrch https://dev.to/jdrch/how-to-fix-windows-hello-facial-recognition-locking-your-screen-while-the-pc-is-use-59ac via IFTTT
How to resolve the Resilio Sync service “Error 1069: The service did not start due to a logon failure.” on Windows
How to reset a default app preference in Samsung One UI 3.1 (Android 11)
Android основан на ядре Linux, включает в себя набор стандартных UNIX-команд и простой шелл sh. Все это значит, что мы можем не только использовать командную строку для выполнения низкоуровневых операций, но и писать шелл-скрипты, которые будут выполнять функции, недоступные из графического интерфейса. В этой статье мы поговорим о том, что с их помощью можно сделать и зачем все это нужно.
Для прошлого номера журнала я написал статью о Tasker — системе, которая позволяет автоматизировать работу Android и заменить сотни сторонних приложений. К сожалению, Tasker ограничен высокоуровневыми функциями Android и не позволяет выполнять такие низкоуровневые операции, как монтирование файловых систем, изменение параметров ядра, системных переменных или запуск демонов. Зато все это можно сделать с помощью скриптов.
Сразу оговорюсь, что в этой статье речь пойдет о шелл-скриптах в традиционном для Linux понимании, без использования инструментов вроде SL4A, QPython или Roboto. Главное назначение таких скриптов — изменение поведения системы, параметров ядра, работа с демонами (ADB, например) и тому подобное. Скрипты могут стартовать на этапе загрузки ОС, установки новой прошивки, после тапа по кнопке или же по традиции — из терминала.
В статье я расскажу, как писать такие скрипты, как заставить их стартовать автоматически, привязывать к определенному системному событию. В качестве бонуса также объясню, как заставить консоль восстановления (recovery) выполнить необходимые тебе действия перед установкой или сразу после установки новой прошивки. Начинаем.
Особенности Android-окружения
В самой своей основе, там, где нет Java и Dalvik, Android представляет собой минималистичный Linux-дистрибутив со всеми свойственными ему атрибутами: ядром, системой инициализации, набором библиотек, демонов, консольных команд и, конечно же, шеллом. Последний — это не что иное, как mksh из MirBSD, переименованный в sh; простой командный интерпретатор с поддержкой языковых конструкций классического Bourne shell из UNIX и автодополнением по нажатию Tab.
В качестве комплекта базовых UNIX-команд здесь используется toolbox, своего рода урезанная альтернатива BusyBox, которая позволяет вызывать несколько разных команд из одного бинарника (с помощью симлинков). Toolbox включает в себя очень ограниченный набор команд, в котором нет не только grep или sort, но даже cp. Поэтому для полноценной работы со скриптами настоятельно рекомендуется установка BusyBox, благо в маркете полно бесплатных инсталляторов.
Сам шелл располагается не совсем по адресу, поэтому «шибанг» в скриптах будет выглядеть несколько по-иному, а именно #!/system/bin/sh. Зато о расположении бинарников можно не думать вообще, так как в переменной $PATH всегда прописаны правильные значения. Каталогов для поиска команд тут всегда три: /system/bin/, /system/sbin/ и /system/xbin/ для внешних бинарников. Туда обычно устанавливается BusyBox.
Основное назначение скриптинга в Android — работа с ядром и системными утилитами. Ядро тут стандартное и экспортирует все те же интерфейсы /proc и /sys, через которые можно рулить железом и состоянием системы. Плюс есть набор специфичных для Android утилит, которые будут очень полезны при разработке скриптов:
- pm — менеджер пакетов, позволяет устанавливать, удалять и перемещать софт;
- am — менеджер активностей (Activity), может быть использован для запуска приложений;
- dumpsys — дамп в консоль массы различной информации о состоянии системы;
- screencap — утилита для снятия скриншота;
- screenrecord — утилита для записи скринкастов;
- getprop/setprop — команды для чтения и изменения системных переменных;
- start/stop — запуск и остановка системных служб;
- input — позволяет отправлять в текущее окно кей-коды (эмуляция клавиатуры);
- service — утилита для управления Java-сервисами, имеет очень много возможностей;
- svc — позволяет управлять Wi-Fi, USB-подключением и питанием.
Первый пример
Теперь давайте попробуем написать первый скрипт. Делать это лучше на компе, а еще лучше в Linux или редакторе, который умеет создавать текстовые файлы без символа возврата каретки (который при открытии в Android будет выглядеть как ^M в конце каждой строки). Наш первый скрипт будет состоять всего из двух строк, которые делают бэкап всех установленных приложений на карту памяти. Его код (требует BusyBox):
#!/system/bin/sh
mkdir /sdcard/backup
cp /data/app/*.apk /sdcard/backup
Сохраняем (пусть он называется apk_backup.sh) и перекидываем на смартфон с помощью ADB:
$ adb push apk_backup.sh /sdcard/
Теперь его нужно запустить. Проще всего сделать это с помощью все того же ADB:
$ adb shell sh /sdcard/apk_backup.sh
Примерно таким же образом скрипт можно запустить из консоли на самом смартфоне/планшете:
$ sh /sdcard/apk_backup.sh
Само собой, такой способ не очень удобен. Поэтому нам нужен какой-то быстрый способ запуска скрипта. Наиболее удобное из найденных мной решений — это приложение QuickTerminal. Устанавливаем, запускаем, переходим на вкладку Quick Command, нажимаем кнопку «+», вбиваем имя (произвольное) и команду (sh /sdcard/apk_backup.sh), в поле Output Type выбираем либо Dialog Output, либо Nothing. В первом случае во время выполнения скрипта на экране появится окно с результатом, во втором все пройдет в фоне. Кому что удобнее. Далее сохраняем и получаем кнопку, с помощью которой скрипт можно будет запустить быстро и легко.
Теперь напишем скрипт, который восстановит наш бэкап:
#!/system/bin/sh
for i in /sdcard/backup/*; do
pm install -t -r $i
done
В нем мы задействовали команду pm с опцией install и флагами -t и -r, которые заставляют систему устанавливать приложения, даже если они подписаны тестовым ключом или уже установлены. Также можно использовать флаг -s, который принуждает приложения к установке на карту памяти (если такая возможность есть), или -f — установка во внутреннюю память устройства.
Имея рут, можно даже сделать бэкап настроек всех приложений с помощью копирования и архивации каталога /data/data/, однако восстановить его будет очень проблематично, так как в Android каждое приложение исполняется от имени созданного специально для него Linux-юзера и хранит настройки внутри каталога, принадлежащего этому пользователю. Проблема здесь в том, что идентификатор Linux-юзера для каждого приложения генерируется динамически, поэтому после восстановления бэкапа в заново установленной системе идентификаторы не будут совпадать и приложения не смогут прочитать свои настройки. Придется вручную выяснять ID юзера для каждого приложения и менять права доступа на каталоги с данными.
С другой стороны, мы можем использовать встроенный в Android Backup Manager, позволяющий сторонним приложениям использовать возможности системы для бэкапа и восстановления приложений и их данных. Управлять им можно из консоли (а значит, и с помощью скриптов), но сам по себе он никакого бэкапа не производит, а возлагает эту работу на сторонние приложения. Helium — одно из таких приложений. Если установить и настроить его, операцию бэкапа и восстановления можно будет заскриптовать. Например, следующий простой скрипт сделает резервную копию всех сторонних приложений:
#!/system/bin/sh
# Получаем список всех сторонних приложений
for i in `pm list packages -e`; do
# Добавляем каждое из них в очередь
bmgr backup ${i:8}
done
# Запускаем операцию бэкапа
bmgr run
$ bmgr list sets # Получаем список бэкапов
$ bmgr restore <тег> # Восстанавливаем нужный бэкап
Автозапуск
«Это все круто, но скрипты должны запускаться сами», — скажешь ты и будешь абсолютно прав. Без автозапуска от скриптов толку мало, но это легко исправить, если воспользоваться все тем же Tasker. Он умеет запускать любые шелл-команды в ответ на любое событие. Чтобы воспользоваться этой функциональностью, достаточно создать новый профиль, выбрать событие (для бэкапа лучшим событием будет время), затем добавляем действие, выбираем Script -> Run Shell, вбиваем команду (sh /sdcard/script.sh), выбираем, если необходимо, файл для записи результата и включаем профиль.
Другой популярный способ автозапуска — это использование средств автоматического исполнения скриптов при загрузке в сторонних прошивках. Сегодня почти все сколько-нибудь известные кастомные прошивки умеют стартовать скрипты из каталога /system/etc/init.d/, а в стоке такую функциональность можно получить с помощью приложения Universal init.d из маркета. С последним, однако, надо быть осторожным, так как оно запускает скрипты не на раннем этапе загрузки, как это происходит в том же CyanogenMod, а уже после полной загрузки системы.
Итак, что мы можем поместить в автозагрузку? Например, скрипт запуска демона ADB в сетевом режиме:
#!/system/bin/sh
setprop service.adb.tcp.port 5555
stop adbd
start adbd
Для подключения к нему с ПК набираем такую команду:
$ adb connect IP-смартфона
Также мы можем применить некоторые оптимизации подсистемы виртуальной памяти:
#!/system/bin/sh
echo "4096" > /proc/sys/vm/min_free_kbytes
echo "0" > /proc/sys/vm/oom_kill_allocating_task;
echo "0" > /proc/sys/vm/panic_on_oom;
echo "0" > /proc/sys/vm/laptop_mode;
echo "0" > /proc/sys/vm/swappiness
echo "50" > /proc/sys/vm/vfs_cache_pressure
echo "90" > /proc/sys/vm/dirty_ratio
echo "70" > /proc/sys/vm/dirty_background_ratio
Ну или подогнать механизм lowmemorykiller (автоматическое убийство фоновых приложений при нехватке памяти) под наши нужды:
#!/system/bin/sh
echo "2048,3072,6144,15360,17920,20480" > /sys/module/lowmemorykiller/parameters/minfree
Ну и конечно же, автоматический выбор планировщика процессов:
#!/system/bin/sh
echo "powersave" > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
Все это можно сделать с помощью специализированного софта, но зачем загружать систему дополнительным ПО, которое еще и будет висеть в фоне, когда можно обойтись несколькими простыми скриптами?
Запуск скриптов до и после установки прошивки
Почти каждый, кто устанавливает на свой гаджет стороннюю прошивку, также ставит поверх нее пакет с фирменными приложениями Google (gapps), который включает в себя маркет, YouTube, Gmail и другой софт. Каждый раз, когда происходит обновление прошивки, раздел /system, содержащий ее и gapps, полностью стирается, но приложения Google всегда остаются на месте. Это происходит потому, что, кроме всего прочего, gapps содержит в своем составе специальный скрипт, который размещается в каталоге /system/addon.d/ и запускается консолью восстановления до и после установки прошивки. Этот скрипт делает бэкап и восстановление приложений Google.
Мы можем использовать эту возможность для выполнения наших собственных действий до и после установки прошивки. Вот так, например, выглядит мой скрипт восстановления, который ничего не бэкапит, но подчищает прошивку от мусора сразу после ее установки:
#!/sbin/sh
# Загружаем подсобные функции
. /tmp/backuptool.functions
# Рингтон и звук уведомления, которые должны остаться в системе
RINGTONE=Machina
NOTIFICATION=Argon
case "$1" in
backup)
# Пусто :)
;;
restore)
# Рингтоны, уведомления и звук будильника
cd /system/media/audio/ringtones/
rm [!${RINGTONE}]*.ogg
cd /system/media/audio/notifications/
rm [!${NOTIFICATION}]*.ogg
rm /system/media/audio/alarms/*
# Языки синтеза и офлайн-распознавания речи
rm /system/tts/lang_pico/*
rm -rf /system/usr/srec/config/*
# Приложения
A=/system/app/
rm $A/Email.apk
rm $A/Exchange2.apk
rm $A/LockClock.apk
rm $A/PicoTts.apk
rm $A/Term.apk
rm $A/ThemeChooser.apk
rm $APPS/WAPPushManager.apk
rm $A/LiveWallpapers.apk
rm $A/LiveWallpapersPicker.apk
rm $A/VisualizationWallpapers.apk
A=/system/priv-app/
rm $A/CMUpdater.apk
rm $A/ThemeManager.apk
;;
pre-backup)
# ...
;;
post-backup)
# ...
;;
pre-restore)
# ...
;;
post-restore)
# ...
;;
esac
Скрипт удаляет рингтоны, уведомления, движок синтеза речи и несколько приложений. Все эти действия запускаются в ответ на передачу скрипту опции командной строки restore (это делает консоль восстановления после установки прошивки), однако также предусмотрены и варианты обработки таких опций, как backup, pre-backup, post-backup, pre-restore и post-restore. Здесь это просто заглушки, но если бы мы захотели сделать бэкап некоторых файлов и приложений перед установкой прошивки, мы могли бы добавить их в блок backup, как это сделано в скрипте /system/addon.d/70-gapps.sh:
. /tmp/backuptool.functions
list_files() {
cat <<EOF
app/GoogleContactsSyncAdapter.apk
etc/permissions/com.google.android.maps.xml
etc/permissions/com.google.android.media.effects.xml
...
EOF
}
case "$1" in
backup)
list_files | while read FILE DUMMY; do
backup_file $S/$FILE
done
;;
...
Этот кусок скрипта прекрасно иллюстрирует, как сделать бэкап файлов. Ключевые элементы здесь: функция listfiles, которая при запуске выводит листинг файлов, и функция backupfile, которая является частью консоли восстановления (определена в файле /tmp/backuptool.functions). Она делает бэкап файлов в цикле.
INFO
По словам разработчика mksh, изначально пользовательские версии Android-смартфонов вообще не должны были иметь в своем составе шелл, но после выпуска смартфона для разработчиков HTC (T-Mobile) G1 он фактически стал стандартной частью системы.
Версии Android 2.3 и ниже вместо mksh использовали минималистичный шелл ash, который входит в базовый комплект всех BSD-систем.
Чтобы получить одни и те же скрипты на всех устройствах, можно использовать приложение DropSync или FolderSync (автоматическая синхронизация через Dropbox).
Что еще?
С помощью скриптов в Android можно сделать намного больше, чем бэкапы и настройка параметров системы. Вот, например, скрипт, который просыпается каждые десять минут и, если уровень заряда батареи стал меньше 30%, отключает Wi-Fi и Bluetooth:
#!/system/bin/sh
while true; do
if [ `cat /sys/class/power_supply/battery/capacity` -lt 30 ]; then
svc wifi disable
service call bluetooth_manager 8
fi
sleep 600
done
Чтобы скрипт работал в фоне, достаточно вызвать его следующим образом:
$ script.sh &
А это скрипт, который позволяет быстро заполнять формы, требующие ввода имэйла и пароля (в приложениях и на веб-сайтах):
#!/system/bin/sh
adb shell input text "user@gmail.com"
adb shell input keyevent 23
adb shell input keyevent 20
adb shell input text "ПАРОЛЬ"
adb shell input keyevent 23
adb shell input keyevent 20
Запускать его можно разными способами. Либо перед запуском приложения, установив задержку:
$ sleep 15; sh /sdcard/script.sh
Либо повесить на какое-то событие Tasker, например на взмах смартфоном. Другой вариант — использовать буфер обмена. В Android, чтобы вставить нужный текст в буфер обмена, достаточно выполнить такую команду:
$ service call clipboard 2 i32 1 i32 1 s16 "Этот текст появится в буфере обмена"
Не ахти как удобно, зато работает. Как мы можем использовать такую функциональность? Например, сделать простенький скрипт clip.sh:
#!/system/bin/sh
service call clipboard 2 i32 1 i32 1 s16 "$1"
Соль в том, что скрипт можно вызывать через удаленный ADB либо вообще поместить в /system/etc/init.d/, заменив $1 на нужный текст. Так нужные нам данные всегда будут под рукой, а бесполезный на смартфоне механизм копирования/вставки получит хоть какое-то назначение. Консольные команды можно использовать и для более высокоуровневых операций, например позвонить по указанному номеру:
$ am start -a android.intent.action.CALL tel:123
Или просто открыть окно номеронабирателя с нужным номером:
$ am start -a android.intent.action.DIAL tel:123
Примерно таким же образом можно отправить SMS:
#!/system/bin/sh
am start -a android.intent.action.SENDTO -d sms:$1 --es sms_body "$2" --ez exit_on_sent true
sleep 1
input keyevent 22
sleep 1
input keyevent 66
Скрипт принимает два аргумента: номер телефона и содержимое SMS. После запуска он откроет окно SMS-приложения, вставит в него нужный текст, а затем нажмет кнопку Enter для отправки, после чего окно закроется.
Другие полезные при скриптинге команды:
- Перезагрузка в режим recovery:
$ su -c reboot recovery
- Мягкая перезагрузка (без перезапуска ядра):
$ setprop ctl.stop zygote
- Открыть нужное приложение (в данном примере — «Настройки»):
$ am start -n com.android.settings/com.android.settings.Settings
- Открыть веб-страницу:
$ am start -a android.intent.action.VIEW http://www.google.com
- Сообщить приложениям о низком уровне заряда батареи (есть софт, который при этом снижает свою активность):
$ am broadcast -a android.intent.action.BATTERY_LOW
- Изменить MAC-адрес:
$ ip link set eth0 address 00:11:22:33:44:55
- Активировать вибратор:
$ echo 100 > /sys/devices/virtual/timed_output/vibrator/enable
- Включить фонарик:
$ echo 1 > /sys/devices/platform/flashlight/leds/flashlight/brightness
- Проиграть файл (может не сработать):
$ stagefright -a -o file.mp3
- Отключить указанное приложение (можно организовать цикл для отключения bloatware по списку):
$ pm disable com.google.android.calendar
- Получить список приложений, которые имеют уведомления в строке состояния:
$ dumpsys statusbar | grep StatusBarNotification | awk '{ print $2 }' | cut -d '=' -f2
- Оптимизировать внутренние базы данных с настройками (можно добавить скрипт в автозагрузку, требуется BusyBox):
#!/system/bin/sh for i in `find /data -iname "*.db"`; do sqlite3 $i 'VACUUM;' done
- Переключить Wi-Fi-тизеринг на основной интерфейс (нужно для обмана операторов, которые ограничивают скорость соединения при раздаче интернета по Wi-Fi):
$ settings put global tether_dun_required 0
Вместо выводов
Для кого-то все описанное в статье может показаться несколько надуманным. Дескать, все это можно сделать с помощью стандартного софта и Tasker. Но зачем использовать тяжелый Java-софт там, где нужное действие можно выполнить с помощью простенького скрипта, который не занимает лишней памяти и может быть легко перенесен на другое устройство? Скрипты удобны, просты, быстро отрабатывают и дают возможность тонкой настройки под себя.
Termux, a temrminal emulator, could be an good Linux Deploy alternative. You can manually install Ubuntu chroot environment on Android phone without using Linux Deploy .
Ubuntu 22.04 in chroot envrionment running on Android 12, Sony Xperia 5 II.
1. Install Busybox for Android 12+ devices
Install Fox’s Magisk Module Manager
Search “Magisk Builtin Busybox” and install the module.
2. Download Ubuntu rootfs
Please install Termux first.
- Open Termux, install tsu and pulseaudio
- Create a directory at
/data/local/tmp
for chroot envrionment
- Unzip the archive. And create a mountpoint for sdcard (internal storage)
- Create a startup script.
- Type these:
- Make the script executable
- Start the script. Then you should see the prompt becomes
[email protected]
. To logout, typeexit
.
3. Install applications
- Before updating packages, execute the following commands to solve
apt cannot resolve host
errors
- Then fix
Download is performed unsandboxed as root
warning:
- Now you can update packages:
- Install common tools:
3.1. Start SSH service in chroot
- Install OpenSSH
- Change root password
- Start SSH services.
You can check the IP address of the phone by executing ifconfig
. Then you can SSH into the phone from your PC.
3.2. Install XFCE4 and VNC server
- Install XFCE4 desktop environment:
- Install VNC server
- Setup password for VNC server
- Create a startup script for VNC server:
vim ~/.vnc/xstartup
- Make it executable
- Start VNC server. Then open AVNC and type
localhost:5901
to view the desktop enviromment.
- If the terminal failed to luanch, try to mount devpts
- Remember to stop VNC server after closing AVNC app:
3.3. Start PulseAudio
3.4. Add a normal user
- Setup the timezone to
Asia/Taipei
- Add a new user named
user
- Execute:
vi sudoers
. Adduser
to sudoers
3.5. Do not install Snap packages
When you type sudo apt install firefox
, Ubuntu will try to download snap version of Firefox. However, Snap will not work in chroot because there is no systemd on Android. Therefore, you should avoid installing snap packages.
For exmaple, you can add Mozilla’s ppa to install firefox-esr
instead of fireofx
:
4. References
If this article is helpful to you please consider supporting me.
Leave a comment
Choose the commenting system you like.
Please login to your Github account to leave a comment. You can post codes here for discussion. For images, please upload to Imgur and copy links. Your comments would be visible to everyone on Github Discussions.
Android и дистрибутивы Linux не просто родственные ОС — они основаны на одном ядре и на низком уровне очень похожи. В Android работает большинство команд Linux, сюда можно установить bash, писать скрипты и даже запускать серверы. Установив на смартфон SSH, ты можешь ходить на него с компа и даже использовать rsync для синхронизации файлов. Обо всем этом мы и поговорим сегодня.
ADB
Начнем с излюбленного инструмента всех продвинутых пользователей Android — ADB. Мы уже много раз писали о нем, однако здесь просто обязаны повториться. Итак, ADB расшифровывается как Android Debug Bridge, и по сути это нечто вроде системы управления смартфоном с компа. ADB позволяет устанавливать и запускать софт, перемещать файлы с устройства и на устройство и выполнять многие другие задачи.
// Ubuntu/Debian/Mint
$ sudo apt-get install adb
// Arch Linux
$ sudo pacman -S android-tools android-udev
Далее необходимо подключить смартфон к компу и начать отдавать команды.
Получение списка подключенных устройств:
$ adb devices
Установка на подключенное устройство APK:
$ adb install file.apk
Перемещение файла на устройство:
$ adb push файл /sdcard/
Скачивание файла с устройства:
$ adb pull /sdcard/DCIM/Camera/photo.jpg photo.jpg
$ adb shell screencap /sdcard/screenshot.png
$ adb pull /sdcard/screenshot.png
$ adb shell rm /sdcard/screenshot.png
Нажатие кнопки Power:
$ adb shell input keyevent 26
Ну и конечно же, ADB можно использовать для получения доступа к командной строке смартфона:
$ adb shell
$ adb connect IP-адрес
WARNING
В некоторых дистрибутивах ADB может не работать без прав root. Так происходит из-за отсутствия специальных правил Udev в дистрибутиве. Придется либо устанавливать их как отдельный пакет (android-udev
в Arch Linux), либо настраивать Udev самостоятельно.
Adb-sync
$ adb-sync ~/Music/ /sdcard/Music
А так выполнить ту же синхронизацию, но с удалением файлов, которые были удалены на ПК:
$ adb-sync --delete ~/Music/ /sdcard/Music
$ adb-sync --reverse /sdcard/Download/ ~/Downloads
Adbfs
Еще один интересный способ получить доступ к файлам на устройстве с помощью ADB — использовать adbfs, псевдоФС, которая позволяет смонтировать устройство так, будто это флешка или любой другой накопитель.
Проще всего установить adbfs в Arch Linux. Здесь она есть в AUR, поэтому достаточно выполнить одну команду:
$ yaourt -S adbfs-rootless-git
В Ubuntu и других системах adbfs придется собирать вручную:
$ sudo apt-get install libfuse-dev android-tools-adb
$ git clone git://github.com/spion/adbfs-rootless.git
$ cd adbfs-rootless
$ make
Ну а дальше можно подключать файловую систему:
$ mkdir ~/Android
$ adbfs ~/Android
$ fusermount -u ~/Android
Go-mtpfs
Еще один вариант подключения устройства как файловой системы — go-mtpfs, файловая система, позволяющая передавать данные по протоколу MTP. Именно этот протокол используется в смартфонах без карты памяти.
В Arch Linux установить go-mtpfs очень просто:
$ yaourt -S go-mtpfs
В других дистрибутивах несколько сложнее:
$ sudo apt-get install golang-go libusb1-devel
$ mkdir /tmp/go
$ export GOPATH=/tmp/go
$ go get github.com/hanwen/go-mtpfs
$ go install github.com/hanwen/go-mtpfs
Дальше все так же элементарно, как с adbfs:
$ mkdir ~/Android
$ go-mtpfs ~/Android
$ fusermount -u ~/Android
SSH
Идея использовать ADB для общения с устройством может показаться странной, если учитывать, что для Android существует сразу несколько различных SSH-серверов, не требующих права root. Так оно и есть, во многих случаях SSH будет удобнее и эффективнее. В качестве реализации сервера советую выбрать SimpleSSHD, простую бесплатную обертку для проверенного временем SSH-сервера DropBear для встраиваемых систем. Если у тебя есть root, то рекомендую также установить BusyBox On Rails, набор утилит командной строки, наиболее близкий к дистрибутивам Linux.
$ ssh 192.168.31.236 -p 2222
В момент подключения на экране появится одноразовый пароль, который следует указать в клиенте. Это не очень удобный способ аутентификации, но ты можешь настроить аутентификацию по ключам. Просто переименуй свой открытый ключ (~/.ssh/id_rsa.pub
) в authorized_keys
и положи в каталог ssh на карте памяти смартфона.
Bash, tmux, mc
SSH-сервер на смартфоне сам по себе открывает широкие возможности, но еще шире их можно сделать, если установить на смартфон классические инструменты, такие как bash, tmux и mc. Последний позволит в том числе с удобством ходить по карте памяти и прибраться в случае необходимости.
О том, как установить на смартфон bash, tmux, mc и nano, я уже рассказывал в статье про сервер на базе смартфона, но позволю себе повториться. И сразу предупрежу, что тебе потребуются права root на смартфоне.
Итак, скачиваем Terminal IDE, переименовываем пакет APK в ZIP, распаковываем, находим файл assets/system-2.0.tar.gz.mp3
, переименовываем, убирая расширение mp3, и распаковываем. Внутри будет множество каталогов и файлов, из которых нас интересуют только system/bin
и system/etc/terminfo
. Первый содержит нужные нам утилиты; скопируй те, что тебе пригодятся, в отдельный каталог. Второй необходим для корректного функционирования утилит.
Выбранные утилиты и каталог terminfo скинь на карту памяти смартфона. Затем подключись к нему по SSH и введи следующие команды, чтобы получить возможность модификации системного каталога:
$ su
# mount -o remount,rw /system
Далее скопируй все нужные утилиты в /system/xbin/
и установи на них бит исполнения (на примере bash):
# cp bash /system/xbin/
# chmod 755 /system/xbin/bash
Затем создай файл /sdcard/ssh/.bashrc
, помести в него следующие строки:
export TERMINFO=/sdcard/terminfo
export TMPDIR=/data/local/tmp
export PS1="\u@\h:\w \$ "
Открой настройки SimpleSSHD на смартфоне и в опции Login Shell укажи /system/xbin/bash
, останови и вновь запусти сервер. При следующем входе по SSH откроется bash и будут доступны скопированные тобой утилиты.
Чтобы добиться корректной работы Vim и mc, скопируй на карту памяти также каталоги etc/mc
и etc/vim
, а в файл /sdcard/ssh/.bashrc
добавь строки:
export MC_DATADIR=/sdcard/mc
export VIMRUNTIME=/sdcard/vim
Rsync
SSH-сервер дает нам возможность использовать rsync, мощную утилиту для синхронизации и бэкапа файлов. Rsync позволяет осуществлять быструю двунаправленную синхронизацию файлов между двумя машинами (или машиной и смартфоном, как в нашем случае) с выкачиванием только новых и измененных файлов и возможностью возобновления прерванной синхронизации.
Простейший пример использования rsync в связке со смартфоном:
$ rsync --update --progress -e 'ssh -p 2222' -azv 192.168.31.236:/sdcard/DCIM/Camera ~/Photos
Эта команда скопирует все фотографии со смартфона в каталог ~/Photos
, пропустив те, что уже есть в каталоге. Связка опций -azv
в данном случае означает, что каталог необходимо передать как есть со всеми его подкаталогами и правами доступа (флаг -a
) плюс использовать сжатие (флаг -z
).
Обратная команда — копирование данных с машины на смартфон:
$ rsync --delete --progress -e 'ssh -p 2222' -azv ~/Books 192.168.31.236:/sdcard/Books
Здесь мы использовали флаг --delete
, чтобы удалить файлы, которые были удалены из локального каталога ~/Books
.
По умолчанию при обрыве соединения rsync будет удалять частично переданные файлы. Чтобы этого избежать, можно использовать флаг --partial
, который заставит rsync сохранять недокачанные файлы и возобновить их загрузку при следующем запуске команды.
SSHButton
Ок, к смартфону мы подключились, файлы синхронизировали, но что, если нам нужно обратное SSH-подключение от смартфона к компу? В этом случае подойдет любой из десятков SSH-клиентов для Android (тот же ConnectBot, например), если, конечно, ты готов вводить команды на сенсорной клавиатуре маленького экрана.
SSH button удобно использовать для выключения или усыпления компа (команды systemctl suspend
и halt
), запуска и остановки торрентов, контролирования музыки (например, плеер mocp, о котором я рассказывал в одной из прошлых статей, позволяет управлять собой через командную строку).
Выводы
Использовать Android в связке с Linux действительно удобно. В отличие от Windows здесь не нужны дополнительные драйверы, специальные серверы и прочие странные вещи. В большинстве случаев можно обойтись стандартными для мира Linux SSH и rsync, но в Сети всегда можно найти более интересные инструменты.
Looking to root your Android phone? Learn how to safely and effectively root your device using Windows and Linux in this detailed guide.
Most of us can’t live a day without our phones. Especially for those using Android. After looking at the history of smartphones, we all get amazed at how quickly Google has developed such a powerful Operating system, Android. Today most of us have Android phones and use them as much as we can. Some even want to go beyond and root their Android phones to extend their functionalities.
So if you’re one of them and don’t like requesting somebody to “root Android phone”, here is the article. In this article, I’ll be talking about what is Android rooting, the benefits, and the steps to rooting your Android device.
Table of Contents
Why root Android Phones?
Install Android Oreo
As I mentioned after you root your Android device, you have more control over your smartphone, you can even change the Android version that came preinstalled with your smartphone. For example, I bought NextBit Robin and it shipped with Android 6 preinstalled. What I did, I rooted it and installed Android 7 (Nougat). So I enjoyed the latest version even though the manufacturer had not released Nougat for the device.
Another device I have that I’ve rooted and installed Android Oreo is Oneplus 2. Though there is no news of Android Oreo being released for Oneplus 2. I’m enjoying Android 8 on Oneplus 2.
- Unlock bootloader
- Install custom recovery
- Install the superuser management application
1. Unlock bootloader
The very first step is to unlock the bootloader of your Android phone. And remember that not all device manufacturers will allow you to do this. So before you start this process, check if your device is unlockable.
No warranty after rooting the device
There are three types of phone manufacturers. The first are those who don’t allow you to unlock the bootloader at all. The second are those who allow you to unlock the bootloader but they void the warranty of the device. And the third types of manufacturer are those that allow you to unlock your device bootloader and do not even void any warranty of the device.
So it is very necessary if your particular device model is unlockable and does not void any warranty. There are few manufacturers who don’t void the warranty but they exist. Both my primary phones are awesome. Nextbit Robin, the company has been sold out but it had not void warranty even after unlocking it. Similarly, the Oneplus 2 warranty does not void even after the device is rooted.
Download ADB, Fastboot & phone’s USB drivers
Download ADB and fastboot
ADB for Windows ADB for Linux ADB for Mac
Download and install the device USB driver
In order to detect your device properly by ADB, install your device’s USB drivers on your computer. You can easily find your device drivers from the official website of your smartphone. You can also google your phone model + USB drivers and get the results.
We’re all ready!
And once you’ve downloaded ADB and installed USB drivers, you’re all ready to dive in. Let’s unlock the bootloader.
Enable developer’s options from Android settings
Step 2. Enable OEM unlocking & USB debugging from Settings > System > Developer options > Enable OEM unlocking & USB debugging
Now connect your mobile with your computer.
If your device is not detected then make sure you’ve properly installed USB drivers for your device. When your device is detected, it’s time to unlock the bootloader.
Step 5. Unlock the bootloader.
fastboot oem unlock
And that’s it. Your device bootloader has been unlocked.
Install custom recovery
Second, we’ll install TWRP recovery. Download the recovery from twrp.me. Keep your device connected and reboot your device in the bootloader.
adb reboot bootloader
fastboot flash twrp-3.1.1-0-oneplus2.img
Install superuser
adb reboot recovery
Relax! That’s it. Your device is now rooted and you can do things that you could never do otherwise. You can install the custom ROMs available for your device and make it better and faster.
Conclusion
Frequently Asked Questions
Which Android devices are easy to root?
The ease of rooting Android devices can vary depending on the manufacturer, model, and the specific version of Android running on the device. However, it’s important to note that rooting a device typically voids the manufacturer’s warranty and can potentially lead to security risks or functional issues if not done properly. With that in mind, here are some Android devices that have historically been considered relatively easy to root:
1. Google Pixel and Nexus devices: Google’s own devices, such as the Pixel and Nexus series, have often been popular among the rooting community. They generally have good support from the developer community, making it easier to find rooting methods and custom ROMs.
2. OnePlus devices: OnePlus has gained a reputation for being developer-friendly, and many of their devices have good support for rooting and custom ROMs. However, it’s important to check the specific model and version of Android to ensure compatibility.
3. Xiaomi devices: Xiaomi offers a wide range of devices, and some of them have been known to have good support for rooting. Popular models like the Xiaomi Mi series and Poco series have often been favored by the rooting community.
4. Samsung devices (older models): Certain older Samsung devices, particularly those with Exynos processors, have historically been easier to root compared to their newer counterparts. However, rooting methods can vary between different models and Android versions.
5. HTC devices: HTC devices have traditionally had a strong developer community, making them relatively easier to root. However, their popularity has decreased in recent years.
Why would you root an Android?
What are the risks of rooting a phone?
Rooting a phone comes with certain risks and potential drawbacks. Here are some of the common risks associated with rooting an Android device:
1. Voiding warranty: Rooting usually voids the manufacturer’s warranty of the device. Once you root your phone, the manufacturer may refuse to provide free repairs or support, even for unrelated issues. However, in some cases, unrooting the device may reinstate the warranty.
2. Security vulnerabilities: Rooting bypasses some of the built-in security measures of the Android operating system, exposing your device to potential security risks. Malicious apps or unauthorized modifications to system files can compromise the security of your device and personal data. It’s essential to exercise caution when granting root access to apps and ensure that you only download and install software from trusted sources.
3. Stability and performance issues: Incorrect rooting methods or incompatible modifications can lead to stability and performance problems. System crashes, boot loops, freezes, and other issues may occur if root access is mishandled or if incompatible software is installed. Additionally, certain apps or features that rely on the device’s security mechanisms may no longer function properly on a rooted device.
4. No OTA updates: Once your device is rooted, installing official over-the-air (OTA) updates from the manufacturer may become problematic or impossible. OTA updates typically verify the integrity of the system files and may fail if modifications have been made. To receive official updates, you may need to unroot your device and return it to its original state.
5. Brick risk: While rare, there is a small possibility of bricking your device during the rooting process or when applying custom modifications. “Bricking” refers to rendering the device inoperable, essentially turning it into a “brick.” This can occur due to errors in the rooting process or if you make incorrect modifications to critical system files.
Can you root an Android phone without a computer?
Yes, it is possible to root an Android phone without using a computer. There are several rooting methods available that allow you to root your device directly from the phone itself. However, it’s important to note that the availability and success of these methods can vary depending on the device model, Android version, and specific rooting tools or apps.
Here are a few common methods to root an Android phone without a computer:
how to root android phone without any app
Keep in mind that the process may vary depending on your phone model and Android version. It’s crucial to research and finds specific instructions tailored to your device to ensure a successful root. Additionally, rooting your phone may void the warranty and could potentially lead to security risks if not done correctly.
how to root Android phone without pc
Can I root my phone for free?
Yes, you can root your phone for free. Rooting allows you to gain privileged access to the operating system, giving you more control over your device. There are various methods available for rooting, and many of them can be done without any cost.