212 votes

Existe-t-il un moyen d'automatiser l'installation du SDK Android ?

Je dois maintenant télécharger et installer le SDK Android et Gestionnaire AVD puis installer les API et les outils via l'interface utilisateur. Existe-t-il un moyen d'automatiser ce processus ?

1 votes

1 votes

396voto

dtmilano Points 26472

MISE À JOUR

Les dernières versions introduisent sdkmanager est un outil en ligne de commande qui permet de visualiser, d'installer, de mettre à jour et de désinstaller des paquets pour le SDK Android.

Les sdkmanager est fourni dans le paquetage Android SDK Tools ( 25.2.3 et plus ) et se trouve à 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.

Ainsi, pour mettre à jour les paquets, exécutez

sdkmanager --update

Accepter les licences,

yes | sdkmanager --licenses

ANCIENNE RÉPONSE

(Remarque : la android est obsolète !)

Plus vous vous rapprochez de l'automatisation, mieux c'est :

android update sdk --no-ui

android propose 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 souhaitez obtenir la liste des paquets disponibles pour l'installation, vous pouvez utiliser l'option

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

Vous pouvez également limiter la mise à jour à un composant donné si vous utilisez l'option --filter option

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

où le composant est un ou plusieurs des éléments suivants

  • les nombres renvoyés par android list sdk (c'est-à-dire 1 également connu sous le nom de Index du paquet )
  • complément
  • doc
  • supplémentaire
  • plateforme
  • plate-forme-outil
  • échantillon
  • source
  • image-système
  • outil

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

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

Vous n'obtiendrez que les outils de la plate-forme, le niveau 16 de l'API et les fichiers JAR du paquet de support. C'est très pratique si vous ne construisez qu'une machine de construction et que vous devez payer pour télécharger tous les éléments supplémentaires 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]

1 votes

Je reçois toutes ces invites de tiers "Authentification du site" où je dois appuyer sur la touche "Entrée" pour continuer/sauter.

2 votes

Je ne vois pas de "Android.exe" pour le SDK Windows - comment automatiser l'installation et la configuration du SDK sous Windows ?

1 votes

Notez que si un paquet est déjà installé, vous obtenez l'erreur absurde suivante Error: Ignoring unknown package filter 'tools' ou Error: Ignoring unknown package filter 'android-17' .

50voto

danb Points 3688

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

echo "y" | android ....

Je me suis donc retrouvée 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
}
'

2 votes

Cela ressemble beaucoup à la solution proposée ici : stackoverflow.com/a/6674626/3063884 ... l'attribution est-elle nécessaire ?

3 votes

@CJBS Non. Je suis arrivé à la même conclusion que lui. Une fois que vous avez appris à "attendre", ce résultat est à peu près le seul auquel vous pouvez arriver... mais merci d'avoir fourni l'attribution de toute façon.

4 votes

Merci pour le simple expect script, cela fonctionne alors que yes ne fonctionne pas.

47voto

Elmer Points 2377

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

0 votes

Fonctionne bien ! Nous vous remercions.

2 votes

Pour moi, l'option -a était également nécessaire pour que tous les paquets spécifiés dans le filtre soient trouvés.

0 votes

Le sleep script fonctionne bien, mais la réponse supérieure avec yes est beaucoup plus élégante.

16voto

Newfield Points 91

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

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

12 votes

Je ne peux pas confirmer ce fonctionnement. J'obtiens une erreur du type " 'y y y y y y y' n'est pas une réponse valide ", c'est pourquoi je me suis rabattu sur la solution avec un sleep between.

0 votes

Qu'entendez-vous par "répondre à toutes les licences" ? A quoi ressemblent les questions ? Pouvez-vous donner des exemples ? (Mais sans "Modifier :", "Mettre à jour :", ou similaire - la réponse doit apparaître comme si elle avait été écrite aujourd'hui.)

5voto

Tai Le Points 102

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

#!/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 également le voir sur mon Dépôt GitHub

Le bon côté des choses :

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

Les inconvénients :

  • Vous devez toujours installer le SDK de base manuellement, et mettre android sur votre chemin.
  • Le script ne fonctionne que sous Unix.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X