Question

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

Était-ce utile?

La solution

UPDATE

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

L'outil de sdkmanager est fourni dans le paquet applications SDK Outils ( 25.2.3 et supérieur ) et est situé 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.

, mettre à jour les packages exécuter

$ sdkmanager --update

pour accepter les licences

$ yes | sdkmanager --licenses

RÉPONSE VIEUX

(S'il vous plaît noter: La commande android est dépréciée)

Plus vous pouvez obtenir à l'automatisation est probablement:

$ android update sdk --no-ui

android fournir 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 à la liste des paquets qui sont 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

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

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

dans laquelle le composant est un ou plusieurs

  • les nombres retournés par android list sdk (par exemple 1 , aussi connu comme index des paquets )
  • add-on
  • doc
  • supplémentaire
  • plate-forme
  • plate-forme outil
  • échantillon
  • source
  • système image
  • outil

ou peut être un ou plusieurs identifiants spécifiques. Par exemple, si vous voulez juste télécharger un petit ensemble de paquets spécifiques, vous pouvez faire ceci:

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

et vous obtenez juste les outils de la plate-forme, le niveau de api 16 et support pot de l'emballage. Ceci est très pratique si vous construisez une machine à construire seulement et devrait payer pour le téléchargement de tous les trucs supplémentaires que vous ne serez jamais utiliser.

Pour voir les options disponibles que 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]

Autres conseils

Cela ne fonctionne pas pour moi ...

echo "y" | android ....

donc j'ai fini 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
}
'

i l'utiliser 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

Pour répondre à toutes les licences avec « y », vous pouvez essayer cela dans le script:

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

Pour une recherche encore une méthode pour télécharger tous les paquets Android, j'ai écrit un script pour le faire. Il téléchargera non-OBSOLETED 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 repo Github

Le bon:

  • pas dépendre de expect.
  • Headless.

Les inconvénients:

  • Il vous reste à installer le SDK de base manuellement et mettre android dans votre chemin.
  • Script ne fonctionne que sur unix.

Dans les nouvelles versions Android (par exemple 25.2.5) nous devrions utiliser sdkmanager (au lieu de la commande android)

Exemple d'installation d'un paquet:

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

pour obtenir une liste de tous les paquets disponibles:

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

listes liens de téléchargement Cette page web pour la SDK-tools:

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

Vous pouvez aussi trouver les réponses dans ce SO Question: accepter automatiquement toutes les licences SDK utile.

Je mis en place un script Ruby qui télécharge et installer le SDK sans demander ce qui peut aider. https://github.com/ayvazj/andenv

paquets

Encore un autre script à télécharger, non seulement nécessaires {obsolute, source, émulateur 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 prises d'autres réponses dans ce fil.

Pour un débutant développeur Android, mais un développeur Java expérimenté, il est vraiment ahurissant de savoir quelles sont les dépendances, même si vous avez passé tous les cauchemars ci-dessus. De mes collègues m'a conseillé d'utiliser Android Studio (qui est basé Intellij :-) spécifiquement à cause des cauchemars ci-dessus. J'ai suivi ses conseils. Mais je n'accepte les valeurs par défaut pour l'installation, et essayé de l'installer dans un lecteur logiciel de la mine. Il est avéré être un cauchemar. Le dialogue SDK semblait accrocher et n'était pas intuitive du tout. Ce qui est la raison pour laquelle je me suis retrouvé ici. Après avoir lu ce qui précède, j'ai donné un autre studio essayer, et cette fois accepté toutes les valeurs par défaut pour l'intallation. Hey PRESTO ... il a pris soin de toutes les dépendances SDK (les clés) Je suppose dans quelques dialogues sans être invité à savoir ctrl-Shift-S et le SKD. Je recommande donc pour un débutant. Voici la preuve du pudding comme téléchargements: entrer la description d'image ici

La version de sudio I téléchargé et installé: entrer la description d'image ici Version de Windows: entrer la description d'image ici Et là, après avoir fait son bien-stuff: entrer la description d'image ici

Nous espérons sincèrement que cela fonctionne pour vous !!

Pour automatiser l'invite de loin sdkmanager.bat --licenses sous Windows (vous dites installons grâce à l'automatisation pour la construction d'infrastructures) ... Ne pas exécuter. Ne perdez pas de temps à essayer de comprendre comment tuyau y en elle. J'ai essayé; abject échec.

Au contraire - exécuter une fois, vous et prendre note qu'il génère des fichiers dans c:\android\android-sdk\licenses (où que vous exécutez c:\android\android-sdk\tools\bin\sdkmanager.bat - votre racine d'installation peut varier).

Prenez ces fichiers, et placez-les quelque part, vous pouvez les saisir à partir dans vos scripts de configuration automatique. Personnellement, ansible est mon poison, donc:

# 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"}
    ...
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top