Як встановити відсутні інструменти командного рядка на пристрій Android?


9

В інсталяціях Android не завжди є всі інструменти, які можна було б очікувати, щоб вони мали систему Unix-подібної.

Наприклад, зараз у мене є проблемний пристрій, який не має findутиліти CLI. Я маю на увазі, ось що я отримую, перебуваючи в adb shell:

$ find
/system/bin/sh: find: not found

Також:

$ /system/bin/toolbox find
find: no such tool

Цей конкретний пристрій працює на Android 5.0 (плюс деякі фірмові доповнення від LG, я думаю), але питання стосується всіх версій Android.

Чи існує стандартна процедура встановлення findна Android системних інструментів / таких, як CLI (наприклад )? ( Менеджер пакунків? ) І, в будь-якому випадку, як це зробити найбільш правильним способом?



Так, цей пристрій укорінений. Але цікаво знати і про непрограні способи, сумісні з корінням. :)
Відобразити ім'я

Відповіді:


5

Для вкорінених пристроїв Android

Ви можете розглянути можливість встановлення програми BusyBox від Stephen. Мінімальна версія Android, що підтримується програмою, на Play Store - це Android 1.6, і це добре оновлений додаток. По суті, він встановлює бінарний файл зайнятої в /system/xbinі розміщує посилання в одному каталозі для всіх утиліт, які він має.

Що таке BusyBox (не додаток)?

BusyBox поєднує крихітні версії багатьох поширених утиліт UNIX в єдиний невеликий виконуваний файл. Він надає заміни для більшості утиліт, які ви зазвичай знаходите у файлових файлах GNU, оболонках і т. Д. Утиліти в BusyBox зазвичай мають менше варіантів, ніж їх повнофункціональні двоюрідні брати GNU; проте включені варіанти забезпечують очікувану функціональність і ведуть себе дуже схоже на своїх колег з GNU. BusyBox забезпечує досить повне середовище для будь-якої невеликої або вбудованої системи.

Ось офіційний список комунальних послуг, які він надає. findінструмент можна знайти там.

Компетентною альтернативою BusyBox є Toybox, який замінив Toolbox у версії Marshmallow.

Що таке Toybox ?

Toybox поєднує багато поширених утиліт командного рядка Linux разом у єдиний виконуваний файл, що має ліцензію BSD. Це просте, невелике, швидке та розумно відповідне стандартам ( POSIX-2008 та LSB 4.1 ).

Ось офіційний список підтримуваних утиліт для іграшок. На даний момент, схоже, BusyBox підтримує більше інструментів, ніж Toybox.

Я не думаю, що додаток для встановлення двійкового Toybox не існує, тому ви можете використовувати тут мою відповідь для цілей його встановлення. Зауважте, що відповідь можна використовувати для встановлення і Toybox, і BusyBox. Єдиною умовою є завантаження бінарного файлу з офіційних джерел.

Офіційні посилання для завантаження:

Для не вкорінених пристроїв Android

Я не знаю, чи існує універсальний підхід для всіх версій Android. Однак, для Android 4.0 та новіших версій BusyBox Install (No Root) претензії працюють. Можливо, є кілька термінальних додатків, які постачаються з бінарними файлами BusyBox. Я особисто не перевіряв жодного такого додатка для терміналів, але легко зрозуміти, що найбільшим їх недоліком є: ви не можете використовувати якісь або багато корисних з них, використовуючи.

Однак існує підхід, який, як видається, працює для будь-якої версії Android вище 4.2 (на основі моїх тестів). /data/local/tmpце каталог, який може редагувати shellкористувач. adb shellнадає віддалену оболонку на пристрої та входить у систему як той самий користувач.

Все, що вам потрібно зробити, - це вставити бінарний файл BusyBox / Toybox /data/local/tmpі створити символьні посилання для утиліт в одному каталозі. Для цього можна скористатися наступними кроками.

(Потрібно налаштування на ПК.)

adb push LOCAL_FILE / data / local / tmp / # замінити LOCAL_FILE на шлях файлу в двійковій іграшці / busbox в ПК
оболонка adb
chmod 755 / data / local / tmp / FILE # встановлення відповідного дозволу на висунутий бінарний файл. Замініть FILE на ім'я бінарного файлу, який ви натиснули на першому кроці. Рекомендується використовувати одне слово як ім'я з усіма малими літерами
box = / data / local / tmp / FILE # налаштування локальної змінної для використання на наступному кроці. Замініть ФАЙЛ відповідно
$ коробка | $ box sed 's / \ / \ n / g' | $ box sed '$ d' | під час читання рядка; зробіть $ box ln -sf / data / local / tmp / FILE / data / local / tmp / $ line; done # Ми виконуємо двійковий код, на який посилається $ box, щоб перерахувати всі утиліти, після чого створити список, а потім для кожного елемента в списку ми створюємо символьну посилання в каталозі.

Іззі рекомендував найпростіший спосіб розміщення символьних посилань для бінарних файлів BusyBox .

adb shell / data / local / tmp / FILE --install -s / data / local / tmp / # Замініть файл відповідно. --install -s створить для вас потрібні посилання в каталозі. Поруч із ним надається шлях до каталогу. 

Тепер до всіх цих інструментів можна отримати абсолютний шлях /data/local/tmp/TOOL. Замініть TOOL на ім'я утиліти. Приклад використання команди пошуку виклику:

adb shell /data/local/tmp/find --help
adb shell /data/local/tmp/FILE find --help   # alternative way of using a tool

Для інтерактивних сесій оболонки ви можете додати розташування файлу до $ PATH за допомогою команди експорту:

експортувати PATH = / data / local / tmp: $ PATH # це префіксація / data / local / tmp у існуюче значення $ PATH. Експорт переконається, що суб-оболонки бачать однакове значення в $ PATH

Зробивши це, тепер ви можете використовувати Find або іншу утиліту BusyBox / Toybox таким чином:

оболонка adb 
знайти - допомогти

Слід зазначити, що зміни в $ PATH застосовні лише для поточного сеансу оболонки. Це означає, що кожного разу, коли ви запускаєте оболонку за допомогою adb, вам доведеться експортувати $ PATH.

Однак, для неінтерактивних сеансів оболонки немає жодного рішення для Android, окрім пошуку способу створення змінної, існування та значення якої зберігатиметься поза поточним сеансом оболонки на вашому ПК, а не на Android . Приклад:

adb shell $lolcat   # $lolcat is a temporary variable in my shell on PC and it was assigned the value /system/xbin/toybox. My bash shell is replacing $lolcat with its value and then passing it to adb shell (or you can say, it first expanded the variable and then executed the whole command)

Інструменти, які не знайдені у завантаженому ящику та іграшці, вам доведеться створити їх для Android самостійно, якщо їх ще не створив хтось і розмістив у надійному місці, якому ви можете довіряти, можна завантажити та встановити.
Firelord
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.