Jak zainstalować brakujące narzędzia wiersza poleceń na urządzeniu z Androidem?

9

Instalacje Androida nie zawsze mają wszystkie narzędzia, których można oczekiwać od systemu uniksowego.

Na przykład teraz mam problematyczne urządzenie, które nie ma findnarzędzia CLI. Mam na myśli to, co otrzymuję podczas adb shell:

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

Również:

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

Na tym konkretnym urządzeniu działa system Android 5.0 (i, jak sądzę, niektóre zastrzeżone dodatki LG), ale pytanie dotyczy oczywiście wszystkich wersji Androida.

Czy istnieje standardowa procedura instalacji narzędzi natywnych / CLI (takich jak find) na Androidzie? ( Menedżer pakietów? ) A zresztą, jak to zrobić w jak najbardziej poprawny sposób?

Wyświetlana nazwa
źródło
Tak, to urządzenie jest zrootowane. Ale warto również wiedzieć o sposobach niezgodnych z rootowaniem. :)
Wyświetl nazwę

Odpowiedzi:

5

Dla zrootowanych urządzeń z Androidem

Możesz rozważyć zainstalowanie aplikacji BusyBox przez Stephen. W Sklepie Play minimalną wersją Androida obsługiwaną przez aplikację jest Android 1.6 i jest to dobrze zaktualizowana aplikacja. Zasadniczo instaluje plik binarny busybox w /system/xbini umieszcza dowiązania symboliczne w tym samym katalogu dla wszystkich narzędzi, które posiada.

Co to jest BusyBox (nie aplikacja)?

BusyBox łączy małe wersje wielu popularnych narzędzi UNIX w jeden mały plik wykonywalny. Zapewnia zamienniki większości narzędzi, które zwykle można znaleźć w plikach GNU, shellutils itp. Narzędzia w BusyBox mają na ogół mniej opcji niż ich kuzyni GNU z pełną funkcjonalnością; jednak zawarte w nim opcje zapewniają oczekiwaną funkcjonalność i zachowują się bardzo podobnie do ich odpowiedników GNU. BusyBox zapewnia dość kompletne środowisko dla każdego małego lub wbudowanego systemu.

Oto oficjalna lista dostępnych narzędzi. findnarzędzie można tam znaleźć.

Kompetentną alternatywą dla BusyBox jest Toybox, który zastąpił Toolbox w wydaniu Marshmallow.

Co to jest Toybox ?

Toybox łączy wiele popularnych narzędzi wiersza poleceń Linuksa w jeden plik wykonywalny na licencji BSD. Jest prosty, mały, szybki i w miarę zgodny ze standardami ( POSIX-2008 i LSB 4.1 ).

Oto oficjalna lista narzędzi, które obsługuje toybox. Obecnie BusyBox wydaje się obsługiwać więcej narzędzi niż Toybox.

Nie sądzę, aby istniała aplikacja do instalacji pliku binarnego Toybox, więc możesz użyć mojej odpowiedzi tutaj w celu jej instalacji. Pamiętaj, że odpowiedzi można użyć do instalacji zarówno Toybox, jak i BusyBox. Jedynym warunkiem jest pobranie pliku binarnego z oficjalnych źródeł.

Oficjalne linki do pobrania:

Dla nierootowanych urządzeń z Androidem

Nie wiem, czy istnieje uniwersalne podejście do wszystkich wersji Androida. To powiedziawszy, dla Androida 4.0 i nowszych BusyBox Install (bez rootowania) twierdzi, że działa. Niektóre aplikacje terminalowe mogą zawierać binarny BusyBox. Nie testowałem osobiście żadnej takiej aplikacji terminalowej, ale łatwo zrozumieć, że ich największą wadą jest to, że nie można z nich korzystać ani korzystać z nich zbyt dobrze za pomocą.

Istnieje jednak podejście, które wydaje się działać dla dowolnej wersji Androida powyżej 4.2 (na podstawie moich testów). /data/local/tmpto katalog, który może edytować shellużytkownik. adb shellzapewnia zdalną powłokę na urządzeniu i loguje się jako ten sam użytkownik.

Wystarczy umieścić plik binarny BusyBox / Toybox /data/local/tmpi utworzyć dowiązania symboliczne dla narzędzi w tym samym katalogu. W tym celu możesz wykonać następujące kroki.

(Wymaga konfiguracja na komputerze).

adb push LOCAL_FILE / data / local / tmp / # zamień LOCAL_FILE na ścieżkę pliku binarnego toybox / busybox na PC
powłoka adb
chmod 755 / data / local / tmp / FILE # ustawienie odpowiednich uprawnień do wypychanego pliku binarnego. Zamień PLIK na nazwę pliku binarnego wypchniętego w pierwszym kroku. Zalecane jest użycie pojedynczego słowa jako nazwy ze wszystkimi małymi literami
box = / data / local / tmp / FILE # konfigurowanie zmiennej lokalnej do użycia w następnym kroku. W razie potrzeby wymień PLIK
$ box | $ box sed 's / \ / \ n / g' | $ box sed '$ d' | podczas odczytu linii; do $ box ln -sf / data / local / tmp / FILE / data / local / tmp / $ line; done # Wykonujemy plik binarny, do którego odwołuje się $ box, aby wyświetlić listę wszystkich programów narzędziowych, a następnie utworzenie listy, a następnie dla każdego elementu na liście tworzymy dowiązanie symboliczne w katalogu.

Izzy zalecił najprostszy sposób umieszczania dowiązań symbolicznych dla binarnego BusyBox .

adb shell / data / local / tmp / FILE --install -s / data / local / tmp / # Zamień PLIK odpowiednio. --install -s utworzy dla ciebie pożądane dowiązania symboliczne w katalogu. Ścieżka do katalogu znajduje się obok niego. 

Do wszystkich tych narzędzi można teraz uzyskać dostęp za pomocą ścieżki bezwzględnej /data/local/tmp/TOOL. Zamień TOOL na nazwę narzędzia. Przykład użycia wywołania polecenia find:

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

W przypadku interaktywnych sesji powłoki możesz dodać lokalizację PLIKU do $ PATH za pomocą polecenia eksportu:

export PATH = / data / local / tmp: $ PATH # to jest prefiks / data / local / tmp do istniejącej wartości $ PATH. eksport upewniałby się, że podpowłoki widzą tę samą wartość w $ PATH

Gotowe, możesz teraz użyć find lub innego narzędzia BusyBox / Toybox w następujący sposób:

powłoka adb 
znajdź --help

Należy zauważyć, że zmiany w $ PATH mają zastosowanie tylko do bieżącej sesji powłoki. Oznacza to, że za każdym razem, gdy uruchamiasz powłokę za pomocą adb, musisz wyeksportować $ PATH.

To powiedziawszy, nie ma rozwiązania tylko dla Androida dla nieinteraktywnych sesji powłoki, oprócz znalezienia sposobu na utworzenie zmiennej, której istnienie i wartość pozostałyby poza bieżącą sesją powłoki na twoim komputerze, a nie dla Androida . Przykład:

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)
Firelord
źródło
Narzędzia, których nie ma w busyboksie i toyboksie, musisz sam je zbudować dla Androida, jeśli nie zostały przez kogoś zbudowane i opublikowane w wiarygodnej lokalizacji, której możesz zaufać, możesz je pobrać i zainstalować.
Firelord