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


9

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

Por ejemplo, en este momento tengo un dispositivo problemático que no tiene la findutilidad 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 ejecuta Android 5.0 (más algunas adiciones patentadas 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? (¿Un administrador de paquetes? ) Y, de todos modos, ¿cómo hacerlo de la manera más correcta?



Sí, este dispositivo está rooteado. Pero también es interesante saber sobre formas compatibles no desarraigadas. :)
Nombre para mostrar el

Respuestas:


5

Para dispositivos Android rooteados

Puede considerar instalar la aplicación BusyBox de Stephen. Por Play Store, la versión mínima de Android compatible con la aplicación es Android 1.6 y es una aplicación bien actualizada. En esencia, instala el binario busybox/system/xbin y coloca enlaces simbólicos en el mismo directorio para todas las utilidades que tiene.

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

BusyBox combina pequeñas versiones de muchas utilidades comunes de UNIX en un único ejecutable pequeño. Proporciona reemplazos para la mayoría de las utilidades que generalmente se encuentran en GNU Fileutils, Shellutils, etc. Las utilidades en BusyBox generalmente tienen menos opciones que sus primos GNU con todas las funciones; sin embargo, las opciones que se incluyen proporcionan la funcionalidad esperada y se comportan de manera muy similar a sus contrapartes GNU. BusyBox proporciona un entorno bastante completo para cualquier sistema pequeño o integrado.

Aquí está la lista oficial de utilidades que proporciona. findherramienta se puede encontrar allí.

Una alternativa competente a BusyBox es Toybox, que ha reemplazado a Toolbox en la versión Marshmallow.

¿Qué es toybox ?

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

Aquí está la lista oficial de utilidades que toybox admite. BusyBox, en este momento, parece admitir más herramientas que Toybox.

No creo que exista una aplicación para instalar el binario de Toybox, por lo que puede usar mi respuesta aquí para su instalación. Tenga en cuenta que la respuesta se puede utilizar para la instalación de Toybox y BusyBox. El único requisito previo es descargar el binario de fuentes oficiales.

Enlaces oficiales de descarga:

Para dispositivos Android no rooteados

No sé si existe un enfoque universal para todas las versiones de Android. Dicho esto, para Android 4.0 y versiones posteriores, BusyBox Install (No Root) afirma funcionar. Puede haber algunas aplicaciones de terminal que vienen con BusyBox binary. No he probado personalmente ninguna aplicación de terminal de este tipo, pero es fácil entender que su mayor inconveniente es: no se puede hacer un buen uso de ellas con .

Sin embargo, existe un enfoque que parece funcionar para cualquier versión de Android anterior a 4.2 (según mis pruebas). /data/local/tmpes un directorio que puede ser editado por el shellusuario. adb shellle otorga el shell remoto en el dispositivo e inicia sesión como el mismo usuario.

Todo lo que tiene que hacer es poner el binario BusyBox / Toybox /data/local/tmpy crear enlaces simbólicos para las utilidades en el mismo directorio. Puede usar los siguientes pasos para eso.

(Requiere la configuración de en la PC).

adb push LOCAL_FILE / data / local / tmp / # reemplaza LOCAL_FILE con la ruta del archivo de binario toybox / busybox en la PC
adb shell
chmod 755 / data / local / tmp / FILE # configurando el permiso apropiado en el archivo binario insertado. Reemplace ARCHIVO con el nombre del binario que introdujo en el primer paso. Se recomienda usar una sola palabra como nombre con todas las letras minúsculas
box = / data / local / tmp / FILE # configurando una variable local para su uso en el siguiente paso. Reemplace ARCHIVO según corresponda
$ box | $ box sed 's / \ / \ n / g' | $ box sed '$ d' | mientras lee la línea; do $ box ln -sf / data / local / tmp / FILE / data / local / tmp / $ line; done # Estamos ejecutando el binario al que hace referencia $ box para enumerar todas las utilidades, seguido de la creación de una lista y luego para cada elemento de la lista, estamos creando un enlace simbólico en un directorio.

Izzy ha recomendado la forma más sencilla de colocar enlaces simbólicos para el binario BusyBox .

adb shell / data / local / tmp / FILE --instalar -s / data / local / tmp / # Reemplace FILE según corresponda. --install -s creará los enlaces simbólicos deseados para usted en un directorio. La ruta del directorio se proporciona al lado. 

Ahora se puede acceder a todas esas herramientas utilizando la ruta absoluta /data/local/tmp/TOOL. Reemplace TOOL con el nombre de la utilidad. Ejemplo de uso de llamar al comando find:

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 FILE en $ PATH usando el comando de exportación:

export PATH = / data / local / tmp: $ PATH # esto es el prefijo / data / local / tmp en el valor existente de $ PATH. export aseguraría que las subcapas vean el mismo valor en $ PATH

Hecho esto, ahora puede usar find u otra utilidad BusyBox / Toybox de esta manera:

adb shell 
encontrar ayuda

Cabe señalar que los cambios en $ PATH son aplicables solo para la sesión de shell actual. Significa que cada vez que ejecutas un shell usando adb, deberías exportar $ PATH.

Dicho esto, no existe una solución solo para Android para sesiones de shell no interactivas que no sea encontrar una manera de crear una variable cuya existencia y valor persistirían más allá de la sesión de shell actual en su PC, no 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)

Las herramientas que no se encuentran en busybox y toybox, tendrá que compilarlas para Android usted mismo, si alguien ya no las ha creado y publicado en un lugar confiable en el que pueda confiar, puede descargar e instalar.
Señor del fuego
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.