the - install android build tools
¿Cómo instalar Android SDK Build Tools en la línea de comandos? (18)
Sin embargo, es demasiado lento en la ejecución
Sí, he tenido el mismo problema. Algunas de las descargas de archivos son extremadamente lentas (o al menos lo 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 las herramientas de construcción de carpetas, y quiero que sea aapt y apkbuilder, ya que quiero crear apk desde la línea de comandos sin ant.
¿Lo dejaste correr hasta completarlo?
Una cosa que puedes hacer es filtrar los paquetes que se están descargando usando el -t
.
Por ejemplo:
tools/android update sdk --no-ui -t platform-tool
Cuando intenté esto el otro día, instalé la versión 18.0.0 de las herramientas de compilación. Por alguna razón, la última versión 18.0.1 no está incluida en este filtro y la única forma de obtenerlo fue instalar todo con el interruptor - --all
.
Quiero configurar el entorno de desarrollo de Android desde la línea de comandos y encontrar el siguiente problema:
wget http://dl.google.com/android/android-sdk_r22.0.5-linux.tgz
después de extraer el archivo, ejecute
tools/android update sdk --no-ui
Sin embargo, es demasiado lento en la ejecución
Fetching https://dl-ssl.google.com/android/repository/addons_list-2.xml
El resultado es que nada en las herramientas de construcción de carpetas, y quiero que sea aapt y apkbuilder, ya que quiero crear apk desde la línea de comandos sin ant.
ADB Build-Tools no se descargará automáticamente, mediante el comando de actualización de Android sdk --no-ui
Así que para instalar el tipo Buil-Tool (en consola):
android list sdk --all
Recuerde el número que aparece antes del elemento y ejecute lo siguiente:
android update sdk -u --all --filter <number>
los comandos deben escribirse en / YourFolder / android-sdk-linux / tools
También para carpeta remota (servidor abierto por ssh, por ejemplo) escriba:
**./android** list sdk --all
**./android** update sdk -u --all --filter <number>
Para la lista simple de tipos de paquetes ADB 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
Acabo de pasar un buen rato haciendo que las dependencias de Android SDK se instalen a través de la línea de comandos y, dado que la documentación que viene con las herramientas y en línea es lamentable, pensé que publicaría lo que descubrí aquí.
Estoy trabajando con android sdk r24.4.1
para linux
. Hay dos comandos que puede ejecutar para listar los paquetes disponibles:
android list sdk
y lo más exhaustivo:
android list sdk --all
¡Los números de paquete para paquetes específicos difieren para cada comando anterior! Por ejemplo, el anterior lista el paquete API 23.1 revision 3
como paquete #3
y el último lo muestra como #29
.
Ahora, hay dos maneras diferentes de instalar usando el comando de Android.
tools/android update sdk --no-ui --filter <package number>
y
tools/android update sdk -u -a -t <package number>
Dado que los comandos de instalación pueden tomar el paquete # como parámetro, ¿qué número de paquete utiliza? 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 la 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.
Acabo de tener este problema, así que finalmente escribí una solución de 1 línea de bash dirty 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/'')
Como se indica en otras respuestas, las herramientas de compilación requieren que se instale la --all
. También es mejor usar un indicador de filtro -t
para evitar instalar TODOS los paquetes, pero no hay forma de filtrar todas las herramientas de compilación.
Ya hay solicitudes de funciones para estos dos puntos en el rastreador de errores de AOSP. Siéntase libre de votar por ellos, esto podría hacer que sucedan algún día:
Como se mencionó 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 desatendidas o con script. Hombre para --filter
opción de --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.
De forma predeterminada, el Administrador de SDK de la línea de comandos no incluye las herramientas de compilación en la lista. Están en la categoría "obsoleta". 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 <package no.>
Donde -u significa --no-ui, -a significa --todo y -t significa --filter.
Si necesitas instalar varios paquetes haz:
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 anterior
Descargue el SDK de Android desde developer.android.com (actualmente es un archivo de 149 MB para el sistema operativo Windows). Cabe destacar que Android ha eliminado la GUI de sdkmanager, pero tiene una versión de línea de comandos del sdkmanager en la carpeta bin que se encuentra dentro de la carpeta de herramientas.
- 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 comandos aquí. Shift + clic derecho >> abrir la línea de comando aquí.
- Cuando se abra la línea de comandos, escriba sdkmanager, haga clic en Entrar.
- Luego ejecute el tipo sdkmanager (espacio), doble guión (-), escriba list Sdkmanager --list (esto enumera todos los paquetes en el administrador de SDK)
- Escriba sdkmanager (espacio) y luego el nombre del paquete, presione enter. P.ej. sdkmanager platform-tools (presione enter) Se cargará el acuerdo de licencia. Con opciones (y / n). Ingrese y para aceptar y se descargará el paquete que especificó.
Espero que esto ayude. :)
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
- obtenga una lista de números separados por comas que son los índices de los paquetes de herramientas de compilación en el resultado del comando
android list sdk --all
deandroid list sdk --all
(ignorando paquetes obsoletos). - siga lanzando ''y''s'' en la terminal cada pocos milisegundos para aceptar las licencias.
Intenté esto para actualizar todo, y funcionó!
echo y | $ANDROID_HOME/tools/android update sdk --no-ui
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 el script debe responder a todas las y/n
licencia de 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 recibas, todas esas respuestas serán respondidas. Este bucle while/sleep
parece una simulación del comando yes , y de hecho lo es, bueno, casi . El problema con yes
es que inunda stdout 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 ninguna opción de tiempo de espera de ningún tipo. Se "contaminará" la salida estándar y la secuencia de comandos no se quejará de la entrada incorrecta. La solución es poner un retraso entre el envío de ''y''
a la salida estándar, y eso es exactamente lo while/sleep
hace combo while/sleep
.
expect
no está disponible de forma predeterminada en algunas distribuciones de Linux y no tenía forma de instalarlo como parte de mis scripts de CI, así que tuve que usar la solución más genérica y nada puede ser más genérico que un simple script de bash, ¿verdad?
De hecho, escribí un blog sobre esto ( NSBogan ), compruébalo para obtener más detalles aquí si estás interesado.
La versión 25.2.3 (y superior) del paquete de Android SDK Tools
contiene una nueva herramienta, sdkmanager , que simplifica esta tarea de instalación de herramientas de compilación desde la línea de comandos.
Se encuentra en la android_sdk/tools/bin
.
Uso (de la documentation ):
sdkmanager packages [options]
El argumento de los
packages
es una ruta de estilo SDK, 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 citas.
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 options , por ejemplo, forzar 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 el indicador --help
. En mi máquina (Mac), la salida es la siguiente:
alex@mbpro:~/sdk/tools/bin$ ./sdkmanager --help
Usage:
sdkmanager [--uninstall] [<common args>] /
[--package_file <package-file>] [<packages>...]
sdkmanager --update [<common args>]
sdkmanager --list [<common args>]
In its first form, installs, or uninstalls, or updates packages.
<package> is a sdk-style path (e.g. "build-tools;23.0.0" or
"platforms;android-23").
<package-file> 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=<sdkRootPath>: Use the specified SDK root instead of the SDK containing this tool
--channel=<channelId>: Include packages in channels up to <channelId>.
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=<http | socks>: Connect via a proxy of the given type.
--proxy_host=<IP or DNS address>: IP or DNS address of the proxy to use.
--proxy_port=<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.
Las herramientas de construcción no se pudieron descargar automáticamente de manera predeterminada, como dijo Nate en la publicación https://.com/a/19416222/1104031 .
Pero escribí una pequeña herramienta que hace todo por ti.
Utilicé la herramienta "expect" como danb en la publicación https://.com/a/17863931/1104031 . Solo necesitas android-sdk y python27
, expect
.
Este script instalará todas las herramientas de compilación, todos los sdks y todo lo que necesita para la compilació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)
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
Si tienes instalado sdkmanager
(estoy usando MAC)
ejecute sdkmanager --list
para listar los paquetes disponibles.
Si desea instalar herramientas de compilación, copie la versión preferida de la lista de paquetes disponibles.
Para instalar la versión preferida ejecute
sdkmanager "build-tools;27.0.3"
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
Una gran fuente de información que encontré al intentar instalar todo lo relacionado con el SDK de Android desde la línea de comandos fue this 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 el 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
actualización de Android SDK
Este comando actualizará e instalará todas las últimas versiones de las herramientas de SDK Tools, Build Tools, SDK platform.
Es un trabajo para mí.