Автоматически принимать все лицензии 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
И установить его вручную, но это новая функциональная цель.
[РЕДАКТИРОВАТЬ 2]
Лучшее решение - использовать sdkmananger:
yes | sdkmanager --licenses
Ответы
Ответ 1
AndroidSDK может наконец принять лицензии.
yes | sdkmanager --licenses
ОБНОВЛЕНИЕ:
как указано в комментариях @MoOx, на macOS вы можете сделать
yes | sudo ~/Library/Android/sdk/tools/bin/sdkmanager --licenses
как указано в комментариях @pho, @mikebridge и @Noitidart для Windows, вы можете сделать
cmd.exe ""/K"%LocalAppData%\Android\sdk\tools\bin\sdkmanager.bat --licenses"
не забудьте установить Java, прежде чем
Ответ 2
Я столкнулся с этим с предварительным просмотром 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).
Хеши - это символы текста лицензии, которые, я думаю, будут периодически обновляться, поэтому этот код будет работать только так долго:)
И установите его вручную, но это новая функция gradle, чтобы сделать это.
Сначала я был удивлен, что это не работает из коробки, даже когда я принял лицензии на именованные компоненты с помощью инструмента android
, но мне было указано, что он является менеджером SDK внутри AS, который создает папке /licenses
.
Я думаю, что официальные инструменты не захотят пропустить этот шаг по юридическим причинам.
Перечитывая заметки о выпуске, он указывает
Автозагрузка SDK: gradle попытается загрузить отсутствующие пакеты SDK, от которых зависит проект.
Это не значит, что он будет работать, если вы еще не установили инструменты Android и уже приняли последние лицензии.
EDIT: заявив, что он все еще не работает в моем тестовом поле gubuntu, пока я не свяжу SDK с AS. CI работает нормально, хотя - не уверен, в чем разница...
Ответ 3
Для новейшей версии Android Studio (2.3) лучший способ обновить/принять все лицензии - запустить:
cd $ANDROID_HOME
tools/bin/sdkmanager --licenses
вам может потребоваться скопировать файлы лицензий в другие места в зависимости от настроек.
Ответ 4
Для новой утилиты sdkmanager
:
yes | $ANDROID_HOME/tools/bin/sdkmanager "build-tools;24.0.3"
Там немного задержки между yesses, поэтому команда может висеть с лицензией, показывая какое-то время, но это не требует вмешательства человека.
Ответ 5
Если вы используете Jenkins, вы можете использовать следующий bash script как первый шаг в процессе сборки:
(while sleep 3; do echo "y"; done) | $ANDROID_HOME/tools/android update sdk -u
Это, конечно, установит ВСЕ доступные обновления, но это сэкономит вам некоторое время, если вы сможете сэкономить место на диске. Сон состоит в том, чтобы избежать сломанной readline в программе установки, так как "yes" в этом случае не работает должным образом.
EDIT: вам также нужно добавить плагин "Установить предварительные условия Android-проекта" на этапе сборки, чтобы получить правильный $ANDROID_HOME, если вы используете встроенный менеджер SDK.
Ответ 6
это решило мою ошибку
echo yes | $ANDROID_HOME/tools/bin/sdkmanager "build-tools;25.0.2"
Ответ 7
К сожалению, путь, который первоначально решал ОП, не всегда работает.
Если из сообщения об ошибке вы узнаете, какие ваши сборки строят текущие сборщики версия. Может быть, это более высокая версия встроенных инструментов, которые отсутствуют. В этом случае вам нужно вручную запустить 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 счастливым. Так что ручное принятие - единственное решение, пока кто-то не придумает что-то лучшее. (Пожалуйста, сделайте!)
Ответ 8
Мы нашли ту же проблему при создании проекта на Дженкинс. С buildToolsVersion '25.0.2'
мы должны принять лицензии перед buildToolsVersion '25.0.2'
. В нашем случае нам нужно было запустить:
yes | sdkmanager --update
yes | sdkmanager --update
который принимает лицензии для самого sdkmanager, а затем
yes | sdkmanager --licenses
yes | sdkmanager --licenses
который принимает новые лицензии, ранее не принятые
Помните: запускайте эти комманы с тем же пользователем, что и jenkins
. В нашем Debian пользователь Jenkins - это просто jenkins
. Другими словами: выполнение этого с root
создаст принятые лицензии как root
, поэтому Jenkins не будет их читать.
Кстати, мы нашли sdkmanager
в /var/lib/jenkins/tools/android-sdk/tools/bin
. Если вас там нет, найдите его с помощью команды find / -name "sdkmanager"
Ответ 9
Инструмент 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
Ответ 10
если вы запустите 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
Ответ 11
Обратите внимание, что для тех, кто приходит к этому вопросу в настоящее время, 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-битный.
Ответ 12
Если вы используете 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
ответит "да", если возникнут какие-либо вопросы, но вам нужно сделать одну строку на пакет installe
Ответ 13
Вы также можете просто выполнить:
$ANDROID_HOME/tools/bin/sdkmanager --licenses
И в Windows выполните:
%ANDROID_HOME%/tools/bin/sdkmanager --licenses
Ответ 14
Для сообщения об ошибке SDK api number 25:
android update sdk --no-ui --all --filter build-tools-25.0.1,android-25,extra-android-m2repository
Ответ 15
ОК ДЛЯ ЛЮБОГО ИХ ЭТОГО ВОПРОСА С 2018 года. Вышеупомянутые ответы НЕ работали для меня вообще. В работе DID открылся Android SDK - нажатие кнопки DOWNLOAD на панели инструментов и выбор соответствующих пакетов. После завершения загрузки вы сможете принять лицензионное соглашение.
![enter image description here]()
Ответ 16
Я решил эту проблему, создав публичный репозиторий git с принятыми файлами лицензий. Затем я использую wget
для получения этих лицензий на любом компьютере, который мне нужен, в каталог [sdk-dir]/license, прежде чем запускать ./gradlew для создания моего проекта.
Ответ 17
Для тех, у кого проблемы с SDK командной строки, причина, по которой он не найдет лицензию, которую вы приняли, состоит в том, что они были написаны в другом месте, чем $ANDROID_HOME/licenses
где они должны быть.
Я нашел, что самым простым решением было принять такие лицензии:
$ANDROID_HOME/bin/sdkmanager --licenses --sdk_root=$ANDROID_HOME
Примечание. Предполагается, что вы установили ANDROID_HOME
чтобы указать, где установлен ваш sdk.
Ответ 18
cd $ANDROID_HOME/tools/bin yes |./sdkmanager --update
или же
yes | $ANDROID_HOME/tools/bin/sdkmanager --update
Ответ 19
Я наконец нашел решение в Windows, чтобы иметь настоящую тихую и автоматическую установку:
В Windows следующий синтаксис не работает:
echo y | sdkmanager --licenses
Кажется, что "y" неправильно отправлено в программу java, вызванную в пакет.
Обходной путь заключается в создании файла файла y.txt с несколькими "y", по одному, а также для использования
call sdkmanager --licenses < file-y.txt
Это создаст необходимые файлы в каталоге лицензий. Проблема, вероятно, связана с использованием BufferedReader в Java
Ответ 20
Скопируйте все лицензии/каталог и вставьте его в домашний каталог Android SDK на компьютере, где вы хотите создать свои проекты.
https://developer.android.com/studio/intro/update.html#download-with-gradle
это решило проблему для меня
Ответ 21
У меня была такая же ошибка при использовании Кордовы.
Проблема заключалась в том, что я установил 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
.
Ответ 22
Вы можете принять всю лицензию, выполнив следующую команду:
sdkmanager --licenses
Это позволит вам просмотреть все лицензии, которые вы еще не приняли, и вы можете просто ввести y
чтобы принять каждый из них.
Ответ 23
Вот моя настройка 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
Ответ 24
для windows откройте cmd и войдите в каталог bin
, выполнив команду:
cd C:\Users\username\AppData\Local\Android\sdk\tools\android\Sdk\tools\bin
затем запустите sdkmanager --licenses
, она попросит принять лицензии.
Ответ 25
В Windows PowerShell вы можете сделать
for($i=0;$i -lt 30;$i++) { $response += "y`n"}; $response | sdkmanager --licenses
Это намного более гибкое и требует нулевого ручного вмешательства. Число 30 произвольное, должно быть достаточно для покрытия количества лицензионных соглашений, но при необходимости может быть увеличено
Ответ 26
По состоянию на июль 2019 года самым простым способом является использование: flutter doctor --android-licenses
в командной строке.
Он продолжает отображать непринятые T & C SDK один за другим, и вам предоставляется возможность выбрать "y/n". Выберите y для всех.
С другой стороны, когда вы запускаете flutter doctor
, он запускает диагностику набора инструментов Android, которая показывает, сколько лицензий еще не принято, и предлагает вам запустить его с флагом --android-licenses.
Ответ 27
Я запустил
#react-native run-android
из терминала и встретил эту проблему.
Для ручного перехода на Android Studio → Android SDK → SDK Platform
Нажмите "Показать детали пакета" и отметьте:
+ Google APIs
+ Android SDK Platform 23
+ Intel x86 Atom_64 System Image
+ Google APIs Intel x86 Atom_64 System Image
При установке пакетов проверить accept license = > может решить проблему.
Ответ 28
В Mac OSX перейдите к sdk/tools/bin
Затем запустите ./sdkmanager --licenses
и примите все лицензии.
Ответ 29
В Windows перейдите в командную строку и введите следующие команды:
cd C:\Users\<Username>\AppData\Local\Android\Sdk\tools\bin
sdkmanager --licenses
Это приведет к генерации лицензий, продолжая нажимать "y", чтобы принять все лицензии.
Ответ 30
Я перехожу к:
/usr/lib/android-sdk/licenses
и я набрал терминал:
echo -e "\n8933bad161af4178b1185d1a37fbf41ea5269c55" > $ANDROID_SDK/licenses/android-sdk-license"
С правами root.
И теперь это работает для меня.