Android: nenhuma versão do NDK corresponde à versão solicitada

56

Após a atualização para o plug-in Android Gradle 3.6.0 (lançado em 24 de fevereiro de 2020), vários projetos começaram a falhar independentemente com:

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

É bastante simples "consertar" isso localmente instalando a versão mais antiga do ndk esperada:

sdkmanager 'ndk;20.0.5594570'

No entanto, minha pergunta é: onde e como essa versão mais antiga é especificada? E como atualizá-lo para que ele corresponda à versão mais recente 21.0.6113669?

friederbluemle
fonte
10
A construção AND também falha no IC do Github.
KYHSGeekCode
o mesmo para mim. E se eu instalar esse ndk ou especificar sua localização, meu aplicativo travou devido a UnsatisfiedLinkError -_-
ildar ishalin
11
Atualmente, o github ci agora funciona novamente para o meu projeto: github.com/KYHSGeekCode/Android-Disassembler/blob/…
KYHSGeekCode
E também falha no CI do círculo.
HX_unbanned 22/03

Respostas:

29

Opção 1:

Você pode simplesmente selecionar seu NDK instalado localmente na caixa de diálogo "Estrutura do projeto".

Você pode abrir a caixa de diálogo "Estrutura do projeto" clicando File > Project Structure...ou pressionando as teclas de atalho CTRL + ALT + SHIFT + S(no Windows)

Quando o diálogo de estrutura do projeto estiver aberto, vá para o local do SDK e selecione a versão do NDK instalada localmente em Android NDK Location . Normalmente, isso é instalado em algum lugar da pasta do usuário e, \AppData\Local\Android\Sdk\ndk\%ndk version%pelo menos, no Windows.

Captura de tela da caixa de diálogo Estrutura do projeto - do Android Studio 3.6 Build # AI-192.7142.36.36.6200805, construído em 12 de fevereiro de 2020

Opção 2:

Fazer a opção 1 editará seu local.propertiesarquivo e funcionará na maioria dos casos. Mas se você quiser usar uma versão NDK consistente em todas as máquinas com as quais constrói o projeto, de acordo com este guia oficial , poderá configurá-lo a partir do script gradle do módulo. Basta adicionar o bloco ndkVersionde script do módulo gradle dessa android{}forma.

android {
    ndkVersion "major.minor.build"
}

substituindo a sequência entre aspas duplas pela versão NDK que você deseja usar

Opção 3:

Se você deseja que todos os projetos criados em uma máquina específica usem a mesma versão do NDK, também é possível definir ANDROID_NDK_HOMEa variável de ambiente com o caminho para a pasta NDK.

Subaru Tashiro
fonte
11
E se eu quiser usar a ndkVersion mais recente usando a Opção 2?
KYHSGeekCode
@KYHSGeekCode, você pode substituir a sequência entre aspas duplas pela versão do NDK que deseja usar. Verifique se você tem essa versão específica instalada.
Subaru Tashiro
5
Quero dizer, posso usar a versão mais recente (não especificando manualmente) ?, usando algo como$NDK_LATEST_VERSION
KYHSGeekCode
20

Eu também encontro isso

Nenhuma versão do NDK corresponde à versão solicitada 20.0.5594570. Versões disponíveis localmente: 21.0.6113669

Opção 1:

Você pode simplesmente selecionar o NDK instalado localmente na caixa de diálogo Estrutura do projeto ! insira a descrição da imagem aqui

Mas é válido apenas para compilações locais, e preciso de uma solução para o CI

Opção 2:

Funciona apenas quando você o especifica em todos os módulos usados

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

Aqui parece não funcionar https://github.com/hannesa2/panoramagl/pull/17/checks com esta alteração https://github.com/hannesa2/panoramagl/pull/17/files#diff-cff4e8c294a5dc5e76308662ae1ddcacR6-R7

Opção 3:

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

funciona também!

hannes ach
fonte
o que você quer dizer com opção 2 não funciona? Que problema você está enfrentando com essa abordagem? Você já deu uma olhada no final desta página? developer.android.com/studio/projects/…
Subaru Tashiro
@SubaruTashiro Olha, parece que não funciona github.com/marianmoldovan/panoramagl/pull/17/… com essa alteração github.com/marianmoldovan/panoramagl/pull/17/… ou não sei por quê
hannes ach
Estranho. Posso ver nos seus commits que você especificou, 21.0.6113669mas os logs de compilação informam que a versão solicitada é 20.0.5594570. Você pode procurar um ndk_locator_record.jsonarquivo? Esse arquivo tem informações sobre como ele resolveu a versão ndk solicitada.
Subaru Tashiro
@SubaruTashiro Eu procuro, e não existe esse arquivo. Olhe, eu procuro por ele na etapa "Procurar ndk_locator_record.json antes" github.com/hannesa2/panoramagl/pull/17/…
ach
A opção 3 é ótima para ferramentas de automação, obrigado!
Violet Giraffe
14

Eu tenho o mesmo problema. Eu o resolvi por meio do gerenciador do SDK, em Ferramentas do SDK, clique Show Package Detailse role por NDK (Lado a lado), marque e aplique a versão que você precisa. Veja a imagem abaixo:

Link da imagem para ferramentas do SDK para instalação da versão NDK

Minha pergunta para qualquer pessoa é: por que precisamos disso agora para projetos que não exigem o NDK? Acontece que o NDK é um requisito preexistente no projeto em que trabalho para uma dependência!

Kelvin
fonte
2

Altere sua versão do caminho de classe para 3.5.0 dentro do seu build.gradle, nível do projeto.

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

Eu tenho o mesmo problema e ele resolveu.

djalmafreestyler
fonte
3
Bem, não é realmente uma solução, mas uma solução alternativa, na melhor das hipóteses. Eu já mencionei que o erro começou a ocorrer durante a atualização para 3.6.0(ou posterior). Aliás, você não precisa fazer o downgrade para 3.5.0. Versão 3.5.3funciona bem também.
friederbluemle
2

Eu tive o mesmo problema, depois de um tempo, encontrei uma solução temporária. renomeie a ndkpasta para ndk-bundle. em seus projetos, vá ao local.propertiesarquivo e adicione esta linha antes sdk.dir:

ndk.dir=<path to your ndk folder>

é meu:

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

espero que ajude você

kam.r
fonte
Agradável. Isso funciona. Você conhece alguma maneira de o sistema de compilação gerar essa linha automaticamente, como já é possível para a opção sdk.dir?
Nicolas Dusart 23/03
você também pode especificar o caminho para a pasta ndk, em vez de renomear. a corda ndk.dir=G\:\\...\\Sdk\\ndk\\21.0.6113669funcionou para mim.
Artem Mostyaev