Автоматически принимать все лицензии 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

Ответ 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. И теперь это работает для меня.