Автоматично приймати всі ліцензії SDK


441

Оскільки додатки для 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? У вас є ідеї?

Дякую!

[EDIT]

Рішення було виконати:

android update sdk --no-ui --filter build-tools-24.0.0,android-24,extra-android-m2repository

І встановити його вручну, але це нова функція gradle, щоб зробити це.

[EDIT 2]

Кращим рішенням є використання sdkmananger:

yes | sdkmanager --licenses

12
Ви також можете спливати echo y |перед цією командою, щоб автоматично прийняти ліцензію. Корисно при бігу на безголовій коробці CI :)
Дорі

3
Мені довелося це зробити, ~/.android/tools/android update sdk --no-ui --filter build-tools-25.0.0,android-25,extra-android-m2repositoryтому що androidінструмент був локалізований у моєму будинку
Джексонкр

7
sdkmanager --ліцензії більше не працюють. Я використовував --upgrade, ігнорував помилки, і це сортувало проблеми з ліцензією.
jcsubmit

6
Я використовував цю команду для сценарію збирання середовища CI з невеликим налаштуванням. Я додав --sdk_root = $ ANDROID_SDK_PATH. Проблема полягала в тому, що ліцензії були прийняті та не збережені в кореневій папці Android SDK. Заключна команда: так | sdkmanager --licenses --sdk_root = $ ANDROID_SDK_PATH (без
судо

3
Переконайтеся, що встановлені $ANDROID_SDK_PATHв реальному кореневому шляху , де ви встановили SDK (тобто /opt/android-sdk), або просто покласти шлях безпосередньо (тобто: yes | sdkmanager --licenses --sdk_root=/opt/android-sdk)
GMC

Відповіді:


365

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 раніше


4
На Вдовах мені довелося перейти на Виконати, потім C:\Users\x1\AppData\Local\Android\sdk\tools\androidвін відкрив графічний інтерфейс, а потім встановити пропущений, а потім натиснути «Прийняти Liscenses» у новому діалоговому вікні, що з’явиться.
Noitidart

8
Це не працює для Linux. Немає файлу sdkmanager під інструментами / bin dir чи десь ще. Чи можете ви допомогти?
Мехмед Мерт

36
На macOS ви можете зробитиyes | sudo ~/Library/Android/sdk/tools/bin/sdkmanager --licenses
MoOx

5
Як я можу автоматично приймати ліцензії від оболонки gradle?
Говард Своп

7
перейдіть до @Noitidart для шляху, але він не спрацював, мені довелося запустити C: \ Users \ x1 \ AppData \ Local \ Android \ sdk \ tools \ bin \ sdkmanager --licenses з командного рядка та натисніть "y "+ Увійдіть до підказок
GaneshT

177

Я зіткнувся з цим під час 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 ).

Хеши - це ша1с ліцензійного тексту, який, я думаю, буде періодично оновлюватися, тому цей код працюватиме лише стільки часу :)

І встановити його вручну, але це нова функція gradle, щоб зробити це.

Спочатку я був здивований, що це не вийшло з коробки, навіть коли я прийняв ліцензії на названі компоненти через androidінструмент, але мені було вказано його менеджером SDK всередині AS, який створює /licensesпапку.

Я думаю, що офіційні інструменти не хочуть пропустити цей крок з юридичних причин.

Перечитавши нотатки до випуску, у яких йдеться

Автозавантаження SDK: Gradle спробує завантажити відсутні пакети SDK, від яких залежить проект.

Що не означає, що він буде працювати, якщо ви ще не встановили інструменти для android і вже прийняли останні ліцензії.

EDIT: Скажімо, це все ще не працює на моєму тестовому вікні gubuntu, поки я не зв’яжу SDK до AS. CI працює чудово, хоча - не впевнений, у чому різниця ...


Існує невеликий збій у sdkDownload щодо деяких компонентів, наприклад, support-v4. Він буде оновлювати компоненти , але Gradle не бачитиме оновлення до наступного виклику. Один спосіб вирішити gradle двічі, один раз викинути: gradle залежності || true - code.google.com/p/android/issues/detail?id=212309
Joe Bowbeer

6
ви можете використовувати mkdir -pзамість || true.
старшийгод

Працює дякую за цей глюк, добре знати. Щоб перевірити, чи визначено ваш шлях SDK таким чином, як очікується: echo $ ANDROID_SDK
tryp

У моєму середовищі ANDROID_SDK не визначено, але він працює з ANDROID_HOME
Димитрій Л.

5
@stack_ved: Я просто додав ще echo: echo -e "\nd56f5187479451eabf01fb78af6dfcb131a6481e" >> "${ANDROID_HOME}/licenses/android-sdk-license". Але я думаю, що ваша проблема ховається десь в іншому місці.
Пол

132

Для новітньої Android Studio (2.3) найкращим способом оновлення / прийняття всіх ліцензій є запуск:

cd $ANDROID_HOME
tools/bin/sdkmanager --licenses

вам може знадобитися копіювати файли ліцензій в інші місця відповідно до вашої установки.


Це виглядає як найкращий шлях, і він працює і на всіх платформах, просто запустітьtools/bin/sdkmanager --licenses
jnv

Якщо у вас старий диспетчер sdk - ліцензії не будуть працювати. Необхідно скопіювати папку інструментів в інше місце, потім скористатися --sdk_root = і вказати її на папку sdk, тоді ви зможете оновити інструменти до нової версії.
Мірек Михалак

чи можемо ми yesякось підключитися до цієї команди для автоматизованих систем побудови? Ви не завжди матимете інтерактивний доступ до консолі до цих машин, тому натискання yклавіатури фізично не вийде.
void.pointer

Може хто-небудь, будь ласка, керував мені, як реалізувати це рішення? Потрібно додати цей рядок у build.sh?
stack_ved

1
це працювало для мене, але мені довелося це зробити cd $ANDROID_HOMEперед виконанням цієї команди
Інус Саха

57

Для нової sdkmanagerутиліти:

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

Існує невелика затримка між даси, так що команда може зависати з ліцензією, яка відображається на деякий час, але це не вимагає втручання людини.


У моїй установці debian9 у мене є лише sdkmanager.jar: android-sdk-linux / tools / lib / sdkmanager.jar та # java -jar /android-sdk-linux/tools/lib/sdkmanager.jar Помилка: Властивість каталогу інструментів не встановлено, переконайтесь, що ви виконуєте android
user3313834

1
Це ґрунтується на припущенні, що ви завантажили інструменти SDK як архів із Google і розпакували їх у $ ANDROID_HOME
A. Rager

Це здається найбільш up-to-dateвідповідальною. Здається, --licensesвже не існує. Примітка. Щоб переглянути список можливих версій, які можна надати:$ANDROID_HOME/tools/bin/sdkmanager --list
Marinos An

2
Дякую за підказку. Я в кінцевому підсумку використовував yes | android-sdk-linux/tools/bin/sdkmanager --licenses || trueу своєму КІ.
iSWORD

ес | $ ANDROID_HOME / tools / bin / sdkmanager "build-tools; 28.0.3" -> зміна версії, яка працювала на мене. Дякую !
ishab acharya

43

Якщо ви використовуєте Jenkins, ви можете використовувати наступний скрипт bash як перший крок у процесі збирання:

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

Це, звичайно, встановить ВСІ доступні оновлення, але це заощадить певний час, якщо ви зможете зекономити місце на диску. Сон полягає у тому, щоб уникнути порушеного читання в програмі інсталяції, оскільки "так" не працює належним чином.

РЕДАКТУВАННЯ: Вам також потрібно додати плагін "Встановити передумови проекту Android" на етапі збирання, щоб отримати правильний $ ANDROID_HOME, якщо ви використовуєте вбудований менеджер SDK.


Я додаю ваш рядок коду перед тим, як "платформа cordova додати андроїд" в моїй конструкції jenkins, яка працює на Ubuntu, але все одно отримую наступну помилку: BUILD FAILED in 7s Error: / var / lib / jenkins / workpace / qa_global_php / platforms / android / gradlew : Команда не вдалася з кодом виходу 1 Помилка: Вихід помилки: Збій: Помилка збірки за винятком * Що пішло не так: виникла проблема з налаштуванням кореневого проекту "android". > Ви не прийняли ліцензійні угоди з таких компонентів SDK:
Ashish Karpe

[Android SDK Build-Tools 26.0.2]. Перш ніж будувати проект, потрібно прийняти ліцензійні угоди та завершити встановлення відсутніх компонентів за допомогою Android Studio SDK Manager.
Ашиш Карпе

32

На жаль, спосіб, як спочатку вирішили ОП, не завжди працює. Якщо з повідомлення про помилку ви дізнаєтесь, яка ваша версія збирає поточну версію інструментів збірки . Можливо, це відсутня версія версії build-інструментів, якої немає. У такому випадку вам потрібно вручну запустити менеджер SDK і додати інструменти збирання та прийняти ліцензію.

Згідно з інструкціями щодо OP, це виглядає наступним чином.

$ ./gradlew build

 
Для виконання параметрів JVM для цієї збірки буде роздвоєно новий JVM. Подумайте про використання демона: https://docs.gradle.org/2.14.1/userguide/gradle_daemon.html.

Збій: збій не вдався за винятком.

* Що пішло не так:
Під час налаштування проекту ": app" виникла проблема.
> Ви не прийняли ліцензійні угоди таких компонентів 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-licence-xxxxxxxx
Використаний: 
 - Платформа SDK Android 7.0, API 24, версія 2
  - Репозиторій підтримки Android, версія 39
-------------------------------

...

20 листопада 2015 року
Чи приймаєте ви ліцензію 'android-sdk-licence-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 пакети.

Повторивши це ще раз, не роблять Градле щасливим. Тож прийняття вручну - єдине рішення, поки хтось не придумає щось краще. (Будь ласка!)


1
android update sdk --no-ui --filter build-tools-24.0.2,android-24,extra-android-m2repositoryзапустивши це за допомогою командного рядка з адміністратором, виправлено помилку. Мені не вдалося встановити менеджер плагінів
phonegap

32

це вирішило мою помилку

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

2
Щоб зберегти кілька символів, yes | $ANDROID_HOME/tools/bin/sdkmanager "build-tools;25.0.2"робимо те ж саме.
Flimzy

31

Ми знайшли те саме питання, будуючи проект на Дженкінсі. З buildToolsVersion '25.0.2', ми повинні прийняти ліцензії до початку будівництва. У нашому випадку нам потрібно було запустити:

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

yes | sdkmanager --licenses що приймає нові ліцензії, які раніше не приймалися

Пам'ятайте: запустіть ці комунальні записи з тим самим користувачем, що і jenkins і. У нашому Debian користувач Jenkins просто справедливий jenkins. Іншими словами: це робити так, як rootстворить прийняті ліцензії root, тому Дженкінс їх не прочитає.

До речі, ми знайшли sdkmanagerу /var/lib/jenkins/tools/android-sdk/tools/bin. Якщо вашого там немає, знайдіть йогоfind / -name "sdkmanager"


2
ця вирішила проблему і в моєму випадку (інструменти для збирання 26.0.x), з Дженкінсом у Docker. Дякую!
Джордано

1
На жаль, це не включає "автоматично" частину питання.
m0skit0

@ m0skit0 дякую за ваш коментар! Я оновив питання, щоб відповідати функції останньої версії, щоб автоматично приймати всі ліцензії без втручання людини.
Roc Boronat

24

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

19

якщо ви запускаєте 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

Ти другий відгомін йде на те саме $ANDROID_HOME/licenses/android-sdk-license, що це призначено? тобто. додавання
Ryan R

1
@RyanR, так, друге відлуння Android SDK Build-Tools 26.02додається , додано нову ліцензію sha1 string
jk2K

Я використовую трубопроводи біт-бакета, але, здається, концепція така ж, як і у GitLab CI. Ваша відповідь допомогла мені краще зрозуміти весь процес. Дякую!
Ridcully

@Ridcully Я також використовував Bitbucket Pipelines і опинився тут, коли ми оновились, Build-Tools 26.0.2і наша збірка зламалася. Моїм кінцевим рішенням було просто зробити yes | sdkmanager --licenses. Нікому не echoпотрібно, і це є доказом у майбутньому.
Ryan R

@Ryan Ти маєш на увазі, що я можу просто додати "так" sdkmanager --licenses 'до pipeline.yml? Це було б чудово!
Ridcully

16

Зауважте, що для тих, хто зараз стикається з цим питанням, 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-бітну.


1
Так, інструменти збирання були просто натхнені 25.0.1.
not2qubit

1
Ваше рішення було єдиним, що я міг знайти роботу над безголовою машиною ubuntu 16 для збирання інструментів-25 та gradle 4
spartygw

14

Якщо ви користуєтесь, tools/bin/sdkmanager --licensesвам все одно потрібно мати взаємодію з людиною. У мене є проблема з моїм ІТ для gitlab. Це моє рішення:

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 скаже «так», якщо є питання, але вам потрібно зробити один рядок за кожен пакет встановлення


Все ще досить актуально через кілька місяців. Дякую. Ви врятували мені день :)
Прасанна Рамасвамі

Це було корисно для мене, також використовуючи GitLab
sebasira

13

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

$ANDROID_HOME/tools/bin/sdkmanager --licenses

А в Windows виконайте:

%ANDROID_HOME%/tools/bin/sdkmanager --licenses

11

Повідомлення про помилку щодо SDK api № 25:

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


10

Гаразд, БУДЬ-ЯКОГО ВІДПОВІДАЄТЬСЯ З цього питання, на 2018 рік. Наведені вище відповіді взагалі НЕ працювали для мене. Яка робота DID - це відкриття Android SDK - натискання кнопки СКАЧАТИ на панелі інструментів та вибору відповідних пакетів. Після завершення завантаження це дозволить вам прийняти ліцензійну угоду.

введіть тут опис зображення


7

Я вирішив цю проблему, створивши публічний git repo з прийнятими файлами ліцензій. Тоді я використовую, wgetщоб отримати ці ліцензії на будь-якій машині, що мені потрібна, в каталог [sdk-dir] / ліцензії перед запуском ./gradlew для створення мого проекту.


6

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

Я знайшов найпростішим рішенням прийняти такі ліцензії:

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

Примітка. Це передбачає, що ви вказали, ANDROID_HOMEде встановлено ваш sdk.



6

для Windows, відкрийте cmd та введіть у binкаталог, запустивши команду:

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

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


1
Спасибі це те, що я зробив
mynameisjohnj

Я отримуюError: Unknown argument --licenses
deanwilliammills

4

Нарешті я знайшов рішення в Windows, щоб мати справжню безшумну та автоматичну установку:

У Windows такий синтаксис не працює:

echo y | sdkmanager --licenses

Здається, що "y" неправильно надсилається до програми java, що називається в пакеті.

Вирішення завдання полягає у створенні файлового файлу-y.txt з декількома "у", по одному за рядком, та для використання

call sdkmanager --licenses < file-y.txt

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



3

У Windows PowerShell ви можете це зробити

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

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


Ще одна причина не використовувати Windows.
m0skit0

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

Ось моя установка 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

"Здається, sdkmanager - оновлення скасовує угоди, тому так | з'являється двічі." Нічого собі, ти маєш рацію. Це дуже засмучує, але хороша знахідка.
цефус

2

Ви можете прийняти всю ліцензію, виконавши таку команду:

 sdkmanager --licenses

Це підкаже вам кожну ліцензію, яку ви ще не прийняли, і ви можете просто ввести, yщоб прийняти кожну з них.


"Автоматично"
m0skit0

2

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

введіть тут опис зображення


Жодна команда CMD не працювала на мене, тільки це рішення. Дякую
deanwilliammills

2

Цей шлях було змінено в останніх версіях. ./sdkmanagerзараз у, /Library/Android/sdk/cmdline-tools/latest/binа потім просто робити

./sdkmanager --licenses

2

Примітка. Це лише для користувачів Mac

У мене був такий самий випуск, але жоден з опублікованих відповідей не допоміг, оскільки в ньому не було toolsпапки Library/Android/sdk.(я використовую Android 3.6.3 на Mac OS 10.14.4)

скріншот помилок

Нижче наведено кроки, які допомогли мені подолати помилку проблеми ліцензування:

  1. відчинено Android Studio
  2. Натисніть cmd + shift + A. Це відкриває Actionsспливаюче вікно.
  3. Шукайте SDK Managerта натисніть Enter, щоб відкрити.
  4. Це відкриває спливаючі вікна для Android SDK. Виберіть іншу версію Android, окрім уже встановленої. (У моєму випадку Android 10.0 вже встановлений, тому я вибрав Android 9.0)
  5. Потім виберіть Applyкнопку. Це встановить відповідний SDK.

Рішення

  1. Тепер запустіть свою програму, вона повинна працювати без винятку.

скріншот успіху


Гей, це вирішує моє в Linuxmint 19.3
GaryP

1

я біжу

#react-native run-android 

з терміналу і зіткнувся з цією проблемою. Уручну перейдіть до Android Studio -> Android SDK -> Платформа SDK. Клацніть Показати деталі пакетів та перевірте:

+ Google APIs
+ Android SDK Platform 23
+ Intel x86 Atom_64 System Image
+ Google APIs Intel x86 Atom_64 System Image

Встановлюючи пакети, перевірте прийняття ліцензії => може вирішити проблему.


1

На Mac OSX перейдіть до пункту sdk/tools/bin

Потім запустіть ./sdkmanager --licensesі прийміть усі ліцензії.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.