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


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

10 200

10 ответов:

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

$ 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, также известный как индекс)
  • add-on
  • doc
  • дополнительно
  • платформа
  • пример
  • источник
  • system-image

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

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

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

чтобы увидеть доступные параметры, вы можете использовать --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, a средство командной строки, которое позволяет просматривать, устанавливать, обновлять и удалять пакеты для Android SDK.

The 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 (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.

Итак, для обновления пакетов запустите

$ 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 ""
}

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]*\).*//' |\
    # Remove the empty lines
    sed -n 's/^[^ $]//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 плагин для Gradle версия 2.2.0, отсутствуют компоненты SDK загружаются автоматически.

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

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

android-sdk/tools/bin/sdkmanager "extras;android;m2repository"
для получения списка всех доступных пакетов:
 android-sdk/tools/bin/sdkmanager --verbose --list

этой странице список ссылок для загрузки SDK-tools:

вот ссылка на репозиторий с открытым исходным кодом docker-android который может установить android в докере изображение.

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

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

еще один скрипт для загрузки только необходимых,не{obsolute,source,emulator-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 "")/tools/android" ]]; then
  cd "$(dirname "")"
else
  echo "FAILED: Cannot find ANDROID_HOME/tools/android"
  exit 1
fi

android () {
  "$(dirname )/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

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

для начинающего разработчика Android, но опытного разработчика Java, действительно непонятно, какие зависимости, даже если вы пройдете все вышеперечисленные кошмары. Мой коллега посоветовал мне использовать Android Studio (который основан на Intellij: -)в частности из-за вышеперечисленных кошмаров. Я последовал его совету. Но я не принял значения по умолчанию для установки и попытался установить его на мой программный диск. Это оказалось кошмаром. пакет SDK диалог, казалось, висел и вовсе не был интуитивным. Вот почему я оказался здесь. Прочитав вышеизложенное, я дал студии еще одну попытку, и на этот раз принял все значения по умолчанию для установки. Эй! PRESTO...it позаботился обо всех зависимостях SDK (основные из них я предполагаю) в нескольких диалогах без запроса, т. е. Ctl-Shift-S и SKD. Поэтому я бы рекомендовал его для новичка. Вот доказательство пудинга, как он загружается: enter image description here

в версия студии я скачал и установил: enter image description here версия Windows: enter image description here И вот после того, как он сделал свое доброе дело: enter image description here

искренне надеюсь, что это работает для вас!!