it-swarm.com.ru

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

Начиная с Gradle Android плагины 2.2-alpha4

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
312
nsvir

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

yes | sdkmanager --licenses
192
nsvir

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

166
Dori

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

tools/bin/sdkmanager --licenses

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

117
bgies

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

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

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

51
A. Rager

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

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

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

Правка: Вам также необходимо добавить плагин «Установить предварительные условия проекта Android» на этапе сборки, чтобы получить правильный $ Android_HOME, если вы используете встроенный менеджер SDK.

40
raven

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

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

$ ./gradlew build

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

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

 * Что пошло не так : 
 Произошла проблема при настройке проекта ': app' .
> Вы не приняли лицензионные соглашения следующих компонентов SDK: 
 [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
 Обновление источники: 
 Загрузка 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
...
Error: Игнорирование неизвестного фильтра пакетов 'build-tools-24.0.2' 
- ------------------------------
 Идентификатор лицензии: Android-sdk-license-xxxxxxxx 
 Используется:
 - SDK Platform 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 счастливым. Таким образом, ручное принятие является единственным решением, пока кто-то не придумает что-то лучшее (Пожалуйста, сделай!)

29
not2qubit

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

echo yes | $Android_HOME/tools/bin/sdkmanager "build-tools;25.0.2"
27
Cristian Agudelo

Инструмент 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
20
Joe Lawson

если вы запускаете 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
jk2K

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

yes | sdkmanager --update, который принимает лицензии для самого sdkmanager, а затем

yes | sdkmanager --licenses, который принимает новые лицензии, ранее не принятые

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

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

17
Roc Boronat

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

15
JosephH

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

12
Thibaut Mottet

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

$Android_HOME/tools/bin/sdkmanager --licenses

И в Windows выполните:

%Android_HOME%/tools/bin/sdkmanager --licenses
11
r1si

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

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

10
ofir_aghai

Хорошо для тех, у кого есть этот вопрос на 2018 год. Приведенные выше ответы не работают для меня вообще. DID работал над тем, чтобы открыть Android SDK - нажать кнопку ЗАГРУЗИТЬ на панели инструментов и выбрать соответствующие пакеты. После того, как они закончат загрузку, он позволит вам принять лицензионное соглашение.

enter image description here

7
user2967081

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

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

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

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

6
monkjack

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

5
IgorGanapolsky

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

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

echo y | sdkmanager --licenses

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

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

call sdkmanager --licenses < file-y.txt

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

4
moobyfr

У меня была такая же ошибка при использовании 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.

3
A.L

Вот моя настройка 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
Youngjae

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

 sdkmanager --licenses

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

3
Manoj Shrestha

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

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

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

3
surya

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

или же 

$Android_HOME/tools/bin/sdkmanager --update

2
Jimmy Yin

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

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

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

2
Mark Johnson

Я бегу 

#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

При установке пакетов установите флажок принять лицензию =>, чтобы решить проблему.

1
Phuc Nguyen

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

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

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

1
Deepak Kumrawat

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

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

1
Micheal C Wallas

Я перехожу к:

/usr/lib/Android-sdk/licenses

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

echo -e "\n8933bad161af4178b1185d1a37fbf41ea5269c55" > $Android_SDK/licenses/Android-sdk-license"

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

0
Vinicius de Santana

Я получил ту же ошибку, что лицензия не принята ... при попытке настроить среду Android для запуска нативного приложения React в эмуляторе Android для уровня API 23.

Я сделал следующее:

На основании ссылки https://developer.Android.com/studio/intro/update#download-with-gradle

Проверено, загружена ли лицензия через менеджер SDK Android Studio 3.1.3.

Установите Android_HOME как C: \\ Android\Sdk

(он был установлен в C:\Users\имя пользователя\AppData\Local\Android\Sdk)

Ошибка была исправлена ​​после повторной сборки в новой командной строке.

0
VShank

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

yes | sdkmanager --licenses && sdkmanager --update
0
Swapnil Kotwal

У меня была похожая проблема, я решил ее, открыв Android Studio. Дело в том, что Android Build Tools 26.0.2 не был установлен. Пришла ошибка, чтобы предупредить меня об этом, я установил его и синхронизировал с проектом. Задача решена :)

0
Justine M

Попробовав множество возможных решений, упомянутых членами сообщества, я только что обнаружил, что со временем могли возникнуть разные проблемы, поэтому большинство решений устарели. 

В настоящее время, и, как I опубликовано в сообществе Travis , Travis должен принимать все лицензии по умолчанию, но он продолжает жаловаться на то, что не принимает лицензии 27.0.3, что не должно происходить. 

Добавление:

before_install:
  - yes | sdkmanager "build-tools;27.0.3"

если мы решим проблему, мы сможем даже использовать версию Gradle Tools для Android версии 3.+, даже не объявляя, какую версию инструментов сборки мы используем:

Android:
  components:
    # Use the latest revision of Android SDK Tools
    - tools
    - platform-tools
    - tools

    # The SDK version used to compile your project
    - Android-${Android_API}
    # - build-tools-28.0.3    # WE DONT NEED THIS ANYMORE FROM AGP 3.+

    # Additional components
    - extra-google-google_play_services
    - extra-google-m2repository
    - addon-google_apis-google-${Android_API}

Это работает как 29 октября 2018 года. Трэвис может внести изменения в будущем, так что удачи в этом!

0
cesards

В Windows 10 у меня работало открытие cmd с правами администратора, а затем ввод cd C:\Program Files (x86)\Android\android-sdk\tools\bin\ и затем sdkmanager --update. После этого мне просто нужно было дважды нажать «y», чтобы принять лицензии.

0
JedatKinports

ДЛЯ РЕАГИРОВАННЫХ РОДНЫХ ПРИЛОЖЕНИЙ:

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

sdk.dir=/PATH_TO_SDK/
0
Nauman Tahir

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

 enter image description here

0
Aymen Boumyza

Я потратил полдня на поиски решения для Bitbucket Pipelines

Если вы используете Bitbucket Pipelines и у вас есть проблема с принятием всех лицензий SDK, попробуйте использовать этот код в вашем файле .yml:

image: mingc/Android-build-box:latest

pipelines:
  default:
  - step:
      script:
        - chmod +x gradlew
        - ./gradlew assemble

Это должно работать.

0
eltray