¿Cómo instalar las herramientas de comstackción de Android SDK en la línea de comandos?

Quiero configurar el entorno de desarrollo de Android desde la línea de comandos, y encuentro el siguiente problema:

wget http://dl.google.com/android/android-sdk_r22.0.5-linux.tgz 

después de extraer el archivo, ejecuta

 tools/android update sdk --no-ui 

Sin embargo, es muy lento en la ejecución

 Fetching https://dl-ssl.google.com/android/repository/addons_list-2.xml 

El resultado es que nada en la carpeta comstackción-tools, y quiero es aapt y apkbuilder, ya que quiero comstackr apk desde la línea de comandos sin ant.

De forma predeterminada, el Administrador de SDK desde la línea de comandos no incluye las herramientas de comstackción en la lista. Están en la categoría “obsoleto”. Para ver todas las descargas disponibles, use

 android list sdk --all 

Y luego para obtener uno de los paquetes en esa lista desde la línea de comando, use:

 android update sdk -u -a -t  

Donde -u significa –no-ui, -a significa –all y -t significa –filter.

Si necesita instalar varios paquetes, haga lo siguiente:

  android update sdk -u -a -t 1,2,3,4, ..., n 

Donde 1,2, …, n es el número de paquete listado con el comando de lista de arriba

Como se menciona en otras respuestas, puede usar la opción --filter para limitar los paquetes instalados:

android update sdk --filter ...

Las otras respuestas no mencionan que puede usar identificadores de cadena constantes en lugar de índices (que cambiarán) para las opciones de filtro. Esto es útil para instalaciones sin supervisión o con guiones. Hombre para la opción --filter :

… Esto también acepta los identificadores devueltos por ‘list sdk –extended’.

android list sdk --all --extended :

 Packages available for installation or update: 97 ---------- id: 1 or "tools" Type: Tool Desc: Android SDK Tools, revision 22.6.2 ---------- id: 2 or "platform-tools" Type: PlatformTool Desc: Android SDK Platform-tools, revision 19.0.1 ---------- id: 3 or "build-tools-19.0.3" Type: BuildTool Desc: Android SDK Build-tools, revision 19.0.3 

Luego puede usar los ID de cadena como las opciones de filtro para especificar con precisión las versiones que desea:

android update sdk --filter tools,platform-tools,build-tools-19.0.3 etc.

La versión 25.2.3 (y posteriores) del paquete de Android SDK Tools de Android SDK Tools contiene una nueva herramienta, sdkmanager , que simplifica la tarea de instalar herramientas de comstackción desde la línea de comandos.
Se encuentra en la android_sdk/tools/bin .

Uso (de la documentación ):

 sdkmanager packages [options] 

El argumento packages es una ruta estilo SDK, envuelta entre comillas (por ejemplo, "build-tools;25.0.0" o "platforms;android-25" ). Puede pasar varias rutas de paquetes, separadas por un espacio, pero cada una debe estar envuelta en su propio conjunto de comillas.

Ejemplo de uso (en mi Mac):

 alex@mbpro:~/sdk/tools/bin$ ls ../../build-tools/ 25.0.0/ alex@mbpro:~/sdk/tools/bin$ ./sdkmanager "build-tools;25.0.2" done alex@mbpro:~/sdk/tools/bin$ ls ../../build-tools/ 25.0.0/ 25.0.2/ 

También puede especificar varias opciones , por ejemplo, para obligar a todas las conexiones a usar HTTP ( --no_https ), o para usar el servidor proxy ( --proxy_host=address y --proxy_port=port ).

Para verificar las opciones disponibles, use la bandera --help . En mi máquina (Mac), la salida es la siguiente:

 alex@mbpro:~/sdk/tools/bin$ ./sdkmanager --help Usage: sdkmanager [--uninstall] [] \ [--package_file ] [...] sdkmanager --update [] sdkmanager --list [] In its first form, installs, or uninstalls, or updates packages.  is a sdk-style path (eg "build-tools;23.0.0" or "platforms;android-23").  is a text file where each line is a sdk-style path of a package to install or uninstall. Multiple --package_file arguments may be specified in combination with explicit paths. In its second form (with --update), currently installed packages are updated to the latest version. In its third form, all installed and available packages are printed out. Common Arguments: --sdk_root=: Use the specified SDK root instead of the SDK containing this tool --channel=: Include packages in channels up to . Common channels are: 0 (Stable), 1 (Beta), 2 (Dev), and 3 (Canary). --include_obsolete: With --list, show obsolete packages in the package listing. With --update, update obsolete packages as well as non-obsolete. --no_https: Force all connections to use http rather than https. --proxy=: Connect via a proxy of the given type. --proxy_host=: IP or DNS address of the proxy to use. --proxy_port=: Proxy port to connect to. * If the env var REPO_OS_OVERRIDE is set to "windows", "macosx", or "linux", packages will be downloaded for that OS. 

ADB Build-Tools no se descargará automáticamente, por comando android update sdk –no-ui

Entonces, para instalar el tipo Buil-Tool (en la consola):

 android list sdk --all 

Recuerde el número que figura antes del artículo y ejecute lo siguiente:

 android update sdk -u --all --filter  

los comandos deben escribirse en / YourFolder / android-sdk-linux / tools

También para la carpeta remota (servidor abierto por ssh por ejemplo) escriba:

 **./android** list sdk --all **./android** update sdk -u --all --filter  

Para una lista simple de paquetes ADB, escriba en la terminal:

 android list sdk 

para instalar todos los paquetes:

 android update sdk --no-ui 

O con filtros (la coma es separador):

 android update sdk --no-ui --filter 3,5,8,14 

Una gran fuente de información que encontré al intentar instalar todo lo relacionado con Android SDK desde la línea de comandos, fue este Dockerfile. Dentro del Dockerfile puede ver que el autor ejecuta un solo comando para instalar platform tools y build tools sin ninguna otra interacción. En el caso de que OP haya presentado, el comando se adaptaría a:

 echo y | $ANDROID_HOME/tools/android update sdk --all --filter build-tools-21.1.0 --no-ui 

Solo me costó mucho instalar las dependencias de SDK de Android a través de la línea de comandos y, dado que la documentación que viene con las herramientas y en línea son lamentablemente deficientes, pensé en publicar lo que descubrí aquí.

Estoy trabajando con android sdk r24.4.1 para linux . Hay dos comandos que puede ejecutar para enumerar los paquetes disponibles:

android list sdk

y el más exhaustivo:

android list sdk --all

¡Los números de paquete para paquetes específicos difieren para cada comando anterior! Por ejemplo, el primero enumera el paquete API 23.1 revision 3 como paquete n #3 y el último lo incluye como n #29 .

Ahora, hay dos maneras diferentes de instalar usando el comando de Android.

tools/android update sdk --no-ui --filter

y

tools/android update sdk -u -a -t

Dado que los comandos de instalación pueden tomar el paquete # como parámetro, ¿qué número de paquete usas? Después de mucha búsqueda en línea y prueba y error, descubrí que

android update sdk --no-ui --filter usa los números de paquete de la android list sdk

y

android update sdk -u -a -t usa los números de paquete de android list sdk --all

En otras palabras, para instalar API 23.1 revision 3 puede hacer lo siguiente:

android update sdk --no-ui --filter 3

o

android update sdk -u -a -t 29

Loco, pero funciona.

La mayoría de las respuestas parecen ignorar el hecho de que es posible que deba ejecutar la actualización en un entorno sin cabeza sin derechos de superusuario, lo que significa que la secuencia de comandos tiene que responder a todas las y/n licencia y/n automáticamente.

Aquí está el ejemplo que hace el truco.

 FILTER=tool,platform,android-20,build-tools-20.0.0,android-19,android-19.0.1 ( sleep 5 && while [ 1 ]; do sleep 1; echo y; done ) \ | android update sdk --no-ui --all \ --filter ${FILTER} 

No importa cuántas solicitudes reciba, se responderá a todas. Este ciclo while/sleep parece a la simulación del comando yes , y de hecho lo es, bueno casi . El problema con el yes es que inunda el estándar con 'y' y prácticamente no hay demora entre el envío de esos caracteres y la versión con la que tuve que lidiar no tenía opción de tiempo de espera de ningún tipo. Se “contaminará” stdout y el script fallará quejándose de entrada incorrecta. La solución es poner una demora entre enviar 'y' a stdout, y eso es exactamente lo while/sleep hace el combo while/sleep .

expect no está disponible por defecto en algunas distribuciones de Linux y no tenía forma de instalarlo como parte de mis scripts CI, así que tuve que usar la solución más genérica y nada puede ser más genérico que el simple script bash, ¿verdad?

De hecho, publiqué sobre esto ( NSBogan ), échale un vistazo para obtener más detalles aquí si estás interesado.

Sin embargo, es muy lento en la ejecución

Sí, he tenido el mismo problema. Algunas de las descargas de archivos son extremadamente lentas (o al menos han sido en los últimos días). Si quieres descargar todo, no hay mucho que puedas hacer al respecto.

El resultado es que nada en la carpeta comstackción-tools, y quiero es aapt y apkbuilder, ya que quiero comstackr apk desde la línea de comandos sin ant.

¿Lo dejaste funcionar hasta su finalización?

Una cosa que puede hacer es filtrar los paquetes que se están descargando utilizando el -t .

Por ejemplo:

 tools/android update sdk --no-ui -t platform-tool 

Cuando probé esto el otro día, obtuve la versión 18.0.0 de las herramientas de comstackción instaladas. Por alguna razón, la última versión 18.0.1 no está incluida en este filtro y la única forma de obtenerla era instalar todo con el parámetro --all .

Acabo de tener este problema, así que finalmente escribí una solución sucia bash de 1 línea leyendo y analizando la lista de herramientas disponibles:

  tools/android update sdk -u -t $(android list sdk | grep 'Android SDK Build-tools' | sed 's/ *\([0-9]\+\)\-.*/\1/') 

Inspirado en las respuestas de @ i4niac y @ Aurélien Lambert, esto es lo que se me ocurrió

 csv_update_numbers=$(./android list sdk --all | grep 'Android SDK Build-tools' | grep -v 'Obsolete' | sed 's/\(.*\)\- A.*/\1/'|sed '/^$/d'|sed -e 's/^[ \t]*//'| tr '\n' ',') csv_update_numbers_without_trailing_comma=${csv_update_numbers%?} ( sleep 5 && while [ 1 ]; do sleep 1; echo y; done ) \ | ./android update sdk --all -u -t $csv_update_numbers_without_trailing_comma 

Explicación

  • obtener una lista de números separados por comas que son los índices de los paquetes de herramientas de comstackción en el resultado de la android list sdk --all comando (Ignorar paquetes obsoletos).
  • sigue tirando ‘y’s en la terminal cada pocos milisegundos para aceptar las licencias.

Si tiene sdkmanager instalado (estoy usando MAC)

ejecutar sdkmanager --list para listar los paquetes disponibles.

Si desea instalar herramientas de comstackción, copie la versión preferida de la lista de paquetes disponibles.

Para instalar la versión preferida, ejecuta

 sdkmanager "build-tools;27.0.3" 

Prefiero poner un script que instale mis dependencias

Algo como:

 #!/usr/bin/env bash # # Install JUST the required dependencies for the project. # May be used for ci or other team members. # for I in android-25 \ build-tools-25.0.2 \ tool \ extra-android-m2repository \ extra-android-support \ extra-google-google_play_services \ extra-google-m2repository; do echo y | android update sdk --no-ui --all --filter $I ; done 

https://github.com/caipivara/android-scripts/blob/master/install-android-dependencies.sh

Las herramientas de comstackción no se podían descargar automáticamente de forma predeterminada, como dijo Nate en https://stackoverflow.com/a/19416222/1104031 publicación.

Pero escribí una pequeña herramienta que hace todo por ti

Utilicé la herramienta “esperar” como danb en https://stackoverflow.com/a/17863931/1104031 publicación. Solo necesitas android-sdk y python27 , expect .

Este script instalará todas las herramientas de comstackción, todos los SDK y todo lo que necesite para la comstackción automatizada:

 import subprocess,re,sys w = subprocess.check_output(["android", "list", "sdk", "--all"]) lines = w.split("\n") tools = filter(lambda x: "Build-tools" in x, lines) filters = [] for tool in tools: m = re.search("^\s+([0-9]+)-", tool) tool_no = m.group(1) filters.append(tool_no) if len(filters) == 0: raise Exception("Not found build tools") filters.extend(['extra', 'platform', 'platform-tool', 'tool']) filter = ",".join(filters) expect= '''set timeout -1; spawn android update sdk --no-ui --all --filter %s; expect { "Do you accept the license" { exp_send "y\\r" ; exp_continue } eof }''' % (filter) print expect ret = subprocess.call(["expect", "-c", expect]) sys.exit(ret) 

Como se indica en otras respuestas, las herramientas de comstackción requieren que se instale --all flag. También es mejor utilizar un indicador de filtro -t para evitar la instalación de TODOS los paquetes, pero no hay forma de filtrar todas las herramientas de comstackción.

Ya hay solicitudes de características para estos dos puntos en el rastreador de errores AOSP. Siéntete libre de votar por ellos, esto puede hacer que sucedan algún día:

Intenté esto para actualizar todo, ¡y funcionó!

 echo y | $ANDROID_HOME/tools/android update sdk --no-ui 

Tratar

1. Listar todos los paquetes

 android list sdk --all 

2. Instalar paquetes usando el siguiente comando

 android update sdk -u -a -t package1, package2, package3 //comma seperated packages obtained using list command 

Descargue Android SDK de developer.android.com (actualmente es un archivo de 149mb para Windows OS). Vale la pena señalar que Android ha eliminado la GUI sdkmanager, pero tiene una versión de línea de comandos de sdkmanager en la carpeta bin que se encuentra dentro de la carpeta de herramientas.

  1. Cuando esté dentro de la carpeta bin, mantenga presionada la tecla Mayús, haga clic con el botón derecho y luego seleccione Abrir línea de comando aquí. Shift + clic derecho >> abrir línea de comando aquí.
  2. Cuando se abre la línea de comando, escriba sdkmanager, haga clic en entrar.
  3. A continuación, ejecute tipo sdkmanager (espacio), doble guión (-), escriba list Sdkmanager –list (esto enumera todos los paquetes en el administrador de SDK)
  4. Escriba sdkmanager (espacio) luego el nombre del paquete, presione enter. P.ej. Herramientas de plataforma sdkmanager (presionar enter) Cargará el acuerdo de licencia. Con opciones (y / n). Ingrese y para aceptar y descargará el paquete que especificó.

Espero que esto ayude. 🙂

sdk de actualización android

Este comando actualizará e instalará todas las versiones más recientes de SDK Tools, Build Tools, herramientas de la plataforma SDK.

Es trabajo para mi