Comment installer les outils de ligne de commande manquants sur un appareil Android?

9

Les installations Android ne disposent pas toujours de tous les outils que l'on s'attendrait à avoir sur un système de type Unix.

Par exemple, en ce moment, j'ai un périphérique problématique qui n'a pas d' findutilitaire CLI. Je veux dire, c'est ce que je reçois en adb shell:

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

Aussi:

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

Cet appareil particulier fonctionne sous Android 5.0 (plus quelques ajouts propriétaires de LG, je suppose), mais la question concerne bien sûr toutes les versions d'Android.

Existe-t-il une procédure standard pour installer des outils natifs / CLI (tels que find) sur Android? (Un gestionnaire de paquets? ) Et, de toute façon, comment le faire de la manière la plus correcte?

Afficher un nom
la source
Oui, cet appareil est enraciné. Mais il est intéressant de connaître également les moyens compatibles avec les racines. :)
Afficher le nom le

Réponses:

5

Pour les appareils Android rootés

Vous pouvez envisager d'installer l' application BusyBox par Stephen. Par Play Store, la version minimale d'Android prise en charge par l'application est Android 1.6 et c'est une application bien mise à jour. En substance, il installe le binaire busybox dans /system/xbinet place les liens symboliques dans le même répertoire pour tous les utilitaires dont il dispose.

Qu'est-ce que BusyBox (pas l'application)?

BusyBox combine de minuscules versions de nombreux utilitaires UNIX courants en un seul petit exécutable. Il fournit des remplacements pour la plupart des utilitaires que vous trouverez habituellement dans les fichiers GNU, shellutils, etc. Les utilitaires dans BusyBox ont généralement moins d'options que leurs cousins ​​GNU complets; cependant, les options incluses fournissent les fonctionnalités attendues et se comportent très bien comme leurs homologues GNU. BusyBox fournit un environnement assez complet pour tout petit système ou système embarqué.

Voici la liste officielle des utilitaires qu'il fournit. findoutil peut être trouvé là-bas.

Une alternative compétente à BusyBox est Toybox, qui a remplacé Toolbox dans la version Marshmallow.

Qu'est-ce que Toybox ?

Toybox combine de nombreux utilitaires de ligne de commande Linux communs en un seul exécutable sous licence BSD. C'est simple, petit, rapide et raisonnablement conforme aux normes ( POSIX-2008 et LSB 4.1 ).

Voici la liste officielle des utilitaires que Toybox prend en charge. BusyBox, pour le moment, semble prendre en charge plus d'outils que Toybox.

Je ne pense pas qu'il existe une application pour installer le binaire Toybox, vous pouvez donc utiliser ma réponse ici pour son installation. Notez que la réponse peut être utilisée pour l'installation de Toybox et BusyBox. La seule condition préalable est de télécharger le binaire à partir de sources officielles.

Liens de téléchargement officiels:

Pour les appareils Android non rootés

Je ne sais pas s'il existe une approche universelle pour toutes les versions d'Android. Cela dit, pour Android 4.0 et supérieur, BusyBox Install (No Root) prétend fonctionner. Certaines applications de terminal peuvent être fournies avec le binaire BusyBox. Je n'ai personnellement testé aucune de ces applications de terminal, mais il est facile de comprendre que leur plus gros inconvénient est: vous ne pouvez pas en faire bon usage ou beaucoup en utilisant .

Il existe cependant une approche qui semble fonctionner pour toute version Android supérieure à 4.2 (sur la base de mes tests). /data/local/tmpest un répertoire qui peut être édité par l' shellutilisateur. adb shellvous accorde le shell distant sur l'appareil et vous connecte en tant que même utilisateur.

Tout ce que vous avez à faire est de mettre le binaire BusyBox / Toybox dans /data/local/tmpet de créer des liens symboliques pour les utilitaires dans le même répertoire. Vous pouvez utiliser les étapes suivantes pour cela.

(Nécessite configuration sur PC.)

adb pousser LOCAL_FILE / data / local / tmp / # remplacer LOCAL_FILE par le chemin de fichier du toybox / busybox binaire dans PC
adb shell
chmod 755 / data / local / tmp / FILE # définissant l'autorisation appropriée sur le fichier binaire poussé. Remplacez FILE par le nom du binaire que vous avez poussé à la première étape. Il est recommandé d'utiliser un seul mot comme nom avec toutes les lettres minuscules
box = / data / local / tmp / FILE # configuration d'une variable locale à utiliser à l'étape suivante. Remplacez FILE selon le cas
$ box | $ box sed 's / \ / \ n / g' | $ box sed '$ d' | pendant la lecture de la ligne; faire $ box ln -sf / data / local / tmp / FILE / data / local / tmp / $ line; done # Nous exécutons le binaire référencé par $ box pour lister tous les utilitaires, suivi de la création d'une liste puis pour chaque élément de la liste, nous créons un lien symbolique dans un répertoire.

Izzy a recommandé la manière la plus simple de placer des liens symboliques pour le binaire BusyBox .

shell adb / data / local / tmp / FILE --install -s / data / local / tmp / # Remplacez FILE comme il convient. --install -s créera les liens symboliques souhaités pour vous dans un répertoire. Le chemin du répertoire est fourni à côté. 

Tous ces outils sont désormais accessibles via le chemin absolu /data/local/tmp/TOOL. Remplacez TOOL par le nom de l'utilitaire. Exemple d'utilisation de l'appel de la commande find:

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

Pour les sessions shell interactives, vous pouvez ajouter l'emplacement de FILE dans $ PATH à l'aide de la commande d'exportation:

export PATH = / data / local / tmp: $ PATH # c'est le préfixe / data / local / tmp dans la valeur existante de $ PATH. l'exportation ferait en sorte que les sous-shells voient la même valeur dans $ PATH

Cela fait, vous pouvez maintenant utiliser find ou un autre utilitaire BusyBox / Toybox de cette manière:

adb shell 
trouver --help

Il est à noter que les modifications de $ PATH ne s'appliquent qu'à la session shell actuelle. Cela signifie que chaque fois que vous lancez un shell en utilisant adb, vous devez exporter $ PATH.

Cela dit, il n'y a pas de solution Android uniquement pour les sessions shell non interactives autre que de trouver un moyen de créer une variable dont l'existence et la valeur persisteraient au-delà de la session shell actuelle sur votre PC, pas Android . Exemple:

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)
Seigneur du feu
la source
Les outils que l'on ne trouve pas dans busybox et toybox, vous devrez les créer vous-même pour Android, s'ils ne sont pas déjà construits par quelqu'un et affichés dans un endroit digne de confiance auquel vous pouvez faire confiance, peuvent être téléchargés et installés.
Firelord