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 find
narzę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?
adb
shell
command-line
Wyświetlana nazwa
źródło
źródło
Odpowiedzi:
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/xbin
i umieszcza dowiązania symboliczne w tym samym katalogu dla wszystkich narzędzi, które posiada.Co to jest BusyBox (nie aplikacja)?
Oto oficjalna lista dostępnych narzędzi.
find
narzędzie można tam znaleźć.Kompetentną alternatywą dla BusyBox jest Toybox, który zastąpił Toolbox w wydaniu Marshmallow.
Co to jest Toybox ?
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ąadb.
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/tmp
to katalog, który może edytowaćshell
użytkownik.adb shell
zapewnia zdalną powłokę na urządzeniu i loguje się jako ten sam użytkownik.Wystarczy umieścić plik binarny BusyBox / Toybox
/data/local/tmp
i utworzyć dowiązania symboliczne dla narzędzi w tym samym katalogu. W tym celu możesz wykonać następujące kroki.(Wymaga adb konfiguracja na komputerze).
Izzy zalecił najprostszy sposób umieszczania dowiązań symbolicznych dla binarnego BusyBox .
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:W przypadku interaktywnych sesji powłoki możesz dodać lokalizację PLIKU do $ PATH za pomocą polecenia eksportu:
Gotowe, możesz teraz użyć find lub innego narzędzia BusyBox / Toybox w następujący sposób:
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:
źródło