Android: Tidak ada versi NDK yang cocok dengan versi yang diminta

56

Setelah memperbarui ke plugin Android Gradle 3.6.0 (dirilis 24 Februari 2020), beberapa proyek mulai gagal dengan:

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

Cukup mudah untuk "memperbaiki" ini secara lokal dengan menginstal versi ndk yang diharapkan:

sdkmanager 'ndk;20.0.5594570'

Namun, pertanyaan saya adalah: Di mana dan bagaimana versi yang lebih lama ini ditentukan? Dan bagaimana cara memperbaruinya sehingga cocok dengan versi terbaru 21.0.6113669?

friederbluemle
sumber
10
DAN build gagal di Github CI, juga.
KYHSGeekCode
sama untuk ku. Dan jika saya menginstal ndk itu, atau menentukan lokasinya, saya membuat aplikasi saya mogok karena UnsatisfiedLinkError -_-
ildar ishalin
1
Saat ini github ci sekarang bekerja lagi untuk proyek saya: github.com/KYHSGeekCode/Android-Disassembler/blob/…
KYHSGeekCode
DAN itu gagal di Circle CI juga.
HX_unbanned

Jawaban:

29

Pilihan 1:

Anda cukup memilih NDK yang dipasang secara lokal di Dialog Struktur Proyek

Anda dapat membuka Dialog Struktur Proyek dengan mengklik File > Project Structure...atau dengan menekan tombol cepat CTRL + ALT + SHIFT + S(di windows)

Setelah Dialog Struktur Proyek terbuka, buka Lokasi SDK dan pilih versi NDK Anda yang terinstal secara lokal di bawah Lokasi NDK Android . Biasanya ini dipasang di suatu tempat di folder pengguna Anda maka \AppData\Local\Android\Sdk\ndk\%ndk version%setidaknya untuk Windows.

Tangkapan layar dialog Struktur Proyek - dari Android Studio 3.6 Build # AI-192.7142.36.36.6200805, dibangun pada 12 Februari 2020

Pilihan 2:

Pilihan melakukan 1 akan mengedit local.propertiesfile Anda untuk Anda dan akan bekerja dalam banyak kasus. Tetapi jika Anda ingin menggunakan versi NDK yang konsisten pada semua mesin yang Anda bangun proyeknya, menurut panduan resmi ini , Anda dapat mengonfigurasinya dari skrip gradle modul Anda. Cukup tambahkan ndkVersiondi blok skrip modul gradle modul Anda android{}seperti itu.

android {
    ndkVersion "major.minor.build"
}

mengganti string antara tanda kutip ganda dengan versi NDK yang ingin Anda gunakan

Opsi 3:

Jika Anda ingin semua proyek yang dibangun pada mesin tertentu menggunakan versi NDK yang sama, Anda juga dapat mengatur ANDROID_NDK_HOMEvariabel lingkungan dengan path ke folder NDK.

Subaru Tashiro
sumber
1
Bagaimana jika saya ingin menggunakan ndkVersion terbaru menggunakan Opsi 2?
KYHSGeekCode
@KYHSGeekCode Anda dapat mengganti string antara tanda kutip ganda dengan versi NDK yang ingin Anda gunakan. Pastikan Anda menginstal versi tertentu.
Subaru Tashiro
5
Maksud saya, dapatkah saya menggunakan versi terbaru (tidak menentukan secara manual) ?, menggunakan sesuatu seperti$NDK_LATEST_VERSION
KYHSGeekCode
20

Saya juga mengalami hal ini

Tidak ada versi NDK yang cocok dengan versi yang diminta 20.0.5594570. Versi tersedia secara lokal: 21.0.6113669

Pilihan 1:

Anda cukup memilih NDK yang Anda instal secara lokal di karya Struktur Dialog Proyek ! masukkan deskripsi gambar di sini

Tetapi hanya valid untuk build lokal, dan saya butuh solusi untuk CI

Pilihan 2:

Ini hanya berfungsi, ketika Anda menentukannya di setiap modul yang digunakan

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

Di sini tampaknya tidak berfungsi https://github.com/hannesa2/panoramagl/pull/17/checks dengan perubahan ini https://github.com/hannesa2/panoramagl/pull/17/files#diff-cff4e8c294a5dc5e76308662ae1ddcacR6-R7-R7

Opsi 3:

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

bekerja juga!

hannes ach
sumber
apa yang Anda maksud dengan Opsi 2 tidak berfungsi sama sekali? Apa masalah yang Anda hadapi dengan pendekatan itu? Sudahkah Anda melihat bagian bawah halaman ini? developer.android.com/studio/projects/…
Subaru Tashiro
@SubaruTashiro Lihat, sepertinya tidak berfungsi github.com/marianmoldovan/panoramagl/pull/17/… dengan perubahan ini github.com/marianmoldovan/panoramagl/pull/17/… atau saya tidak tahu mengapa
hannes ach
Aneh. Saya dapat melihat dalam komit Anda yang Anda tentukan 21.0.6113669tetapi log pembangunan mengatakan versi yang diminta 20.0.5594570. Bisakah Anda mencari ndk_locator_record.jsonfile? File itu memiliki informasi tentang cara menyelesaikan versi ndk yang diminta.
Subaru Tashiro
@ SubaruTashiro Saya mencarinya, dan tidak ada file seperti itu. Lihat saya mencarinya di langkah "Cari ndk_locator_record.json sebelumnya" github.com/hannesa2/panoramagl/pull/17/…
hannes ach
Opsi 3 sangat bagus untuk alat otomatisasi, terima kasih!
Violet Giraffe
14

Saya memiliki masalah yang sama. Saya menyelesaikannya melalui manajer SDK di bawah Alat SDK, klik Show Package Detailsdan kemudian gulir di bawah NDK (Berdampingan) dan centang dan terapkan versi yang Anda butuhkan. Lihat gambar di bawah ini:

Tautan gambar ke alat SDK untuk pemasangan versi NDK

Pertanyaan saya untuk siapa pun adalah, mengapa kita membutuhkan ini sekarang untuk proyek-proyek yang tidak memerlukan NDK? Ternyata NDK adalah persyaratan yang sudah ada sebelumnya dalam proyek saya bekerja untuk ketergantungan!

kelvin
sumber
2

Ubah versi classpath Anda ke 3.5.0 di dalam build.gradle Anda, level proyek.

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

Saya memiliki masalah yang sama dan diselesaikan.

djalmafreestyler
sumber
3
Yah, itu sebenarnya bukan solusi, tetapi solusi terbaik. Saya sudah menyebutkan bahwa kesalahan mulai terjadi saat memperbarui ke 3.6.0(atau lebih baru). Btw, Anda tidak perlu downgrade ke 3.5.0. Versi juga 3.5.3berfungsi dengan baik.
friederbluemle
2

Saya memiliki masalah yang sama, setelah beberapa saat saya menemukan solusi sementara. ganti nama ndkfolder menjadi ndk-bundle. di proyek Anda buka local.propertiesfile dan tambahkan baris ini sebelumnya sdk.dir:

ndk.dir=<path to your ndk folder>

ini milikku:

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

Saya harap ini membantu Anda

kam.r
sumber
Bagus. Ini bekerja. Apakah Anda tahu bahwa sistem build dapat membuat baris ini secara otomatis karena sudah bisa untuk opsi sdk.dir?
Nicolas Dusart
Anda juga dapat menentukan jalur ke folder ndk, alih-alih mengganti nama. string ndk.dir=G\:\\...\\Sdk\\ndk\\21.0.6113669bekerja untuk saya.
Artem Mostyaev