9 votos

¿Cómo instalo las herramientas de línea de comandos que faltan en un dispositivo Android?

Las instalaciones de los Androids no siempre tienen todas las herramientas que uno esperaría tener en un sistema tipo Unix.

Por ejemplo, ahora mismo tengo un dispositivo problemático que no tiene find Utilidad del CLI. Quiero decir, esto es lo que obtengo mientras estoy en adb shell :

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

También:

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

Este dispositivo en particular funciona con Android 5.0 (más algunas adiciones propietarias de LG, supongo), pero la pregunta es para todas las versiones de Android, por supuesto.

¿Existe un procedimiento estándar para instalar herramientas nativas/CLI (como find ), en Android? (A ¿Gestor de paquetes? ) Y, de todos modos, ¿cómo hacerlo de la manera más correcta?

0 votos

Sí, este dispositivo está rooteado. Pero es interesante saber acerca de las formas compatibles no rooteados también :)

7voto

Firelord Puntos 161

Para los dispositivos Android enraizados

Puedes considerar instalar BusyBox aplicación de Stephen. En la Play Store, la versión mínima de Android soportada por la aplicación es Android 1.6 y es una aplicación bien actualizada. En esencia, instala el busybox binario en /system/xbin y lugares symlinks en el mismo directorio para todas las utilidades que tiene.

¿Qué es BusyBox (no la aplicación)?

BusyBox combina versiones diminutas de muchas utilidades comunes de UNIX en un único y pequeño ejecutable. Proporciona reemplazos para la mayoría de las utilidades que normalmente se encuentran en GNU fileutils, shellutils, etc. Las utilidades de BusyBox suelen tener menos opciones que sus primos de GNU con todas las funciones; sin embargo, las opciones que se incluyen proporcionan la funcionalidad esperada y se comportan de forma muy parecida a sus homólogos de GNU. BusyBox proporciona un entorno bastante completo para cualquier sistema pequeño o integrado.

Aquí es la lista oficial de utilidades que proporciona. find herramienta se puede encontrar allí.

Una alternativa competente a BusyBox es Toybox, que ha reemplazado a Toolbox en la liberación de malvaviscos.

¿Qué es Toybox ?

Toybox combina muchas utilidades comunes de línea de comandos de Linux en un único ejecutable con licencia BSD. Es simple, pequeño, rápido y razonablemente compatible con los estándares ( POSIX-2008 y LSB 4.1 ).

Aquí es la lista oficial de los soportes de la caja de juguetes de utilidades. BusyBox, por el momento, parece soportar más herramientas que Toybox.

No creo que exista una aplicación para instalar el binario de Toybox, así que puedes usar mi respuesta aquí para el propósito de su instalación. Tengan en cuenta que la respuesta puede ser usada para la instalación tanto de Toybox como de BusyBox. El único prerrequisito es descargar el binario de las fuentes oficiales.

Enlaces oficiales de descarga:

Para los dispositivos Android no rooteados

No sé si hay un enfoque universal para todas las versiones de Android. Dicho esto, para Android 4.0 y superiores Instalación de BusyBox (sin root) afirma que trabaja. Puede que haya algunas aplicaciones terminales que vienen con el binario BusyBox. No he probado personalmente ninguna aplicación terminal de este tipo, pero es fácil de entender que su mayor inconveniente es: no se puede hacer ningún o gran uso de ellas usando adb .

Sin embargo, hay un enfoque que parece funcionar para cualquier versión de Android por encima de 4.2 (basado en mis pruebas). /data/local/tmp es un directorio que puede ser editado por shell usuario. adb shell le concede el shell remoto en el dispositivo y el acceso como el mismo usuario.

Todo lo que tienes que hacer es poner BusyBox/Toybox binario en /data/local/tmp y crear enlaces simbólicos para las utilidades en el mismo directorio. Para ello, puede utilizar los siguientes pasos.

(Requiere adb en el PC).

adb push LOCAL\_FILE /data/local/tmp/    # replace LOCAL\_FILE with the file path of toybox/busybox binary in PC
adb shell
chmod 755 /data/local/tmp/FILE          # setting appropriate permission on pushed binary file. Replace FILE with the name of the binary you pushed in first step. Recommended is to use a single word as a name with all lower-case letters
box=/data/local/tmp/FILE                # setting up a local variable for usage in next step. Replace FILE as appropriate 
$box | $box sed 's/\\ /\\n/g'| $box sed '$d'| while read line; do  $box ln -sf /data/local/tmp/FILE /data/local/tmp/$line; done   # We're executing the binary referenced by $box to list all utilities, followed by creation of a list and then for each item in the list, we're creating a symlink in a directory.

Izzy ha recomendado lo más una forma sencilla de colocar los enlaces simbólicos de BusyBox binario .

adb shell /data/local/tmp/FILE --install -s /data/local/tmp/  # Replace FILE as appropriate. --install -s will create desired symlinks for you in a directory. Directory's path is provided next to it. 

Ahora se puede acceder a todas esas herramientas usando el camino absoluto /data/local/tmp/TOOL . Sustituye "herramienta" por el nombre de la utilidad. Ejemplo de uso del comando de búsqueda:

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

Para sesiones de shell interactivas, puede agregar la ubicación de ARCHIVO en $PATH usando el comando de exportación:

export PATH=/data/local/tmp:$PATH   # this is prefixing /data/local/tmp into the existing value of $PATH. export would make sure that sub-shells see the same value in $PATH

Hecho eso, ahora puedes usar find u otra utilidad de BusyBox/Toybox de esta manera:

adb shell 
find --help

Es para cabe señalar que Los cambios en $PATH sólo son aplicables a la actual sesión de la cáscara. Significa que cada vez que lanzas un shell usando adb, tendrías que exportar $PATH.

Dicho esto, no hay una solución sólo para Android para las sesiones de shell no interactivas, sino de encontrar una manera de crear una variable cuya existencia y valor persistiría más allá de la sesión de shell actual en tu PC, no en Android . Ejemplo:

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)

0 votos

Las herramientas que no se encuentran en busybox y toybox, tendrás que construirlas tú mismo para Android, si no están ya construidas por alguien y publicadas en un lugar de confianza que puedas descargar e instalar.

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X