Автоматически принимать все лицензии SDK

С gradle Android Плагины 2.2-alpha4:

Gradle попытается загрузить отсутствующие пакеты SDK, которые проект зависит от

что удивительно круто и было известно, чтобы быть проект JakeWharton.

но, чтобы загрузить библиотеку SDK, вам нужно: принять лицензионные соглашения или gradle говорит вам:

вы не приняли лицензионные соглашения следующего пакета SDK компоненты: [Android SDK Build-Tools 24, Платформа Android SDK 24]. Перед построением проекта необходимо принять лицензию соглашения и завершить установку недостающих компонентов использование Android Studio SDK Manager. Кроме того, чтобы научиться перенести лицензионные соглашения с одной рабочей станции на другую, перейти к http://d.android.com/r/studio-ui/export-licenses.html

и это проблема, потому что я хотел бы установить все зависимости sdk при выполнении gradle build.

Я ищу решение для автоматического принятия всех лицензий. Может быть, сценарий gradle ? У тебя есть какие-нибудь идеи ?

спасибо!

[EDIT]

раствор был выполнить:

android update sdk --no-ui --filter build-tools-24.0.0,android-24,extra-android-m2repository

и установите его вручную, но это новая функция gradle, чтобы сделать это.

[EDIT 2]

лучшим решением является использование sdkmananger:

yes | sudo sdkmanager --licenses

30 ответов


я столкнулся с этим с alpha5 предварительный просмотр.

Джейк Уортон указал мне, что в настоящее время вы можете использовать

mkdir -p "$ANDROID_SDK/licenses"
echo -e "\n8933bad161af4178b1185d1a37fbf41ea5269c55" > "$ANDROID_SDK/licenses/android-sdk-license"
echo -e "\n84831b9409646a918e30573bab4c9c91346d8abd" > "$ANDROID_SDK/licenses/android-sdk-preview-license"

воссоздать ток $ANDROID_HOME/license папка на вашей машине. Это будет иметь тот же результат, что и процесс, описанный в ссылке ошибки msg (http://tools.android.com/tech-docs/new-build-system/license).

хэши-это sha1s текста лицензии, который, я полагаю, будет периодически обновляться, поэтому этот код будет работать только так долго :)

и установите его вручную, но это новая функция gradle, чтобы сделать это.

сначала я был удивлен, что это не сработало из коробки, даже когда я принял лицензии на именованные компоненты через android инструмент, но мне было указано на его менеджер SDK внутри, поскольку это создает .

Я думаю, что официальные инструменты не хотел бы пропустить этот шаг юридические соображения.

перечитывая релизе говорится

SDK auto-download: Gradle попытается загрузить отсутствующие пакеты SDK, от которых зависит проект.

что не означает, что он будет работать, если вы еще не установили Android tools и уже приняли последнюю лицензию(ы).

EDIT: говоря это, он все еще не работает на моем тестовом поле gubuntu, пока я не свяжу SDK до AS. CI работает нормально, хотя-нет знаете, в чем разница...


AndroidSDK может, наконец, принять лицензии.

yes | sdkmanager --licenses

для новейшей Android Studio (2.3) лучший способ обновить/принять все лицензии-запустить:

tools/bin/sdkmanager --licenses

возможно, Вам все равно придется скопировать файлы лицензий в другие места на основе вашей установки.


Если вы используете Jenkins, вы можете использовать следующий скрипт bash в качестве первого шага в процессе сборки:

(while sleep 3; do echo "y"; done) | $ANDROID_HOME/tools/android update sdk -u

Это, конечно, установит все доступные обновления, но это сэкономит вам время, если вы можете сэкономить место на диске. Сон, чтобы избежать сломанной строки чтения в программе установки, так как" да " не работает должным образом в этом случае.

EDIT: вам также нужно добавить плагин "Install Android project prerequisites" на шаге сборки, чтобы получить исправьте $ANDROID_HOME, если вы используете встроенный менеджер SDK.


на новый sdkmanager утилиты:

yes | $ANDROID_HOME/tools/bin/sdkmanager "build-tools;24.0.3"

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


к сожалению, способ, как OP первоначально решил, он не всегда работает. Если вы обнаружите из сообщения об ошибке, что ваши сборки current build-tools версия. Возможно, это более высокая версия build-tools, которая отсутствует. В этом случае вам нужно вручную запустить SDK Manager и добавить инструменты сборки и принять лицензию.

согласно инструкциям OP, это выглядит следующим образом.

$ ./gradlew build

 
To honour the JVM settings for this build a new JVM will be forked. Please consider using the daemon: https://docs.gradle.org/2.14.1/userguide/gradle_daemon.html.

FAILURE: Build failed with an exception.

* What went wrong:
A problem occurred configuring project ':app'.
> You have not accepted the license agreements of the following SDK components:
  [Android SDK Build-Tools 24.0.2].

...
BUILD FAILED

Примечание: 2017-04-16

на android инструмент теперь устарел в пользу нового sdkmanager. Пожалуйста, смотрите Джо Лоусона ответ и последующие сообщения с марта (2017) и далее.

затем настройте команду следующим образом:

android update sdk --no-ui --filter build-tools-24.0.2,android-24,extra-android-m2repository
Refresh Sources:
  Fetching https://dl.google.com/android/repository/addons_list-2.xml
  Validate XML
  Parse XML
  Fetched Add-ons List successfully
  Refresh Sources
  Fetching URL: https://dl.google.com/android/repository/repository-11.xml
  Validate XML: https://dl.google.com/android/repository/repository-11.xml
  Parse XML:    https://dl.google.com/android/repository/repository-11.xml
...
Error: Ignoring unknown package filter 'build-tools-24.0.2'
-------------------------------
License id: android-sdk-license-xxxxxxxx
Used by: 
 - SDK Platform Android 7.0, API 24, revision 2
  - Android Support Repository, revision 39
-------------------------------

...

November 20, 2015
Do you accept the license 'android-sdk-license-xxxxxxxx' [y/n]: y

Installing Archives:
  Preparing to install archives
  Downloading SDK Platform Android 7.0, API 24, revision 2
  Installing SDK Platform Android 7.0, API 24, revision 2
    Installed SDK Platform Android 7.0, API 24, revision 296%)
  Downloading Android Support Repository, revision 39
  Installing Android Support Repository, revision 39
    Installed Android Support Repository, revision 3999%)
  Done. 2 packages installed.

запуск этого снова, по-прежнему не делает Gradle счастливым. Поэтому ручное принятие является единственным решением, пока кто-то не придумает что-то лучше. (Радовать делай!)


это решило мою ошибку

echo yes | $ANDROID_HOME/tools/bin/sdkmanager "build-tools;25.0.2"

на android инструмент устарел, и вы должны использовать sdkmanager вместо. sdkmanager также записывает файл лицензий, когда вы впервые принимаете его. Лицензия изменяется в зависимости от того, какой SDK вы используете, даже если команда

echo -e "\n8933bad161af4178b1185d1a37fbf41ea5269c55" > "$ANDROID_SDK/licenses/android-sdk-license"

работает на некоторых системах. Это не сработает на всех. Некоторые установки SDK ожидают, что файл лицензии закончится без новой строки в файле, поэтому попробуйте добавить -n команде echo.

echo -n -e "\n8933bad161af4178b1185d1a37fbf41ea5269c55" > "$ANDROID_SDK/licenses/android-sdk-license"

если это не работает вы можете попробовать используя base64 вместо кодирования.

Итак, чтобы обнаружить мою лицензию:

$> rm ${ANDROID_HOME}/
$> unzip tools_r25.2.3-linux.zip -d ${ANDROID_HOME}
$> ${ANDROID_HOME}/tools/bin/sdkmanager "system-images;android-23;default;x86_64"

он предложит вам принять лицензионное. После принятия он скопирует его в ${ANDROID_HOME}/licenses/android-sdk-license. Чтобы убедиться, что вы всегда получите именно то, что написано использовать base64.

$> base64 ${ANDROID_HOME}/licenses/android-sdk-license
Cjg5MzNiYWQxNjFhZjQxNzhiMTE4NWQxYTM3ZmJmNDFlYTUyNjljNTU=

затем вы можете использовать base64 -d точно воссоздать файл.

$> echo Cjg5MzNiYWQxNjFhZjQxNzhiMTE4NWQxYTM3ZmJmNDFlYTUyNjljNTU= | base64 -d > ${ANDROID_HOME}/licenses/android-sdk-license

вы можете проверить, является ли записанный файл тем, что ожидается, запустив sha1sum на нем.

$> sha1sum ${ANDROID_HOME}/licenses/android-sdk-license
da6b80c9c47b41c0bf7032938e7137a58a3dc249

если вы запустите yes | sdkmanager --licenses, затем мы печатаем содержимое $ANDROID_HOME/licenses/android-sdk-license,

мы получим этот

# cat $ANDROID_HOME/licenses/android-sdk-license

8933bad161af4178b1185d1a37fbf41ea5269c55

d56f5187479451eabf01fb78af6dfcb131a6481e

для GitLab CI, чтобы принять Android SDK Build-Tools 26.0.2 лицензии, вам нужно запустить это

before_script:
  - mkdir -p $ANDROID_HOME/licenses
  - echo "8933bad161af4178b1185d1a37fbf41ea5269c55" > $ANDROID_HOME/licenses/android-sdk-license
  - echo "d56f5187479451eabf01fb78af6dfcb131a6481e" >> $ANDROID_HOME/licenses/android-sdk-license

обратите внимание, что для тех, кто подходит к этому вопросу в настоящее время, build-tools-24.0.2 (я думаю) теперь считается устаревшим, поэтому вы получите:

 Error: Ignoring unknown package filter 'build-tools-24.0.2'

при запуске различные команды, которые были предложены для их установки.

решение состоит в том, чтобы добавить --all:

android update sdk --no-ui --all --filter "build-tools-24.0.2"

также, если вы находитесь на 32bit linux,все после инструментов сборки 23.0.1 только 64bit, так не побежит. 32bit пользователи застряли на 23.0.1, единственный способ чтобы получить более поздние инструменты сборки, нужно переключиться на 64bit.


мы нашли ту же проблему, строя проект на Дженкинсе. С buildToolsVersion '25.0.2', мы должны принять лицензии перед зданием. В нашем случае нам нужно было бежать:

./sdkmanager --update Это просит нас принять лицензию для sdkmanager, а затем

./sdkmanager --licenses, который просит нас принять новые лицензии не были приняты

помните: запустите эти комманы с тем же пользователем, что jenkins делает. В моем Debian пользователь Jenkins просто jenkins. Другими словами: делать это as root создаст принятые лицензии как root, поэтому Дженкинс не будет их читать.

кстати, мы нашли sdkmanager at /var/lib/jenkins/tools/android-sdk/tools/bin. Если вашего нет, найдите его с помощью find / -name "sdkmanager"


для сообщения об ошибке о SDK api номер 25:

android update sdk --no-ui --all --filter build-tools-25.0.1,android-25,extra-android-m2repository


Если вы используете tools/bin/sdkmanager --licenses вам все равно нужно человеческое взаимодействие. У меня проблема с использованием моего GitLab CI. Вот мое решение:--4-->

wget --quiet --output-document=tools.zip https://dl.google.com/android/repository/sdk-tools-linux-3859397.zip
unzip -qq tools.zip
echo y | tools/bin/sdkmanager "platforms;android-25"
echo y | tools/bin/sdkmanager "platform-tools"
echo y | tools/bin/sdkmanager "build-tools;25.0.2"
echo y | tools/bin/sdkmanager "extras;android;m2repository"
echo y | tools/bin/sdkmanager "extras;google;m2repository"

echo y скажет "Да", если возникнут какие-либо вопросы, но вам нужно сделать одну строку на пакет установки


Я решил эту проблему, создав публичное репозиторий git с принятыми файлами лицензий. Тогда я использую wget чтобы получить эти лицензии на любой машине, мне нужно в [sdk-dir] / лицензии перед ./gradlew построить мой проект.


Ok для тех, кто имеет эту проблему с 2018 года. Вышеприведенные ответы не сработали для меня вообще. Что действительно работало, это открытие Android SDK-нажатие кнопки загрузки на панели инструментов и выбор соответствующих пакетов. После того, как они закончат загрузку, это позволит вам принять лицензионное соглашение.

enter image description here


у меня была такая же ошибка при использовании Cordova.

проблема была связана с тем, что я установил Android Sdk через Android Studio и через apt С apt install android-sdk adb. И Кордова вызывала файлы, установленные через apt вместо файлов в моем домашнем каталоге.

это сработало, как только я изменил путь к SDK в bash:

# Change path
export ANDROID_HOME="$HOME/Android/Sdk/"
echo "Android home = $ANDROID_HOME"
# Accept licenses
eval "${ANDROID_HOME}/tools/bin/sdkmanager --licenses"
# Run Cordova
cordova build android

затем я удалил системные файлы, которые больше не используются: apt remove android-sdk adb.


вы можете принять всю лицензию, выполнив следующую команду:

 sdkmanager --licenses

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


вы также можете просто выполнить

$ANDROID_HOME / tools/bin / sdkmanager --лицензии

или для Windows execute

%ANDROID_HOME% / tools/bin / sdkmanager --licenses


для тех, у кого есть проблемы с SDK командной строки, причина, по которой он не найдет лицензии, которые вы приняли, заключается в том, что они были написаны в другое место, чем $ANDROID_HOME/licenses где они должны быть.

Я нашел самое простое решение-принять лицензии следующим образом:

$ANDROID_HOME/bin/sdkmanager --licenses --sdk_root=$ANDROID_HOME

Примечание: это предполагает, что вы установили ANDROID_HOME чтобы указать, где установлен ваш sdk.


скопируйте все лицензии / каталог и вставьте его в домашний каталог Android SDK на машине, где вы хотите построить свои проекты.

https://developer.android.com/studio/intro/update.html#download-with-gradle

это решило проблему для меня


в Windows PowerShell можно сделать

for($i=0;$i -lt 30;$i++) { $response += "y`n"}; $response | sdkmanager --licenses

Это гораздо более гибкий и не требует ручного вмешательства. Число 30 произвольно, должно быть достаточно, чтобы покрыть количество принятых лицензий, но при необходимости может быть увеличено


cd $ANDROID_HOME / инструменты / bin ./ sdkmanager --update


Я бегу

#react-native run-android 

от терминала и встретил эту проблему. Для вручную перейдите в Android Studio - > Android SDK - > платформа SDK Нажмите Показать детали пакетов и проверьте:

+ Google APIs
+ Android SDK Platform 23
+ Intel x86 Atom_64 System Image
+ Google APIs Intel x86 Atom_64 System Image

при установке пакетов проверьте accept license = > может решить проблему.


на Mac OSX перейдите к sdk/tools/bin

затем запустите ./sdkmanager --licenses, и примите все лицензии.


Я, наконец, нашел решение для Windows, чтобы иметь реальную бесшумную и автоматическую установку:

в Windows следующий синтаксис не работает:

echo y | sdkmanager --licenses

Кажется, что "y" неправильно отправлены в программу java, вызванную в пакете.

обходным путем является создание файла file-y.txt с несколькими "y", по очереди, и использовать

call sdkmanager --licenses < file-y.txt

это создаст необходимые файлы в каталоге лицензий. Проблема, вероятно, связана с использование BufferedReader в Java


есть 2 подхода, которые я могу найти на эту проблему.

  1. обновите sdk tools с командным окном, приняв лицензионное соглашение следующим образом, просто измените версию в соответствии с вашими потребностями.

    андроид обновление пакета SDK ... нет-интерфейс фильтра --строить-инструменты-25.0.2,андроид-25,экстра-андроид-m2repository

  2. второй подход-копирование папок лицензий в корневой каталог Android. Перейти к вашей машине разработки открытой Android Studio. Находить расположение sdk из меню структура проекта. (C:\Users\UserName\AppData\Local\Android\sdk). Под этим каталогом должна быть папка с лицензиями. Скопируйте эту папку с содержимым. Вставьте эту папку на серверной машине Jenkins (или там, где вы столкнулись с этой проблемой) в корневую папку Android sdk. (C:\Users\UserName.Дженкинс\инструменты\android-sdk)


наконец, эти 2 простых шага работали для меня в windows 10.

1) Убедитесь, что вы обновили свои инструменты сборки android и api. На вашем Android Sdk просто нажмите на установить пакеты для установки доступных обновлений.

2) Запустите Android Studio, и вам будет предложено установить reqiured build tools для уже обновленного api и tools, это установит свойства инструментов сборки, включая лицензии и ваши сделано.


Я перехожу к:

/usr/lib/android-sdk/licenses

и я набрал в терминале:

echo -e "\n8933bad161af4178b1185d1a37fbf41ea5269c55" > $ANDROID_SDK/licenses/android-sdk-license"

с разрешением root. И теперь это работает на меня.


для реагировать родные приложения:

Если у вас есть эта проблема для родного приложения React, в дополнение к вышеупомянутым шагам, убедитесь, что у вас есть локальный.файл свойств в каталоге android (AppName/android) вашего приложения, который указывает на ваш каталог "sdk":

sdk.dir=/PATH_TO_SDK/

Я попробовал все вышеперечисленные команды на машине windows 10 но решение состояло в том, чтобы использовать SDKMANAGER для проверки и принятия лицензий купить установку отсутствующих версий

enter image description here