web-dev-qa-db-fra.com

Est-il possible d'automatiser l'installation du sdk Android?

Maintenant, je dois télécharger et installer le SDK Android et AVD Manager, puis installer les API, les outils via l'interface utilisateur. Y a-t-il un moyen d'automatiser ce processus?

201
dongshengcn

Le plus proche de l'automatisation est probablement:

$ Android update sdk --no-ui

Android fournit ces options pour les mises à jour automatiques:

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 vous voulez lister les paquets disponibles pour l'installation, vous pouvez utiliser

$ Android list sdk

et vous obtiendrez une liste ordonnée de paquets, par exemple

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

De plus, vous pouvez limiter la mise à jour à un composant souhaité uniquement si vous utilisez l'option --filter.

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

où composant est un ou plusieurs des

  • les numéros renvoyés par Android list sdk (c'est-à-dire 1 , également appelé paquet index)
  • ajouter
  • doc
  • supplémentaire
  • plate-forme
  • plate-forme-outil
  • échantillon
  • la source
  • image système
  • outil

ou peut être un ou plusieurs identifiants spécifiques. Par exemple, si vous souhaitez simplement télécharger un petit ensemble de packages spécifiques, vous pouvez procéder comme suit:

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

et vous n'aurez que les outils de la plate-forme, l'API de niveau 16 et le package de support. C'est très pratique si vous construisez une machine de compilation uniquement et que vous devez payer pour télécharger tout le matériel supplémentaire que vous n'utiliserez jamais.

Pour voir les options disponibles, vous pouvez utiliser --help, par exemple

$ 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]

METTRE À JOUR

Les dernières versions présentent sdkmanager, un outil de ligne de commande permettant d'afficher, d'installer, de mettre à jour et de désinstaller les packages du SDK Android.

L'outil sdkmanager est fourni dans le package Android SDK Tools ( 25.2.3 et versions ultérieures ) et se trouve dans 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.

oui, pour mettre à jour les paquets

$ sdkmanager --update

accepter les licences

$ yes | sdkmanager --licenses
383
Diego Torres Milano

Cela n'a pas fonctionné pour moi ... 

echo "y" | Android ....

alors je me suis retrouvé ici:

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
}
'
50
danb

je l'utilise pour installer et mettre à jour le sdk sur 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
44
Elmer

Pour répondre à toutes les licences avec "y", vous pouvez essayer ceci dans le script:

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

Pour ceux qui recherchent toujours une méthode pour télécharger tous les packages Android, j'ai écrit un script pour le faire. Il téléchargera tous les packages non obsolètes. 

#!/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

Vous pouvez aussi le voir sur mon Github repo

Le bon:

  • Ne dépend pas de expect.
  • Sans tête.

Les inconvénients:

  • Vous devez toujours installer le SDK de base manuellement et mettre Android dans votre chemin.
  • Le script ne fonctionne que sous unix.
5
Tai Le

Dans les versions plus récentes d'Android (par exemple 25.2.5), nous devrions utiliser sdkmanager (au lieu de la commande Android)

Exemple d'installation d'un package:

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

Commande pour obtenir une liste de tous les packages disponibles:

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

Cette page Web répertorie les liens de téléchargement des outils SDK:

Voici un lien vers un référentiel open-source docker-Android qui peut installer Android dans une image Docker.

Vous pouvez également trouver les réponses dans cette SO question: Accepter automatiquement toutes les licences de SDK utiles.

3
TmTron

À partir de Plugin Android pour Gradle version 2.2.0, composants SDK manquants téléchargement automatique .

3
sschuberth

Pour un développeur Android débutant, mais aussi pour un développeur Java expérimenté, il est vraiment ahurissant de savoir QUELLES dépendances, MÊME si vous surmontez tous les cauchemars ci-dessus . Un de mes collègues m’a conseillé d’utiliser Android Studio (basé sur Intellij: -) spécifiquement à cause des cauchemars ci-dessus . J'ai suivi ses conseils . Mais je n'ai pas accepté les valeurs par défaut pour l'installation et j'ai essayé de l'installer dans un de mes logiciels . Cela s'est avéré être un cauchemar. Le dialogue du SDK semblait suspendu et n’était pas intuitif du tout ... C'est pourquoi je me suis retrouvé ici ... après la lecture de ce qui précède, j’ai encore essayé Studio, et cette fois j’ai accepté TOUS les défauts de l’installation . Hey PRESTO ... il s’est occupé de toutes les dépendances du SDK (les principales, je devine) dans quelques dialogues sans être invité, par exemple Ctl-Shift-S et le SKD . Je le recommanderais donc pour un débutant. Voici la preuve que le pudding est téléchargé:  enter image description here

La version de sudio que j'ai téléchargée et installée:  enter image description here Version de Windows:  enter image description here Et ici, après avoir fait ses bonnes choses:  enter image description here

Espérons sincèrement que cela fonctionne pour vous!

0
Beezer

Encore un autre script à télécharger: uniquement les packages nécessaires, non {obsolute, source, emulator-image, doc}:

#!/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

Certaines parties sont extraites d'autres réponses de ce fil.

0
Jokester

J'ai mis en place un script Ruby qui télécharge et installe le SDK sans demander, ce qui pourrait aider . https://github.com/ayvazj/andenv

0
ayvazj