Есть ли способ автоматизировать установку Android sdk?

Теперь мне нужно загрузить и установить Android SDK abd AVD Manager, а затем установить API, инструменты через интерфейс. Есть ли способ автоматизировать этот процесс?

Solutions Collecting From Web of "Есть ли способ автоматизировать установку Android sdk?"

Чем ближе вы можете добраться до автоматизации, возможно, это:

$ android update sdk --no-ui 

Android предоставляют эти параметры для автоматического обновления:

 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 

Если вы хотите указать, какие пакеты доступны для установки, вы можете использовать

 $ android list sdk 

И вы получите упорядоченный список пакетов, например

 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 

Также вы можете ограничить обновление только желаемым компонентом, если вы используете опцию --filter

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

Где компонент является одним или несколькими из

  • Числа, возвращаемые android list sdk (т.е. 1 , также известны как индекс пакета )
  • добавить
  • доктор
  • дополнительный
  • Платформа
  • Платформа-инструмент
  • образец
  • источник
  • Система-изображения
  • инструмент

Или может быть одним или несколькими конкретными идентификаторами. Например, если вы просто хотите загрузить небольшой набор определенных пакетов, вы можете сделать это:

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

И вы просто получите инструменты платформы, уровень 16 api и банку поддержки пакета. Это очень удобно, если вы строите машину для сборки и вам придется заплатить за загрузку всего лишнего материала, который вы никогда не будете использовать.

Чтобы просмотреть доступные параметры, вы можете использовать –help, например

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

ОБНОВИТЬ

В последних версиях представлен sdkmanager , инструмент командной строки, который позволяет вам просматривать, устанавливать, обновлять и удалять пакеты для Android SDK.

Инструмент sdkmanager предоставляется в пакете Android SDK Tools ( 25.2.3 и выше ) и находится в 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 (eg "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. 

Поэтому, чтобы обновить пакеты

 $ sdkmanager --update 

Принимать лицензии

 $ yes | sdkmanager --licenses 

Это не сработало для меня …

 echo "y" | android .... 

Поэтому я оказался здесь:

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

Я использую это для установки и обновления sdk на 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 

Чтобы ответить на все лицензии с помощью «y», вы можете попробовать это в скрипте:

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

Для любого, кто все еще ищет метод для загрузки всех пакетов Android, я написал сценарий для этого. Он будет загружать все ненужные пакеты.

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

Вы также можете увидеть это на моем репетире Github

Добро:

  • Не зависит от expect .
  • Обезглавленный.

Недостатки:

  • Вы все равно должны установить базовый SDK вручную и поместить android в свой путь.
  • Сценарий работает только в unix.

Начиная с Android Plugin для Gradle версии 2.2.0, отсутствующие компоненты SDK загружаются автоматически .

В новых версиях Android (например, 25.2.5 ) мы должны использовать sdkmanager (вместо команды android )

Пример установки пакета:

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

Команда, чтобы получить список всех доступных пакетов:

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

На этой веб-странице перечислены ссылки для загрузки SDK-инструментов:

Вот ссылка на докере-андроид с открытым исходным кодом, который может установить Android в образ Docker.

Вы также можете найти ответы в этом вопросе SO: автоматически принимать все лицензии SDK .

Я собрал скрипт ruby, который загружает и устанавливает SDK без подсказки, который может помочь. https://github.com/ayvazj/andenv

Еще один скрипт для загрузки только необходимых пакетов, не связанных между собой, источника, эмулятора-изображения, 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 

Некоторые части взяты из других ответов в этой теме.