Android SDK kurulumunu otomatikleştirmenin bir yolu var mı?


Yanıtlar:


392

GÜNCELLEME

En son sürümler sdkmanager, Android SDK için paketleri görüntülemenize, yüklemenize, güncellemenize ve kaldırmanıza izin veren bir komut satırı aracı sunar.

sdkmanagerAracı Android SDK Tool paketi (sağlanır 25.2.3 ve üstü ) ve yer almaktadır 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.

yani, paketleri çalıştırmak için çalıştırın

$ sdkmanager --update

lisansları kabul etmek

$ yes | sdkmanager --licenses

ESKİ CEVAP

(Lütfen dikkat: android komutu kullanımdan kaldırıldı!)

Otomasyona ne kadar yakın olursanız muhtemelen:

$ android update sdk --no-ui

android otomatik güncellemeler için şu seçenekleri sunar:

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

Kurulum için hangi paketlerin mevcut olduğunu listelemek isterseniz,

$ android list sdk

ve sıralı bir paket listesi elde edersiniz, örneğin

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

Ayrıca, --filterseçeneği kullanıyorsanız güncellemeyi yalnızca istenen bir bileşenle sınırlayabilirsiniz.

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

burada bileşen bir veya daha fazla

  • tarafından döndürülen sayılar android list sdk(yani 1 , paket dizini olarak da bilinir )
  • Ayriyeten
  • doktor
  • ekstra
  • platform
  • platform aracı
  • örneklem
  • kaynak
  • Sistem görüntü
  • araç

veya bir veya daha fazla spesifik tanımlayıcı olabilir. Örneğin, yalnızca küçük bir paket kümesi indirmek istiyorsanız, bunu yapabilirsiniz:

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

ve sadece platform araçları, api seviye 16 ve destek paketi kavanozunu alacaksınız. Bu, yalnızca bir yapı makinesi oluşturuyorsanız ve asla kullanmayacağınız tüm ekstra şeyleri indirmek için ödemek zorunda kalırsanız gerçekten kullanışlıdır.

Kullanılabilir seçenekleri görmek için --help kullanabilirsiniz, örneğin

$ 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
Devam etmek / atlamak için enter tuşuna basmam gereken tüm bu üçüncü taraf "Site kimlik doğrulaması" istemlerini alıyorum, bunlardan kurtulmanın bir yolu var mı?
Somatik

2
Windows SDK için bir "android.exe" görmüyorum - Windows'ta SDK kurulumunu ve yapılandırmasını nasıl otomatikleştirirdiniz?
Trevor Sullivan

1
Bir paketin önceden yüklenmiş olması durumunda, Error: Ignoring unknown package filter 'tools'veya gibi saçma sapan hatalar aldığını unutmayın Error: Ignoring unknown package filter 'android-17'.
Ivan Vučica

32
Lisansı otomatik olarak kabul etmek için bir sonraki sürüm bir --accept-licensebayrak ekleyecektir . Bu arada yapabilirsinizecho "y" | android update sdk --no--ui
Snicolas

2
@Snicolas Şimdilik lisans sözleşmelerini otomatik olarak kabul etmek için "beklemek" kullanan bir marka yazdım. Github'da ( github.com/ken-noland/android-autoget-makefile )
Kenneth Noland

50

Bu benim için işe yaramadı ...

echo "y" | android ....

bu yüzden buraya geldim:

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
Bu, burada sağlanan çözüme çok benziyor: stackoverflow.com/a/6674626/3063884 ... ilişkilendirme gerekli mi?
CJBS

2
@CJBS Hayır. Adamla aynı sonuca vardım. Bir kez "beklemek" öğrendikten sonra bu sonuç hemen hemen gelebilir tek şey ... ama yine de atıf sağladığınız için teşekkürler.
danb

4
Basit beklenti betiği için teşekkürler, evet olmazken bu çalışır.
Sınıf

Bu sadece sudo kaldırıldıktan sonra android araç yolunu düzelttikten sonra çalıştı.
Pelet

44

Ben travis-ci sdk yüklemek ve güncellemek için kullanın

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

İyi çalışıyor! Teşekkür ederim.
gilm

2
Benim için filtrede belirtilen tüm paketlerin bulunabilmesi için -a seçeneğine de ihtiyaç duyuldu.
alfoks

16

Tüm lisansları 'y' ile cevaplamak için bunu komut dosyasında deneyebilirsiniz:

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

10
Bu çalışmayı onaylayamıyorum. "'Yyyyyyyy' geçerli bir cevap değil" gibi bir hata alıyorum, bu yüzden aradaki uyku ile çözüme geri düştüm.
npstr

5

Hala tüm Android paketlerini indirmek için bir yöntem arayan biri için, bunu yapmak için bir komut dosyası yazdım. Kullanılmayan tüm paketleri indirecektir .

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

Bunu Github deposumda da görebilirsiniz

İyi:

  • Bağımlı değil expect.
  • Başsız.

Dezavantajları:

  • Hala temel SDK'yı manuel olarak yüklemeniz ve androidyolunuza koymanız gerekir.
  • Komut dosyası yalnızca unix üzerinde çalışır.

4

Daha yeni android sürümlerinde (örneğin 25.2.5) sdkmanager kullanmalıyız ( androidkomut yerine )

Paket kurma örneği:

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

Mevcut tüm paketlerin bir listesini alma komutu:

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

Bu web sayfasında SDK araçları için indirme bağlantıları listelenmektedir:

İşte bir Docker görüntüsünde android yükleyebilen açık kaynaklı bir havuz docker-android bağlantısı .

Yanıtları bu SO Sorusunda da bulabilirsiniz : Tüm SDK lisanslarını otomatik olarak yararlı kabul edin .


3

Gradle sürüm 2.2.0 için Android Plugin ile başlayarak , eksik SDK bileşenleri otomatik olarak indirilir .


2
Kabul ederler, ancak lisanslar otomatik olarak kabul edilmez, bu da CI için minimum kullanım sağlar.
eAi

İkinci bağlantım, "kabul edilen lisanslar dizinini kopyalayarak lisanslarınızı dışa aktarma" konusunda açık talimatlara sahip. Bu, CI derleme düğümleriniz için kolayca yapabileceğiniz bir şeydir.
sschuberth


0

Sadece gerekli olan, olmayan, eski, kaynak, emülatör-görüntü, doc} paketlerini indirmek için başka bir komut dosyası:

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

Bazı bölümler bu konudaki diğer cevaplardan alınmıştır.


0

Otomatikleştirmek için sdkmanager.bat --licensesWindows üzerinde istemi away (eğer inşa altyapı için otomasyon yoluyla yüklüyoruz ki) ... Do it yayınlanmaz. İçine nasıl boru koyacağınızı anlamaya çalışırken zaman kaybetmeyin y. Denedim; dışlama başarısız.

Aksine - bir kez, kendiniz çalıştırın ve içine dosya oluşturduğunu unutmayın c:\android\android-sdk\licenses(çalıştığınız yerde c:\android\android-sdk\tools\bin\sdkmanager.bat- yükleme kökünüz değişebilir).

Bu dosyaları alın ve otomatik kurulum komut dosyalarınızda alabileceğiniz bir yere yerleştirin. Şahsen, benim zehirim ansible, bu yüzden:

# 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

Bununla da sinirli oldum com.quittle.setup-android-sdkve ihtiyacınız olanı tespit edip yükleyecek bir Gradle eklentisi oluşturdum. Windows, OSX ve Linux'ta çalışır ve Gradle ile oluşturursanız ek bağımlılıklar gerektirmez.

İlgileniyorsanız, dokümanlarımı buradan kontrol edebilirsiniz: https://github.com/quittle/gradle-setup-android-sdk


-1

Yeni bir Android geliştiricisi, ancak deneyimli bir Java geliştiricisi için, yukarıdaki kabusların hepsini geçerseniz, HANGİ bağımlılıkları bilmek gerçekten şaşırtıcıdır. Madenin Meslektaş esaslı :-) Intellij olan Android Studio (kullanmak için bana tavsiye özellikleyukarıdaki kabuslar yüzünden. Onun tavsiyelerine uydum. Ancak yükleme için varsayılanları kabul etmedim ve bir yazılım sürücüsüne yüklemeye çalıştım. Bir kabus olduğu ortaya çıktı. SDK diyalogu asılmış gibiydi ve sezgisel değildi. Bu yüzden buraya geldim. Yukarıdakileri okuduktan sonra Studio'ya başka bir deneme yaptım ve bu sefer TÜM varsayılanları kabul etti. Hey PRESTO ... Ctl-Shift-S ve SKD sorulmadan birkaç diyalogda tüm SDK bağımlılıklarını (tahmin ettiğim temel bağımlılıkları) halletti. Bu nedenle bir acemi için tavsiye ederim. İşte pudingin indirildiği kanıtı: resim açıklamasını buraya girin

İndirdiğim ve yüklediğim sudio sürümü: resim açıklamasını buraya girin Windows sürümü: resim açıklamasını buraya girin Ve burada iyi şeyler yaptıktan sonra: resim açıklamasını buraya girin

İçtenlikle sizin için çalışıyor umut !!


Daha sonra bulduğum şey, aslında yüklü olduğu klasörle ilgisi olmadığıydı. İnternet bağlantınızın ve sonuç olarak proxy'nin doğru yapılandırıldığından emin olun. Aksi takdirde, kurulacak hiçbir şey göremezsiniz. Sorun buydu.
Beezer
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.