Android: жодна версія NDK не відповідала запитуваній версії


54

Після оновлення плагіну Android Gradle 3.6.0 (випущений 24 лютого 2020 року) кілька проектів самостійно почали виходити з ладу:

No version of NDK matched the requested version 20.0.5594570. Versions available locally: 21.0.6113669

Це досить просто "виправити" локально, встановивши старішу очікувану версію ndk:

sdkmanager 'ndk;20.0.5594570'

Однак моє питання: Де і як вказана ця старіша версія? І як я його оновлюю, щоб він відповідав останній версії 21.0.6113669?


10
І збій у Github CI також не вдається.
KYHSGeekCode

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

1
Наразі github ci зараз знову працює над моїм проектом: github.com/KYHSGeekCode/Android-Disassembler/blob/…
KYHSGeekCode

І він не вдається і в колі CI.
HX_забаронено

Відповіді:


27

Варіант 1:

Ви можете просто вибрати локально встановлений NDK у діалоговому вікні структури проекту

Діалогове вікно «Структура проекту» можна відкрити, натиснувши File > Project Structure...або натиснувши гарячі клавіші CTRL + ALT + SHIFT + S(у вікнах)

Після відкриття діалогового вікна структури проекту перейдіть до SDK Location і виберіть локально встановлену версію NDK під Android NDK Location . Зазвичай це встановлюється десь у вашій папці користувача, \AppData\Local\Android\Sdk\ndk\%ndk version%принаймні для Windows.

Скріншот діалогового вікна Структура проекту - від Android Studio 3.6 Build # AI-192.7142.36.36.6200805, побудований 12 лютого 2020 року

Варіант 2:

Якщо зробити варіант 1, ви редагуватиме ваш local.propertiesфайл, і він працюватиме в більшості випадків. Але якщо ви хочете використовувати послідовну версію NDK на всіх машинах, з яких ви створюєте проект, згідно з цим офіційним посібником , ви можете налаштувати його за допомогою сценарію свого модуля gradle. Просто додайте ndkVersionу свій модуль скрипт gradle скрипта android{}так.

android {
    ndkVersion "major.minor.build"
}

заміна рядка між подвійними лапки на версію NDK, яку ви хочете використовувати

Варіант 3:

Якщо ви хочете, щоб усі проекти, побудовані на певній машині, використовували одну і ту ж версію NDK, ви також можете встановити ANDROID_NDK_HOMEзмінну середовища з шляхом до папки NDK.


1
Що робити, якщо я хочу використовувати найновіший ndkVersion, використовуючи варіант 2?
KYHSGeekCode

@KYHSGeekCode ви можете замінити рядок між подвійними лапочками версією NDK, яку ви хочете використовувати. Переконайтеся, що у вас встановлена ​​саме ця версія.
Subaru Tashiro

5
Я маю на увазі, чи можу я використовувати останню версію (не вказуючи вручну)?, Використовуючи щось на кшталт$NDK_LATEST_VERSION
KYHSGeekCode

20

Я також натрапляю на це

Жодна версія NDK не відповідала запитуваній версії 20.0.5594570. Версії доступні локально: 21.0.6113669

Варіант 1:

Ви можете просто вибрати локально встановлений NDK у діалоговому вікні Структура проекту ! введіть тут опис зображення

Але це справедливо лише для локальних побудов, мені потрібно рішення для CI

Варіант 2:

Це працює лише тоді, коли ви вказали його у кожному використовуваному модулі

android {
    compileSdkVersion 28
    ndkVersion "21.0.6113669"
    ...
}

Тут, здається, не працює https://github.com/hannesa2/panoramagl/pull/17/checks із цією зміною https://github.com/hannesa2/panoramagl/pull/17/files#diff-cff4e8c294a5dc5e76308662ae1ddcacR6-R7

Варіант 3:

export ANDROID_NDK_HOME=/Users/{my-user}/Development/adt/sdk/ndk/21.0.6113669

працює теж!


що означає варіант 2 взагалі не працює? З якою проблемою ви стикаєтесь із таким підходом? Ви подивилися внизу цієї сторінки? developer.android.com/studio/projects/…
Subaru Tashiro

@SubaruTashiro Подивіться, здається, не працює github.com/marianmoldovan/panoramagl/pull/17/… із цією зміною github.com/marianmoldovan/panoramagl/pull/17/… або я не знаю чому
hannes ach

Дивно. Я бачу у ваших комісіях, які ви вказали, 21.0.6113669але журнали збірки говорять про запитувану версію 20.0.5594570. Ви можете шукати ndk_locator_record.jsonфайл? Цей файл містить інформацію про те, як він вирішив запитувану версію ndk.
Subaru Tashiro

@SubaruTashiro Я шукаю його, і такого файлу немає. Подивіться, я шукаю його на кроці "Пошук ndk_locator_record.json раніше" github.com/hannesa2/panoramagl/pull/17/…
ach

Варіант 3 чудово підходить для засобів автоматизації, дякую!
Фіолетова жирафа

14

У мене те саме питання. Я вирішив це через менеджер SDK у розділі Інструменти SDK, клацніть, Show Package Detailsа потім прокрутіть під NDK (Поруч) і поставте галочку та застосуйте потрібну вам версію. Дивіться зображення нижче:

Зображення посилання на інструменти SDK для встановлення версії NDK

Моє запитання для когось: чому нам зараз це потрібно для проектів, які не потребують НДК? Як виявляється, NDK є попередньою вимогою в проекті, над яким я працюю для залежності!


2

Змініть версію classpath на 3.5.0 всередині свого build.gradle, рівня проекту.

dependencies {
        classpath 'com.android.tools.build:gradle:3.5.0'
}

У мене те саме питання і воно вирішено.


3
Ну, це насправді не рішення, а найкращий спосіб у кращому випадку. Я вже згадував, що помилка почала виникати під час оновлення до 3.6.0(або пізнішого). Btw, вам не потрібно переходити на версію до 3.5.0. Версія 3.5.3також добре працює.
friederbluemle

2

У мене була така ж проблема, через деякий час я знайшов тимчасове рішення. перейменувати ndkпапку в ndk-bundle. у своїх проектах перейдіть до local.propertiesфайлу та додайте цей рядок раніше sdk.dir:

ndk.dir=<path to your ndk folder>

це моє:

ndk.dir=G\:\\SDK\\ndk-bundle
sdk.dir=G\:\\SDK

Я сподіваюся, що це допоможе тобі


Приємно. Це працює. Чи знаєте ви яким-небудь чином, що система збирання могла б генерувати цю лінію автоматично, як це вже можливо для параметра sdk.dir?
Nicolas Dusart

Ви також можете вказати шлях до папки ndk замість перейменування. струна ndk.dir=G\:\\...\\Sdk\\ndk\\21.0.6113669працювала на мене.
Артем Мостяєв

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