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

Начиная с Gradle Android плагины 2.2-альфа4:

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

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

Но, чтобы загрузить библиотеку SDK, вам необходимо: принять лицензионные соглашения или Gradle сообщает вам:

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

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

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

Спасибо!

[РЕДАКТИРОВАТЬ]

Решением было выполнить:

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

И установите его вручную, но это новая функция, предназначенная для Gradle.

[РЕДАКТИРОВАТЬ 2]

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

yes | sudo sdkmanager --licenses

64 ответа

Решение

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

yes | sdkmanager --licenses

Я получал эту ошибку:

      License for package Android SDK Build-Tools 30.0.2 not accepted.

Итак, я пошел в Инструменты -> Менеджер SDK -> Инструменты SDK. Затем я установил библиотеку лицензирования Google Play. Это решило проблему.

Я столкнулся с этим с 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 внутри AS, который создает /licenses папка.

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

Перечитывая примечания к выпуску, он заявляет

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

Это не означает, что это будет работать, если вы еще не установили инструменты Android и уже приняли последние лицензии.

РЕДАКТИРОВАТЬ: Сказав это, он все еще не работает на моем тестовом gubuntu box, пока я не свяжу SDK с AS CI работает нормально, хотя - не уверен, в чем разница...

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

tools/bin/sdkmanager --licenses

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

Для нового sdkmanager полезность:

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

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

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

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

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

РЕДАКТИРОВАТЬ: Вам также необходимо добавить плагин "Установить предварительные условия проекта Android" на этапе сборки, чтобы получить правильный $ANDROID_HOME, если вы используете встроенный менеджер SDK.

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

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

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

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

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

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

Кстати, мы нашли sdkmanager в /var/lib/jenkins/tools/android-sdk/tools/bin, Если твоего нет там, найди его с find / -name "sdkmanager"

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

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

$ ./gradlew build

 
Чтобы соответствовать настройкам JVM для этой сборки, новая JVM будет разветвлена. Пожалуйста, рассмотрите возможность использования демона: https://docs.gradle.org/2.14.1/userguide/gradle_daemon.html.

FAILURE: сборка не удалась, исключение.

* Что пошло не так:
Возникла проблема при настройке проекта ": приложение".
> Вы не приняли лицензионные соглашения следующих компонентов SDK:
  Android SDK Build-Tools 24.0.2....
СТРОИТЬ НЕУДАЧИ

ПРИМЕЧАНИЕ: 2017-04-16

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

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

android update sdk --no-ui --filter build-tools-24.0.2,android-24,extra-android-m2repository
Обновить источники:
  Загрузка https://dl.google.com/android/repository/addons_list-2.xml
  Проверить XML
  Разбирать XML
  Список выбранных дополнений успешно
  Обновить источники
  Выборка URL: https://dl.google.com/android/repository/repository-11.xml
  Проверьте XML: https://dl.google.com/android/repository/repository-11.xml
  Разбор XML:    https://dl.google.com/android/repository/repository-11.xml
...
Ошибка: игнорирование неизвестного фильтра пакетов 'build-tools-24.0.2'
-------------------------------
Идентификатор лицензии: android-sdk-license-xxxxxxxx
Использован: 
 - Платформа SDK Android 7.0, API 24, редакция 2
  - Репозиторий поддержки Android, редакция 39
-------------------------------

...

20 ноября 2015 г.
Принимаете ли вы лицензию 'android-sdk-license-xxxxxxxx' [y/n]: y

Установка архивов:
  Подготовка к установке архивов
  Загрузка SDK Платформа Android 7.0, API 24, редакция 2
  Установка SDK Платформа Android 7.0, API 24, редакция 2
    Установленная SDK платформа Android 7.0, API 24, ревизия 296%)
  Загрузка репозитория поддержки Android, редакция 39
  Установка репозитория поддержки Android, редакция 39
    Установленный репозиторий поддержки Android, ревизия 3999%)
  Готово. Установлено 2 пакета.

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

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

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

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

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"

Кроме того, если вы используете 32- битную версию Linux, все инструменты сборки 23.0.1 являются только 64-битными, поэтому не будут работать. 32-битные пользователи застряли на 23.0.1, единственный способ получить более поздние инструменты сборки - перейти на 64-битную.

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

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

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

$ANDROID_HOME/tools/bin/sdkmanager --licenses

Или для Windows выполнить

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

Хорошо для тех, кто имеет этот вопрос с 2018 года. Приведенные выше ответы не работают для меня вообще. Что ДЕЙСТВИТЕЛЬНО работало, так это открытие Android SDK - нажав кнопку СКАЧАТЬ на панели инструментов и выбрав соответствующие пакеты. После того, как они закончат загрузку, он позволит вам принять лицензионное соглашение.

введите описание изображения здесь

В студии Android для windows. решение:

Перейдите в файл-> настройки -> Apperrance&Behavior -> Системные настройки -> Andriod SDK -> SDK Tools -> проверьте Google Play Licensing Libray -> OK

После установки соберите свое приложение. Это будет работать.

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

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

Примечание: это только для пользователей Mac

У меня была такая же проблема, но ни один из опубликованных ответов не помог, поскольку не былоtools папка присутствует в Library/Android/sdk. (Я использую Android 3.6.3 в Mac OS 10.14.4)

Следующие шаги помогли мне преодолеть ошибку проблемы с лицензированием:

  1. открыто Android Studio
  2. Нажмите cmd + shift + A. Это открываетActions всплывающее окно.
  3. Искать SDK Manager и нажмите Enter, чтобы открыть.
  4. Откроется всплывающее окно для Android SDK. Выберите другую версию Android, кроме уже установленной. (В моем случае Android 10.0 уже был установлен, поэтому я выбрал Android 9.0)
  5. Затем выберите Applyкнопка. Это установит соответствующий SDK.

  1. Теперь запустите приложение, оно должно работать без исключения.

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

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

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

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

Я пошел в Инструменты -> Менеджер SDK -> Инструменты SDK. Затем я установил библиотеку лицензирования Google Play. Это решило проблему.

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

Для окон откройте cmd и войдите в bin каталог с помощью команды:

cd C:\Users\username\AppData\Local\Android\sdk\tools\android\Sdk\tools\bin

тогда беги sdkmanager --licenses Команда, он просит принять лицензии.

cd $ANDROID_HOME/tools/bin ./sdkmanager --update

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

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

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

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

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

echo y | sdkmanager --licenses

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

Временное решение: создать файл file-y.txt с несколькими буквами "y", один за другим, и использовать

call sdkmanager --licenses < file-y.txt

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

Загрузите менеджер SDK по этой ссылке. Затем разархивируйте и используйте следующую команду в терминале.

!tools/bin/sdkmanager --sdk_root=/usr/lib/android-sdk --licenses <<< $'y\ny\ny\ny\ny\ny\ny\n'

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

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

 sdkmanager --licenses

Это подскажет вам все лицензии, которые вы еще не приняли, и вы можете просто ввести y принять каждого из них.

При создании проекта в Android Studio я столкнулся с двумя ошибками:

  1. Лицензия на пакет Android SDK Platform 28 не принимается. (пока я собираю свой проект в Android Studio 4.1)

  2. исключение в потоке main java.lang.noclassdeffounderror javax/xml/bind/annotation/xmlschema (при запуске диспетчера SDK для принятия лицензии)

Для меня это была проблема с java-версией. Я установил JDK вместо java. ДЛЯ РЕШЕНИЯ ПРОБЛЕМЫ я сделал следующие шаги.

Для Windows:

Шаг 1. Загрузите и установите последнюю версию JAVA с https://www.java.com/en/download/.

Шаг 2. Найдите "Просмотр дополнительных настроек системы" в кнопке меню "Пуск" (значок Windows).

Шаг 3: нажмите "Переменные среды"

Шаг 4: в разделе "Системные переменные" нажмите "Создать", теперь установлено "Variable name: JAVA_HOME" и "Variable value: C:\Program Files\Java\jre1.8.0_271"(добавьте сюда путь к последней установленной java). Затем" ОК ", " ОК "и" ОК ".

Шаг 5: откройте cmd от имени администратора и введите следующие команды:

  1. cd C:\Users\kevin\AppData\Local\Android\Sdk\tools\bin (* смени имя пользователя здесь)

  2. sdkmanager --licenses

На все вопросы нажимайте "y".

Шаг 6. Снова перезапустите Android Studio.

СДЕЛАННЫЙ.

Сообщите мне, если у кого-то возникнут проблемы при выполнении вышеуказанных шагов.

Вот моя настройка Docker.
Вы можете следовать из простой среды Linux.

Обратите внимание, что yes | а также --licenses --sdk_root=${ANDROID_HOME} статьи.
Похоже на то sdkmanager --update отменяет соглашения, так yes | появляется дважды.

FROM openjdk:8
# Install dev-essential(gnumake)
RUN apt update
RUN apt install -y build-essential
# Set ENV
ENV SDK_URL="https://dl.google.com/android/repository/sdk-tools-linux-4333796.zip" \
    ANDROID_HOME="/usr/local/android-sdk" \
    ANDROID_VERSION=28 \
    ANDROID_BUILD_TOOLS_VERSION=28.0.3 \
    GRADLE_VERSION=4.10.3 \
    NDK_VERSION=r16b
# Download Android SDK
RUN mkdir "$ANDROID_HOME" .android \
    && cd "$ANDROID_HOME" \
    && curl -o sdk.zip $SDK_URL \
    && unzip sdk.zip \
    && rm sdk.zip \
    && yes | $ANDROID_HOME/tools/bin/sdkmanager --licenses --sdk_root=${ANDROID_HOME}
# Install Android Build Tool and Libraries
RUN $ANDROID_HOME/tools/bin/sdkmanager --update
RUN yes | $ANDROID_HOME/tools/bin/sdkmanager "build-tools;${ANDROID_BUILD_TOOLS_VERSION}" \
    "platforms;android-${ANDROID_VERSION}" \
    "platform-tools" --sdk_root=${ANDROID_HOME}
# Install Gradle
RUN wget https://services.gradle.org/distributions/gradle-${GRADLE_VERSION}-all.zip
RUN mkdir /opt/gradle
RUN unzip gradle-${GRADLE_VERSION}-all.zip -d /opt/gradle
ENV PATH=${PATH}:/opt/gradle/gradle-${GRADLE_VERSION}/bin
# Install NDK
RUN wget https://dl.google.com/android/repository/android-ndk-${NDK_VERSION}-linux-x86_64.zip
RUN mkdir /opt/ndk-bundle
RUN unzip android-ndk-${NDK_VERSION}-linux-x86_64.zip -d /opt/ndk-bundle
ENV PATH=${PATH}:/opt/ndk-bundle

RUN mkdir /application
WORKDIR /application
Другие вопросы по тегам