C'è un modo per automatizzare l'installazione di Android SDK?


207

Ora devo scaricare e installare Android SDK e AVD Manager, quindi installare le API, gli strumenti attraverso l'interfaccia utente. C'è un modo per automatizzare questo processo?



Risposte:


392

AGGIORNARE

Presentano le ultime versioni sdkmanager, uno strumento da riga di comando che consente di visualizzare, installare, aggiornare e disinstallare i pacchetti per Android SDK.

Lo sdkmanagerstrumento è fornito nel pacchetto Strumenti SDK per Android ( 25.2.3 e versioni successive ) e si trova in 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.

quindi, per aggiornare i pacchetti eseguiti

$ sdkmanager --update

per accettare le licenze

$ yes | sdkmanager --licenses

VECCHIA RISPOSTA

(Nota: il comando Android è obsoleto!)

Il più vicino possibile all'automazione è probabilmente:

$ android update sdk --no-ui

Android fornisce queste opzioni per gli aggiornamenti automatici:

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

Se si desidera elencare quali pacchetti sono disponibili per l'installazione, è possibile utilizzare

$ android list sdk

e otterrai un elenco ordinato di pacchetti, ad esempio

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

Inoltre è possibile limitare l'aggiornamento solo al componente desiderato se si utilizza l' --filteropzione

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

dove componente è uno o più di

  • i numeri restituiti da android list sdk(ovvero 1 , noto anche come indice del pacchetto )
  • Aggiungi su
  • doc
  • extra
  • piattaforma
  • la piattaforma-tool
  • campione
  • fonte
  • Sistema-image
  • attrezzo

o può essere uno o più identificatori specifici. Ad esempio, se desideri solo scaricare un piccolo set di pacchetti specifici, puoi farlo:

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

e otterrai solo gli strumenti della piattaforma, api livello 16 e supporto jar pacchetto. Questo è davvero utile se stai costruendo solo una macchina per costruire e dovresti pagare per scaricare tutte le cose extra che non utilizzerai mai.

Per vedere le opzioni disponibili puoi usare --help, per esempio

$ 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
Ricevo tutte queste istruzioni di "Autenticazione del sito" di terze parti in cui devo premere Invio per continuare / saltare, c'è un modo per liberarmene?
Somatik,

2
Non vedo un "android.exe" per Windows SDK: come automatizzeresti l'installazione e la configurazione dell'SDK su Windows?
Trevor Sullivan,

1
Si noti che nel caso in cui un pacchetto sia già installato, viene visualizzato l'errore senza senso come Error: Ignoring unknown package filter 'tools'o Error: Ignoring unknown package filter 'android-17'.
Ivan Vučica,

32
Per accettare automaticamente la licenza, la prossima versione aggiungerà un --accept-licenseflag. Nel frattempo puoiecho "y" | android update sdk --no--ui
Snicolas,

2
@Snicolas Ho scritto un makefile che utilizza "prevede" di accettare automaticamente gli accordi di licenza per ora. È su github ( github.com/ken-noland/android-autoget-makefile )
Kenneth Noland

50

Questo non ha funzionato per me ...

echo "y" | android ....

così sono finito qui:

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
Sembra molto simile alla soluzione fornita qui: stackoverflow.com/a/6674626/3063884 ... è richiesta l'attribuzione?
CJBS,

2
@CJBS No. Sono arrivato alla stessa conclusione che ha fatto quel ragazzo. Una volta imparato "aspettati" questo risultato è praticamente l'unico che puoi trovare ... ma grazie per aver fornito l'attribuzione comunque.
dan

4
Grazie per il semplice script prevedono, questo funziona mentre sì no.
classe

Questo ha funzionato solo dopo aver rimosso sudo e quindi corretto il percorso dello strumento Android.
Pellet

44

lo uso per installare e aggiornare lo sdk su 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

Funziona bene! Grazie.
Gil

2
Per me l'opzione -a era necessaria anche per trovare tutti i pacchetti specificati nel filtro.
Alfoks

16

Per rispondere a tutte le licenze con 'y', puoi provare questo nello script:

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

10
Non posso confermare questo funzionamento. Ricevo un errore che suona come "'yyyyyyyy' non è una risposta valida", ecco perché sono tornato alla soluzione con un sonno in mezzo.
npstr,

5

Per chiunque sia ancora alla ricerca di un metodo per scaricare tutti i pacchetti Android, ho scritto uno script per farlo. Scaricherà tutti i pacchetti non obsoleti .

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

Puoi anche vederlo sul mio repository Github

Il bene:

  • Non dipendere da expect.
  • Senza testa.

Gli svantaggi:

  • Devi ancora installare l'SDK di base manualmente e metterlo androidnel tuo percorso.
  • Lo script funziona solo su unix.

4

Nelle nuove versioni di Android (ad es. 25.2.5) Dovremmo usare sdkmanager (invece del androidcomando)

Esempio di installazione di un pacchetto:

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

Comando per ottenere un elenco di tutti i pacchetti disponibili:

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

Questa pagina Web elenca i collegamenti per il download degli strumenti SDK:

Ecco un link a un repository open source docker-android che può installare android in un'immagine Docker.

È possibile inoltre trovare le risposte in questa domanda SO: accettare automaticamente tutte le licenze SDK .


3

A partire dal plug-in Android per Gradle versione 2.2.0, i componenti SDK mancanti vengono scaricati automaticamente .


2
Lo fanno, ma le licenze non vengono accettate automaticamente, il che lo rende di minimo utilizzo per CI.
eAi

Il mio secondo link contiene istruzioni esplicite su come "esportare le tue licenze copiando sulla directory delle licenze accettate". Questo è qualcosa che puoi facilmente fare per i tuoi nodi di build CI.
sschuberth,


0

Ancora un altro script per scaricare solo i pacchetti necessari, non {obsoleti, sorgente, emulatore-immagine, 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

Alcune parti sono tratte da altre risposte in questo thread.


0

Per automatizzare il sdkmanager.bat --licensesprompt su Windows (supponi che stai installando tramite l'automazione per l'infrastruttura di build) ... Non eseguirlo. Non perdere tempo cercando di capire come convogliarti y. Provai; abject fall.

Piuttosto: eseguilo una volta, tu stesso, e prendi nota che genera file c:\android\android-sdk\licenses(dove stai correndoc:\android\android-sdk\tools\bin\sdkmanager.bat - la tua root di installazione può variare).

Prendi quei file e posizionali in un punto da cui puoi catturarli negli script di installazione automatica. Personalmente, ansible è il mio veleno, quindi:

# 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"}
    ...

0

Mi sono anche frustrato per questo e ho creato un plugin Gradle chiamato com.quittle.setup-android-sdkche rileverà e installerà ciò di cui hai bisogno. Funziona su Windows, OSX e Linux e non richiede dipendenze aggiuntive se si costruisce con Gradle.

Se sei interessato puoi consultare i miei documenti qui: https://github.com/quittle/gradle-setup-android-sdk


-1

Per uno sviluppatore Android principiante, ma uno sviluppatore Java esperto, è davvero sconcertante sapere QUALI dipendenze, ANCHE se si superano tutti gli incubi di cui sopra. Il mio collega mi ha consigliato di utilizzare Android Studio (che è basato su Intellij :-) particolarea causa degli incubi di cui sopra. Ho seguito il suo consiglio. Ma non ho accettato le impostazioni predefinite per l'installazione e ho provato a installarlo in una mia unità software. Si è rivelato essere un incubo. Il dialogo SDK sembrava bloccarsi e non era affatto intuitivo. Ecco perché sono finito qui. Dopo aver letto quanto sopra, ho dato a Studio un altro tentativo e questa volta ho accettato TUTTE le impostazioni predefinite per l'installazione. Ehi PRESTO ... si è preso cura di tutte le dipendenze dell'SDK (core che sto indovinando) in un paio di dialoghi senza essere sollecitato, ad esempio Ctl-Shift-S e SKD. Lo consiglierei quindi per un principiante. Ecco la prova del budino mentre scarica: inserisci qui la descrizione dell'immagine

La versione di sudio che ho scaricato e installato: inserisci qui la descrizione dell'immagine Versione di Windows: inserisci qui la descrizione dell'immagine E qui dopo ha fatto le sue cose buone: inserisci qui la descrizione dell'immagine

Spero sinceramente che funzioni per te !!


Quindi quello che ho scoperto in seguito è che in realtà non ha nulla a che fare con la cartella in cui è installato. Assicurati che la tua connessione Internet e di conseguenza il proxy siano configurati correttamente. Altrimenti, non vedrai nulla disponibile per l'installazione. Questo era il problema.
Beezer,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.