Pregunta

Ahora tengo que descargar e instalar el SDK de Android abd AVD Manager, y luego instalar las APIs, las herramientas a través de la interfaz de usuario. ¿Hay una manera de automatizar este proceso?

¿Fue útil?

Solución

ACTUALIZACIÓN

Las versiones más recientes introducen sdkmanager, una herramienta de línea de comandos que permite ver, instalar, actualizar y desinstalar paquetes para el SDK de Android.

La herramienta sdkmanager se proporciona en el paquete de herramientas de Android SDK ( 25.2.3 y superior ) y está situado en android_sdk/tools/bin/.

  sdkmanager [--uninstall] [<common args>] [--package_file <file>] [<packages>...]
  sdkmanager --update [<common args>]
  sdkmanager --list [<common args>]
  sdkmanager --licenses [<common args>]

In its first form, installs, or uninstalls, or updates packages.
    By default, the listed packages are installed or (if already installed)
    updated to the latest version.

    --uninstall: uninstalled listed 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), all installed packages are
    updated to the latest version.

In its third form, all installed and available packages are printed
    out.

In its fourth form (with --licenses), show and offer the option to
     accept licenses for all available packages that have not already been
     accepted.

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.

Por lo tanto, para actualizar los paquetes corren

$ sdkmanager --update

para aceptar las licencias

$ yes | sdkmanager --licenses

RESPUESTA OLD

(Por favor nota: El comando androide está en desuso)

Cuanto más cerca se puede llegar a la automatización probablemente es:

$ android update sdk --no-ui

androide proporcionar estas opciones para las actualizaciones automáticas:

Action "update sdk":
  Updates the SDK by suggesting new platforms to install if available.
Options:
  -f --force    Forces replacement of a package or its parts, even if something has been modified
  -u --no-ui    Updates from command-line (does not display the GUI)
  -o --obsolete Installs obsolete packages
  -t --filter   A filter that limits the update to the specified types of packages in the form of
                a comma-separated list of [platform, tool, platform-tool, doc, sample, extra]
  -s --no-https Uses HTTP instead of HTTPS (the default) for downloads
  -n --dry-mode Simulates the update but does not download or install anything

Si quieres a la lista de los paquetes que están disponibles para la instalación puede utilizar

$ android list sdk

y obtendrás una lista ordenada de paquetes, por ejemplo

Packages available for installation or update: 9
   1- ARM EABI v7a System Image, Android API 15, revision 2
   2- Intel x86 Atom System Image, Android API 15, revision 1
   3- Android Support, revision 8
   4- Google AdMob Ads SDK, revision 6
   5- Google Analytics SDK, revision 2
   6- Google Play APK Expansion Library, revision 1
   7- Google Play Billing Library, revision 2
   8- Google Play Licensing Library, revision 2
   9- Google Web Driver, revision 2

También se puede limitar la actualización sólo a un componente deseado si se utiliza la opción --filter

$ android update sdk --filter <component> --no-ui

donde el componente es uno o más de

  • los números devueltos por android list sdk (es decir 1 , también conocido como índice de paquetes )
  • complemento
  • doc
  • adicional
  • plataforma
  • plataforma de herramientas
  • muestra
  • fuente
  • sistema de imagen
  • herramienta

o puede ser una o más específicos identificadores. Por ejemplo, si lo que desea es descargar un pequeño conjunto de paquetes específicos, usted puede hacer esto:

$ android update sdk -u --filter platform-tools,android-16,extra-android-support

y se le acaba de obtener las herramientas de la plataforma, el nivel de API 16 y el apoyo frasco paquete. Esto es muy útil si usted está construyendo una máquina de construcción solamente y tendría que pagar para descargar todo el material extra que nunca uso.

Para ver las opciones disponibles que se pueden utilizar, por ejemplo --help

$ android --help list sdk

       Usage:
       android [global options] list sdk [action options]
       Global options:
  -h --help       : Help on a specific command.
  -v --verbose    : Verbose mode, shows errors, warnings and all messages.
     --clear-cache: Clear the SDK Manager repository manifest cache.
  -s --silent     : Silent mode, shows errors only.

                   Action "list sdk":
  Lists remote SDK repository.
Options:
  -o --obsolete  : Deprecated. Please use --all instead.
  -a --all       : Lists all available packages (including obsolete and
                   installed ones)
     --proxy-host: HTTP/HTTPS proxy host (overrides settings if defined)
     --proxy-port: HTTP/HTTPS proxy port (overrides settings if defined)
  -s --no-https  : Uses HTTP instead of HTTPS (the default) for downloads.
  -e --extended  : Displays extended details on each package
  -u --no-ui     : Displays list result on console (no GUI) [Default: true]

Otros consejos

Esto no funcionó para mí ...

echo "y" | android ....

así que terminé aquí:

expect -c '
set timeout -1   ;
spawn sudo /opt/android-sdk/tools/android update sdk -u; 
expect { 
    "Do you accept the license" { exp_send "y\r" ; exp_continue }
    eof
}
'

Lo utilizo para instalar y actualizar el SDK en Travis-ci

curl --location http://dl.google.com/android/android-sdk_r22.3-linux.tgz | tar -x -z -C $HOME
export ANDROID_HOME=$HOME/android-sdk-linux
export PATH=$PATH:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools
( sleep 5 && while [ 1 ]; do sleep 1; echo y; done ) | android update sdk --no-ui --filter platform-tool,android-19,sysimg-19,build-tools-19.0.1

Para responder a todas las licencias con 'Y', puede intentar esto en el script:

(while :
do
  echo 'y'
  sleep 2
done) | android update sdk -u .....

Para cualquiera que sigue buscando un método para descargar todos los paquetes de Android, he escrito un guión para hacer eso. Se descargará todos los no-Obsoleted paquetes.

#!/binbash
# Install all non-obsolete android sdk packages.
# author: Tai Le Tien (letientai299 at gmail.com)

function install_sdk {
  android update sdk -u -s -a -t "$1"
}

function fetch_non_obsoled_package_indices {
  # Fetch the sdk list using non-https connections
  android list sdk -u -s -a |\
    # Filter obsoleted packages
    sed '/\(Obsolete\)/d' |\
    # Filter to take only the index number of package
    sed 's/^[ ]*\([0-9]*\).*/\1/' |\
    # Remove the empty lines
    sed -n 's/^[^ $]/\0/p'
}

for package_index in  $(fetch_non_obsoled_package_indices)
do
  echo "====================================================================="
  echo "Start to install package:  ${package_index}"
  echo "====================================================================="
  # Auto accept license
  echo -e "y" | install_sdk "${package_index}"
  echo
  echo
done

También puede verlo en mi Github repo

Lo bueno:

  • No dependerá de expect.
  • sin cabeza.

Las desventajas:

  • Usted todavía tiene que instalar manualmente SDK básico, y android pone en su camino.
  • Script sólo funciona en UNIX.

A partir de Android Plugin para Gradle versión 2.2.0, falta componentes SDK se descargan automáticamente .

En versiones androide nuevas (por ejemplo 25.2.5) debemos utilizar sdkmanager (en lugar del comando android)

Ejemplo de instalación de un paquete:

android-sdk/tools/bin/sdkmanager "extras;android;m2repository"

comando para obtener una lista de todos los paquetes disponibles:

 android-sdk/tools/bin/sdkmanager --verbose --list

Este web-página enlaza las listas de descargas de la SDK-herramientas:

Aquí hay un enlace a un repositorio de código abierto ventana acoplable-androide que puede instalar Android una imagen Estibador en.

También puede encontrar las respuestas en este SO Pregunta: Aceptar automáticamente todas las licencias SDK útil.

Me armó un guión de rubí que descarga e instala el SDK sin preguntar lo que podría ayudar. https://github.com/ayvazj/andenv

¿No otro script para descargar sólo necesarias, no {obsolute, fuente, emulador de imágenes, doc} paquetes:

#!/bin/bash
set -e

# cd into where tools/android can be found
if [[ -d "$ANDROID_HOME" ]]; then
  cd "$ANDROID_HOME"
elif [[ -x "$(dirname "$0")/tools/android" ]]; then
  cd "$(dirname "$0")"
else
  echo "FAILED: Cannot find ANDROID_HOME/tools/android"
  exit 1
fi

android () {
  "$(dirname $0)/tools/android" "$@"
}

needed_packages () {
  android list sdk -u -s -e         \
    | grep '^id:'                   \
    | cut -d'"' -f2                 \
    | grep -v 'source'              \
    | grep -v 'sys-img'             \
    | grep -v 'doc'                 \
    | paste -d, -s -
}

main () {
  (while : ; do
  echo 'y'
  sleep 1
  done) | android update sdk -u -s -a -t "$(needed_packages)"
}

main

Algunas partes se han tomado de otras respuestas en este hilo.

Para un novato de desarrolladores de Android, pero un experimentado desarrollador de Java, que es realmente desconcertante saber qué dependencias, incluso si usted consigue más allá de todas las pesadillas anteriores. Colega me aconseja el uso de Android Studio (que se basa Intellij :-) especialmente a causa de las pesadillas anteriores. Seguí su consejo. Pero no aceptaba los valores predeterminados para la instalación, y traté de instalarlo en una unidad de software de la mía. Resultó ser una pesadilla. El diálogo SDK parecía colgar y no era del todo intuitiva. Es por eso que terminé aquí. Después de leer lo anterior, le di Studio otra oportunidad, y esta vez aceptó todos los valores predeterminados de la instalación tiene. ¡Listo ... que se hizo cargo de todas las dependencias del SDK (los centrales estoy adivinando) en un par de diálogos es decir, sin que se le Ctl-Shift-S y el SKD. Por lo tanto, lo recomendaría para un novato. Aquí, la prueba de fuego mientras se descarga: introducir descripción de la imagen aquí

La versión de I sudio descargado e instalado: introducir descripción de la imagen aquí Versión de Windows: introducir descripción de la imagen aquí Y aquí después lo hizo su buena cosas: introducir descripción de la imagen aquí

Sinceramente espero que funcione para usted !!

Para automatizar la distancia pronta sdkmanager.bat --licenses en Windows (que dicen va a instalar a través de la automatización para la construcción de infraestructura) ... no lo ejecute. No pierda el tiempo tratando de encontrar la manera de y tubería en ella. Lo intenté; abyecto fracaso.

En lugar - ejecuta una vez, usted mismo, y tome nota de que genera archivos en c:\android\android-sdk\licenses (donde se está ejecutando c:\android\android-sdk\tools\bin\sdkmanager.bat - su raíz de instalación puede variar).

Tome esos archivos, y colocarlos en algún lugar se puede agarrar a partir de las secuencias de comandos de configuración automática. En lo personal, ansible es mi veneno, por lo que:

# Note to future-us:
# These are magical files generated by running `c:/android/android-sdk/tools/bin/sdkmanager.bat --licenses`
# This, delightfully, is interactive, and wants to _actually_ read the keyboard buffer.
# That's reputedly possible via SendKeys. I elected to not try that.
# So, instead:
# 1) remote to an instance like a cave-dweller
# 2) run `c:/android/android-sdk/tools/bin/sdkmanager.bat --licenses` in a prompt.
# 3) _actually type_ `y` however many godforsaken times you need to.
# 4) meticulously harvest `c:/android/android-sdk/licenses/*` to this task.
#    (you don't need the newline that they thoughtfully put before the hash in each file).
- name: set up android licenses by hand
  win_lineinfile:
    path: c:/android/android-sdk/licenses/{{ item.name }}
    line: "{{ item.line }}"
    create: true
  with_items:
    - {name: "android-googletv-license", line: "SOME HASH"}
    - {name: "android-sdk-license", line: "SOME OTHER HASH"}
    ...
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top