Автоматически принимать все лицензии 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)
Следующие шаги помогли мне преодолеть ошибку проблемы с лицензированием:
- открыто
Android Studio
- Нажмите
cmd + shift + A
. Это открываетActions
всплывающее окно. - Искать
SDK Manager
и нажмите Enter, чтобы открыть. - Откроется всплывающее окно для
Android SDK
. Выберите другую версию Android, кроме уже установленной. (В моем случае Android 10.0 уже был установлен, поэтому я выбрал Android 9.0) - Затем выберите
Apply
кнопка. Это установит соответствующий SDK.
- Теперь запустите приложение, оно должно работать без исключения.
Для тех, у кого проблемы с 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
Команда, он просит принять лицензии.
В 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 я столкнулся с двумя ошибками:
Лицензия на пакет Android SDK Platform 28 не принимается. (пока я собираю свой проект в Android Studio 4.1)
исключение в потоке 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 от имени администратора и введите следующие команды:
cd C:\Users\kevin\AppData\Local\Android\Sdk\tools\bin
(* смени имя пользователя здесь)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