Android: Không có phiên bản NDK nào phù hợp với phiên bản được yêu cầu


55

Sau khi cập nhật lên plugin Android Gradle 3.6.0 (phát hành ngày 24 tháng 2 năm 2020), một số dự án độc lập bắt đầu thất bại với:

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

Việc "sửa" cục bộ này khá đơn giản bằng cách cài đặt phiên bản ndk cũ hơn dự kiến:

sdkmanager 'ndk;20.0.5594570'

Tuy nhiên, câu hỏi của tôi là: Phiên bản cũ hơn này được chỉ định ở đâu và như thế nào? Và làm cách nào để cập nhật nó để phù hợp với phiên bản mới nhất 21.0.6113669?


10
VÀ xây dựng thất bại trên Github CI, quá.
KYHSGeekCode

tương tự cho tôi. Và nếu tôi cài đặt ndk đó hoặc chỉ định vị trí của nó, tôi sẽ bị lỗi ứng dụng vì không hài
lòngLinkError

1
Hiện tại github ci hiện đang hoạt động trở lại cho dự án của tôi: github.com/KYHSGeekCode/Android-Disassembler/blob/
Lỗi

VÀ nó cũng thất bại trong Circle CI.
HX_unbned

Câu trả lời:


28

Lựa chọn 1:

Bạn có thể chỉ cần chọn NDK được cài đặt cục bộ của mình trong Hộp thoại Cấu trúc Dự án

Bạn có thể mở Hộp thoại Cấu trúc dự án bằng cách nhấp File > Project Structure...hoặc nhấn các phím nóng CTRL + ALT + SHIFT + S(trên cửa sổ)

Khi Hộp thoại Cấu trúc Dự án được mở, hãy đi tới Vị trí SDK và chọn phiên bản NDK được cài đặt cục bộ của bạn trong Vị trí NDK của Android . Thông thường, cái này được cài đặt ở đâu đó trong thư mục người dùng của bạn, \AppData\Local\Android\Sdk\ndk\%ndk version%ít nhất là cho Windows.

Ảnh chụp màn hình hộp thoại Cấu trúc dự án - từ Android Studio 3.6 Build # AI-192.7142.36.36.6200805, được xây dựng vào ngày 12 tháng 2 năm 2020

Lựa chọn 2:

Thực hiện tùy chọn 1 sẽ chỉnh sửa local.propertiestệp của bạn cho bạn và sẽ hoạt động trong hầu hết các trường hợp. Nhưng nếu bạn muốn sử dụng phiên bản NDK nhất quán trên tất cả các máy bạn xây dựng dự án, theo hướng dẫn chính thức này , bạn có thể định cấu hình nó từ tập lệnh phân lớp mô-đun của mình. Đơn giản chỉ cần thêm khối ndkVersiontrong tập lệnh lớp mô-đun của bạn android{}như vậy.

android {
    ndkVersion "major.minor.build"
}

thay thế chuỗi giữa doublequote bằng phiên bản NDK bạn muốn sử dụng

Tùy chọn 3:

Nếu bạn muốn tất cả các dự án được xây dựng trên một máy cụ thể sử dụng cùng một phiên bản NDK, bạn cũng có thể đặt ANDROID_NDK_HOMEbiến môi trường với đường dẫn đến thư mục NDK.


1
Nếu tôi muốn sử dụng ndkVersion mới nhất bằng Tùy chọn 2 thì sao?
KYHSGeekCode

@KYHSGeekCode bạn có thể thay thế chuỗi giữa doublequote bằng phiên bản NDK bạn muốn sử dụng. Hãy chắc chắn rằng bạn đã cài đặt phiên bản cụ thể đó.
Subaru Tashiro

5
Ý tôi là, tôi có thể sử dụng phiên bản mới nhất (không chỉ định thủ công) không?, Sử dụng cái gì đó như$NDK_LATEST_VERSION
KYHSGeekCode

20

Tôi cũng gặp phải điều này

Không có phiên bản NDK nào phù hợp với phiên bản được yêu cầu 20.0.5594570. Phiên bản có sẵn tại địa phương: 21.0.6113669

Lựa chọn 1:

Bạn chỉ có thể chọn NDK được cài đặt cục bộ của mình trong Hộp thoại Cấu trúc dự án hoạt động! nhập mô tả hình ảnh ở đây

Nhưng chỉ hợp lệ cho các bản dựng cục bộ, tôi cần một giải pháp cho CI

Lựa chọn 2:

Nó chỉ hoạt động khi bạn chỉ định nó trong mọi mô-đun được sử dụng

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

Ở đây có vẻ như không hoạt động https://github.com/hannesa2/panoramagl/pull/17/checks với thay đổi này https://github.com/hannesa2/panoramagl/pull/17/files#diff-cff4e8c294a5dc5e766666

Tùy chọn 3:

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

làm việc quá


Ý của bạn là gì khi lựa chọn 2 không hoạt động? Vấn đề gì bạn gặp phải với cách tiếp cận đó? Bạn đã xem ở dưới cùng của trang này? developer.android.com/studio/projects/
trộm

@SubaruTashiro Look, có vẻ như không làm việc github.com/marianmoldovan/panoramagl/pull/17/... với sự thay đổi này github.com/marianmoldovan/panoramagl/pull/17/... hoặc tôi không biết tại sao
Hannes ach

Lạ thật. Tôi có thể thấy trong các cam kết của bạn mà bạn đã chỉ định 21.0.6113669nhưng nhật ký bản dựng cho biết phiên bản được yêu cầu là 20.0.5594570. Bạn có thể tìm một ndk_locator_record.jsontập tin? Tập tin đó có thông tin về cách giải quyết phiên bản ndk được yêu cầu.
Subaru Tashiro ngày

@SubaruTashiro Tôi tìm kiếm nó, và không có tập tin nào như vậy. Nhìn tôi tìm kiếm nó trong bước "Tìm kiếm ndk_locator_record.json trước" github.com/hannesa2/panoramagl/pull/17/ (
hannes ach

Tùy chọn 3 là tuyệt vời cho các công cụ tự động, cảm ơn!
Hươu cao cổ Violet

14

Tôi có cùng một vấn đề. Tôi đã giải quyết nó thông qua trình quản lý SDK trong Công cụ SDK, nhấp Show Package Detailsvà sau đó cuộn bên dưới NDK (Bên cạnh nhau) và đánh dấu và áp dụng phiên bản bạn cần. Xem hình ảnh dưới đây:

Liên kết hình ảnh đến các công cụ SDK để cài đặt phiên bản NDK

Câu hỏi của tôi cho bất cứ ai là, tại sao bây giờ chúng ta cần điều này cho các dự án không yêu cầu NDK? Hóa ra NDK là một yêu cầu có sẵn trong dự án mà tôi làm việc vì sự phụ thuộc!


2

Thay đổi phiên bản classpath của bạn thành 3.5.0 bên trong build.gradle, cấp dự án của bạn.

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

Tôi có cùng một vấn đề và nó đã giải quyết.


3
Chà, nó không thực sự là một giải pháp, mà là một cách giải quyết tốt nhất. Tôi đã đề cập rằng lỗi bắt đầu xảy ra khi cập nhật lên 3.6.0(hoặc sau này). Btw, bạn không cần phải hạ cấp xuống 3.5.0. Phiên bản 3.5.3hoạt động tốt là tốt.
Friederbluemle

2

Tôi đã có một vấn đề tương tự, sau một thời gian tôi tìm thấy một giải pháp tạm thời. đổi tên ndkthư mục thành ndk-bundle. trong các dự án của bạn đi đến local.propertiestập tin và thêm dòng này trước sdk.dir:

ndk.dir=<path to your ndk folder>

nó là của tôi:

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

tôi hy vọng nó sẽ giúp bạn


Đẹp. Những công việc này. Bạn có biết bất kỳ cách nào mà hệ thống xây dựng có thể tự động tạo dòng này như đã có cho tùy chọn sdk.dir không?
Nicolas Dusart

bạn cũng có thể chỉ định đường dẫn đến thư mục ndk, thay vì đổi tên. chuỗi ndk.dir=G\:\\...\\Sdk\\ndk\\21.0.6113669làm việc cho tôi.
Artem Mostyaev

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.