Удаление выбранных частей Android SDK в командной строке

Это связано с "Удаление старых версий Android SDK", за исключением того, что я хотел бы сделайте это на безголовом сервере Linux CI (мало места на диске).

Предоставляет ли инструмент командной строки android параметры для удаления старых частей SDK? На первый взгляд, он может удалить только AVD. Я что-то проглядел?

В качестве альтернативы, я думаю, я мог бы просто вручную удалить материал из-под SDK_HOME. Но какие вещи безопасно удалять? Другие кандидаты, кроме этих?

  • Мне нужно только поддерживать уровень API 14 и выше, поэтому я полагаю, что могу удалить вещи под platforms/, такие как android-3 и android-4.
  • docs (800MB), samples (300MB)
  • Как насчет system-images? Мне нужно, например. android-18/armeabi-v7a/ и android-18/x86/, если я хочу делать только автоматизированные сборки APK (без эмулятора) с помощью Gradle (и Ant)?

По крайней мере, после полного удаления docs при следующем запуске android update sdk --no-ui он снова начал их извлекать:

   Downloading Documentation for Android SDK, API 19, revision 1

Могу ли я избежать update добавления частей SDK, которые я выбросил?

Отказ от ответственности: да, диск дешевый, и мне действительно нужно просто добавить больше. Но прямо сейчас на этом конкретном сервере (диск 8,5 ГБ) у меня нет такой возможности, но я все же хотел бы, чтобы он запускал сборки Android 19...


person Jonik    schedule 04.11.2013    source источник
comment
Не уверен, используете ли вы Windows или Linux (или что-то еще)   -  person CJBS    schedule 15.08.2014
comment
Первое предложение вопроса: [...] на безголовом сервере Linux CI   -  person Jonik    schedule 19.08.2014


Ответы (3)


Из того, что мне удалось собрать, вы можете просто удалить каталоги в /platforms /skins и /system-images

person TinyTimZamboni    schedule 05.02.2016

Все, кроме tools/, обычно можно переустановить с помощью

android list sdk -a

и

android update sdk --no-ui -a --filter <#index>

Я часто сбрасываю папки add-ons/ и build-tools/ и переустанавливаю свои add-ons/ и build-tools/. Если вам нужно автоматизировать принятие лицензии, есть еще одна маленькая хитрость, по крайней мере, если вы устанавливаете их по одному:

android update sdk --no-ui -a --filter <#index> 0<<EOF
y
EOF

Сама команда android находится в пакете SDK Tools или в каталоге tools/, поэтому вы не можете удалить ее, потому что тогда вы не сможете установить что-либо еще. Я также обычно не удаляю platform-tools/, так как тогда вы не сможете ничего построить, если только не устанавливаете новую/старую версию. Если вы посмотрите в ‹sdk-folder›/SDK Readme.txt, вы увидите следующее в первом абзаце, чтобы подтвердить это:

Добро пожаловать в Android SDK!

Архив Android SDK изначально содержит только основные инструменты SDK. Он не содержит платформы Android или каких-либо сторонних библиотек. На самом деле, у него даже нет всех инструментов, необходимых для разработки приложения.

Чтобы приступить к разработке приложений, необходимо установить Platform-tools и хотя бы одну версию платформы Android с помощью SDK Manager.

person Josh A.    schedule 19.08.2015

Кажется, вам нужно скачать только те части, которые вам нужны. Выполнение android update sdk --no-ui без других параметров загружает все и, таким образом, отнимает много времени и расточительно.

Параметр --filter для определения пакетов, которые вам нужны, и использования их каждый раз, когда вы хотите выполнить обновление. Более подробное объяснение того, как это сделать, есть здесь (и даже больше о команде android здесь).

Если вы периодически меняете необходимые компоненты (например, ориентируетесь на другую платформу), вы можете создать сценарий, который удаляет компоненты в различных папках, которые не нужны (например, API-интерфейсы в android-sdk-linux/platforms), а затем повторно создает только те компоненты, которые вы хотеть.

Команда android list sdk -e предоставит расширенный список пакетов, которые можно использовать с параметром --filter, и, таким образом, позволит установить только определенные компоненты.

После просмотра отличного ответа автоматизированного способа использования команды expect для автоматического принятия запросов на лицензию, я остановился на этом для установки и обновить нужные мне компоненты, не скачивая все остальное (на Ubuntu):

expect -c '
set timeout -1;
spawn /opt/android-sdk-linux/tools/android update sdk --no-ui --filter tools,build-tools-20.0.0,platform-tools,android-16,extra-android-support,extra-android-m2repository;
expect {
    "Do you accept the license" { exp_send "y\r" ; exp_continue }
    eof
}
'

Обратите внимание на компоненты tools,build-tools-20.0.0,platform-tools,android-16,extra-android-support,extra-android-m2repository, указанные с параметром --filter, которые ограничивают загрузку только этими частями.

Запуск этого сценария один раз загружает только эти компоненты. Повторный запуск определяет, что ничего не нужно обновлять, но выдает запутанный набор сообщений:

Error: Ignoring unknown package filter 'tools'
Error: Ignoring unknown package filter 'build-tools-20.0.0'
Error: Ignoring unknown package filter 'platform-tools'
Error: Ignoring unknown package filter 'android-16'
Error: Ignoring unknown package filter 'extra-android-support'
Error: Ignoring unknown package filter 'extra-android-m2repository'
Warning: The package filter removed all packages. There is nothing to install.
         Please consider trying to update again without a package filter.

Эти сообщения просто означают, что ничего не обновлялось — компоненты, включенные в спецификацию --filter, на самом деле не удаляются.

person CJBS    schedule 15.08.2014