Come installo gli strumenti della riga di comando mancanti su un dispositivo Android?


9

Le installazioni Android non hanno sempre tutti gli strumenti che ci si aspetterebbe da un sistema simile a Unix.

Ad esempio, in questo momento ho un dispositivo problematico che non ha l' findutilità CLI. Voglio dire, questo è quello che ottengo mentre in adb shell:

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

Anche:

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

Questo particolare dispositivo esegue Android 5.0 (oltre ad alcune aggiunte proprietarie di LG, immagino), ma la domanda è ovviamente per tutte le versioni di Android.

Esiste una procedura standard per l'installazione di strumenti nativi / CLI (come find) su Android? (Un gestore di pacchetti? ) E, comunque, come farlo nel modo più corretto?



Sì, questo dispositivo è rootato. Ma è interessante conoscere anche modi compatibili non sradicati. :)
Visualizza nome

Risposte:


5

Per dispositivi Android con root

Puoi prendere in considerazione l'installazione dell'app BusyBox di Stephen. Per Play Store, la versione minima di Android supportata dall'app è Android 1.6 ed è un'app ben aggiornata. In sostanza, installa il file binario busybox/system/xbin e posiziona i collegamenti simbolici nella stessa directory per tutte le utility che ha.

Che cos'è BusyBox (non l'app)?

BusyBox combina minuscole versioni di molte comuni utility UNIX in un unico piccolo eseguibile. Fornisce sostituzioni per la maggior parte delle utility che di solito trovi nei file GNU, shellutils, ecc. Le utility in BusyBox hanno generalmente meno opzioni rispetto ai loro cugini GNU con funzionalità complete; tuttavia, le opzioni incluse forniscono le funzionalità previste e si comportano in modo molto simile alle loro controparti GNU. BusyBox fornisce un ambiente abbastanza completo per qualsiasi sistema piccolo o incorporato.

Ecco l'elenco ufficiale delle utility che fornisce. findlo strumento può essere trovato lì.

Un'alternativa competente a BusyBox è Toybox, che ha sostituito Toolbox nella versione Marshmallow.

Che cos'è Toybox ?

Toybox combina molte comuni utility da riga di comando Linux in un unico eseguibile con licenza BSD. È semplice, piccolo, veloce e ragionevolmente conforme agli standard ( POSIX-2008 e LSB 4.1 ).

Ecco l'elenco ufficiale dei supporti toybox di utilità. BusyBox, al momento, sembra supportare più strumenti di Toybox.

Non penso che esista un'app per installare il file binario di Toybox, quindi puoi usare la mia risposta qui ai fini della sua installazione. Si noti che la risposta può essere utilizzata per l'installazione di Toybox e BusyBox. L'unico prerequisito è scaricare il file binario da fonti ufficiali.

Link ufficiali per il download:

Per dispositivi Android non rootati

Non so se esiste un approccio universale per tutte le versioni di Android. Detto questo, per Android 4.0 e versioni successive BusyBox Install (No Root) afferma di funzionare. Potrebbero esserci alcune app terminali fornite con il binario BusyBox. Non ho testato personalmente nessuna di queste app terminali, ma è facile capire che il loro più grande svantaggio è: non puoi farne buon uso o molto usando .

Esiste tuttavia un approccio, che sembra funzionare per qualsiasi versione di Android precedente alla 4.2 (sulla base dei miei test). /data/local/tmpè una directory che può essere modificata shelldall'utente. adb shellti concede la shell remota sul dispositivo e accedi come lo stesso utente.

Tutto quello che devi fare è inserire il binario BusyBox / Toybox /data/local/tmpe creare collegamenti simbolici per i programmi di utilità nella stessa directory. È possibile utilizzare i seguenti passaggi per quello.

(Richiede la configurazione nel PC.)

adb push LOCAL_FILE / data / local / tmp / # sostituisce LOCAL_FILE con il percorso del file binario toybox / busybox nel PC
shell adb
chmod 755 / data / local / tmp / FILE # impostazione delle autorizzazioni appropriate per il file binario push. Sostituisci FILE con il nome del file binario che hai inserito nel primo passaggio. Si consiglia di utilizzare una sola parola come nome con tutte le lettere minuscole
box = / data / local / tmp / FILE # che imposta una variabile locale per l'utilizzo nel passaggio successivo. Sostituire FILE come appropriato
$ box | $ box sed 's / \ / \ n / g' | $ box sed '$ d' | mentre leggi la riga; $ box ln -sf / data / local / tmp / FILE / data / local / tmp / $ line; done # Stiamo eseguendo il binario a cui fa riferimento $ box per elencare tutte le utility, seguite dalla creazione di un elenco e quindi per ogni elemento nell'elenco, stiamo creando un collegamento simbolico in una directory.

Izzy ha raccomandato il modo più semplice per posizionare collegamenti simbolici per il binario BusyBox .

shell adb / data / local / tmp / FILE --install -s / data / local / tmp / # Sostituisci FILE come appropriato. --install -s creerà i collegamenti simbolici desiderati per te in una directory. Il percorso della directory viene fornito accanto ad esso. 

A tutti questi strumenti è ora possibile accedere utilizzando il percorso assoluto /data/local/tmp/TOOL. Sostituisci TOOL con il nome dell'utilità. Esempio di utilizzo della chiamata del comando find:

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

Per sessioni interattive della shell, è possibile aggiungere la posizione di FILE in $ PATH usando il comando export:

export PATH = / data / local / tmp: $ PATH # indica il prefisso / data / local / tmp nel valore esistente di $ PATH. export assicurerebbe che le sotto-shell vedano lo stesso valore in $ PATH

Fatto ciò, ora puoi usare find o un'altra utility BusyBox / Toybox in questo modo:

shell adb 
trova --help

Va notato che le modifiche in $ PATH sono applicabili solo per la sessione di shell corrente. Vuol dire che ogni volta che avvii una shell usando adb, dovresti esportare $ PATH.

Detto questo, non esiste una soluzione solo per Android per sessioni di shell non interattive se non quella di trovare un modo per creare una variabile il cui esistenza e valore persistano oltre l'attuale sessione di shell nel PC, non Android . Esempio:

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)

Gli strumenti che non si trovano in busybox e toybox, dovrai costruirli per Android tu stesso, se non sono già stati creati da qualcuno e pubblicati in un luogo affidabile di cui ti puoi fidare, possono essere scaricati e installati.
Firelord
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.