Автоматически принимать все лицензии 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
+401
источник поделиться
44 ответа
  • 1
  • 2

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, прежде чем

+298
источник

Я столкнулся с этим с предварительным просмотром 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 работает нормально, хотя - не уверен, в чем разница...

+175
источник
другие ответы

Связанные вопросы


Похожие вопросы

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

cd $ANDROID_HOME
tools/bin/sdkmanager --licenses

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

+128
источник

Для новой утилиты sdkmanager:

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

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

+56
источник

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

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

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

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

+42
источник

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

echo yes | $ANDROID_HOME/tools/bin/sdkmanager "build-tools;25.0.2"
+31
источник

К сожалению, путь, который первоначально решал ОП, не всегда работает. Если из сообщения об ошибке вы узнаете, какие ваши сборки строят текущие сборщики версия. Может быть, это более высокая версия встроенных инструментов, которые отсутствуют. В этом случае вам нужно вручную запустить 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 счастливым. Так что ручное принятие - единственное решение, пока кто-то не придумает что-то лучшее. (Пожалуйста, сделайте!)

+30
источник

Мы нашли ту же проблему при создании проекта на Дженкинс. С 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"

+30
источник

Инструмент 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
+21
источник

если вы запустите 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
+19
источник

Обратите внимание, что для тех, кто приходит к этому вопросу в настоящее время, 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-битный.

+16
источник

Если вы используете 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
+12
источник

Для сообщения об ошибке SDK api number 25:

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

+11
источник

ОК ДЛЯ ЛЮБОГО ИХ ЭТОГО ВОПРОСА С 2018 года. Вышеупомянутые ответы НЕ работали для меня вообще. В работе DID открылся Android SDK - нажатие кнопки DOWNLOAD на панели инструментов и выбор соответствующих пакетов. После завершения загрузки вы сможете принять лицензионное соглашение.

enter image description here

+9
источник

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

+7
источник

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

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

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

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

+6
источник

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

или же

yes | $ANDROID_HOME/tools/bin/sdkmanager --update

+4
источник

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

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

echo y | sdkmanager --licenses

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

Обходной путь заключается в создании файла файла y.txt с несколькими "y", по одному, а также для использования

call sdkmanager --licenses < file-y.txt

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

+4
источник

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

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

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

+3
источник

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

Проблема заключалась в том, что я установил 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.

+3
источник

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

 sdkmanager --licenses

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

+3
источник

Вот моя настройка 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
+3
источник

для windows откройте cmd и войдите в каталог bin, выполнив команду:

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

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

+3
источник

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

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

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

+2
источник

По состоянию на июль 2019 года самым простым способом является использование: flutter doctor --android-licenses в командной строке.

Он продолжает отображать непринятые T & C SDK один за другим, и вам предоставляется возможность выбрать "y/n". Выберите y для всех.

С другой стороны, когда вы запускаете flutter doctor, он запускает диагностику набора инструментов Android, которая показывает, сколько лицензий еще не принято, и предлагает вам запустить его с флагом --android-licenses.

+2
источник

Я запустил

#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 = > может решить проблему.

+1
источник

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

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

+1
источник

В Windows перейдите в командную строку и введите следующие команды:

cd C:\Users\<Username>\AppData\Local\Android\Sdk\tools\bin
sdkmanager --licenses

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

+1
источник

Я перехожу к:

/usr/lib/android-sdk/licenses

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

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

С правами root. И теперь это работает для меня.

0
источник
  • 1
  • 2

Посмотрите другие вопросы по меткам или Задайте вопрос