Với việc kiến thiết Android Studio 2.2, bài toán cải cách và phát triển các vận dụng Android gồm đựng mã C++ sẽ trsinh sống buộc phải dễ ợt hơn lúc nào không còn. Trong bài xích khuyên bảo này, tôi đang giải đáp bạn phương pháp áp dụng Android Native Development Kit, hay được nghe biết là NDK, để tạo nên một tlỗi câu hỏi nơi bắt đầu C++ mà những hàm của chính nó sẵn dùng cho những lớp Java.

Bạn đang xem: Android ndk là gì

Các yêu cầu

Để hoàn toàn có thể theo dõi bài xích giải đáp này, các bạn sẽ cần những trang bị sau đây:

một kiến thức và kỹ năng cơ phiên bản về cú pháp C++

1. Tại sao viết Native sầu giamcanherbalthin.com (mã gốc)?

Theo kinh nghiệm, các bạn sẽ phát triển một vận dụng Android sử chỉ dụng Java. Thêm mã C++ đã tăng thêm sự tinh vi của chính nó lên đáng chú ý với bên cạnh đó giảm tính linch hoạt của nó. Tuy nhiên, bên dưới đây là một vài lý do vì sao các bạn vẫn yêu cầu làm vậy:

Để tối ưu hoá hiệu năng: quý khách rất có thể cải thiện hiệu năng của một áp dụng Android, mặc dầu chỉ khá hơi, bằng cách thiết đặt những phần CPU-mạnh mẽ của business súc tích của nó vào C++. Để áp dụng những thỏng Việc phổ biến của C/C++: Có một trong những thư bài toán C và C++ sinh sống bên phía ngoài nhưng không có tương ứng cho Java. Nếu bạn muốn làm việc với chúng trong vận dụng Android của khách hàng, thì sử dụng NDK là một cách. Để áp dụng lại giamcanherbalthin.com: Miễn là nó không cất ngẫu nhiên nhờ vào gốc rễ riêng biệt làm sao, thì giamcanherbalthin.com được viết vào C++ hoàn toàn có thể được sử dụng nghỉ ngơi trong cả ứng dụng Android cùng iOS, thường xuyên với không nhiều sự chuyển đổi. Nếu ai đang cách tân và phát triển một vận dụng to với gồm ý muốn hỗ trợ cả gốc rễ iOS với Android, thực hiện C++ rất có thể nâng cao công suất của chúng ta.

2. Tạo một dự án mới

Trong Android Studio 2.2 hoặc cao hơn, phần trả lời tạo thành dự án cho phép bạn nhanh lẹ tạo nên những dự án công trình mới cung ứng mã C++.

Bắt đầu bằng cách mlàm việc Android Studio và nhấn vào nút ít Start a new Android Studio project nghỉ ngơi screen Chào mừng. Trong màn hình tiếp sau, đặt cho ứng dụng của khách hàng một cái tên gồm ý nghĩa với tích vào trường Include C++ Support.

*

Trong screen sinh sản activity của trình gợi ý, lựa chọn tùy chọn Add No Activity. Trong screen sau cùng của trình lý giải, hãy chắc chắn là rằng quý giá của trường C++ Standard được tùy chỉnh thiết lập là Toolchain Default cùng dìm nút ít Finish.

*

Android NDK cùng các công cụ nhưng nó phụ thuộc vào ko được thiết đặt mang định. Do kia, một khi dự án công trình đã được tạo thành, bạn sẽ thấy một lỗi trông như vậy này:

*

Để khắc phục lỗi, vào Tools > Android > SDK Manager và đưa lịch sự tab SDK Tools.

Trong danh sách các công cụ đơn vị cách tân và phát triển sẵn gồm, lựa chọn CMake với NDK với dìm nút ít Apply.

*

Sau khi thiết đặt hoàn chỉnh, khởi rượu cồn lại Android Studio.

3. Tạo một Native sầu Library (thỏng viện gốc)

Một dự án Android Studio nhưng mà tất cả hỗ trợ C++ gồm một thư mục mã nguồn bổ sung được Gọi là cpp. Có thể bạn vẫn cho rằng, toàn bộ các tập tin C++ và tlỗi viện đề xuất được đặt bên trong nó. Mặc định, thỏng mục bao gồm một tập tin Điện thoại tư vấn là native-lib.cpp. Bây giờ, chúng ta sẽ viết toàn bộ các mã C++ của chúng ta bên trong nó.

Trong lý giải này, họ sẽ khởi tạo một native library dễ dàng bao gồm chứa một hàm tính toán diện tích S của một hình trụ bằng cách áp dụng phương pháp πr². Hàm sẽ đồng ý nửa đường kính của hình trụ nhỏng là một trong những jdouble cùng trả về diện tích nhỏng là một trong những jstring.

Bắt đầu bằng phương pháp thêm các thông tư include vào file:

#include #include #include jni.h là một trong tệp tin header chứa một số tư tưởng mô hình lớn, dạng hình, cấu trúc và hàm, toàn bộ rất nhiều là không thể thiếu khi làm việc với NDK. (JNI là viết tắt của Java Native Interface, với đó là framework có thể chấp nhận được Java Runtime tiếp xúc với mã gốc). File string header là cần thiết cũng chính vì bọn họ sẽ thực hiện loại jstring vào thư viện của bọn họ. File header math.h đựng quý hiếm số π.

Mặc định, để cung ứng đa hình, trình biên dịch C++ sửa thay tên của toàn bộ những hàm nhưng mà bạn quan niệm trong mã của khách hàng. Tính năng này thường xuyên được gọi là name mangling (tên xác minh trong lệnh). Do name mangling, bài toán Call những hàm C++ trường đoản cú mã Java đang xẩy ra lỗi. Để tách những lỗi, bạn cũng có thể vô hiệu hóa hóa name mangling bằng cách khái niệm các hàm bên phía trong một kăn năn extern "C".

extern "C" // Your functions must be defined // hereTên của những hàm C++ có thể truy cập trải qua JNI đề nghị có định hình sau:

Chúng buộc phải gồm một chi phí tố Java_. Chúng buộc phải chứa một vẻ ngoài mangled của thương hiệu gói chỗ cơ mà các dấu chnóng được thay thế sửa chữa bởi những dấu gạch men dưới. Chúng buộc phải đựng thương hiệu của các lớp Java mà lại chúng trực thuộc về.

Xem thêm: Review Sữa Rửa Mặt Vedette Có Tốt Không ? Sữa Rửa Mặt Vedette Có Tốt Không

Ngoài ra, các bạn cần khẳng định phạm vi của các hàm. quý khách có thể có tác dụng điều này bằng cách thực hiện macro JNIEXPORT. Theo quy ước, số đông những nhà trở nên tân tiến include macro JNICALL sinh sống trong khái niệm hàm, tuy nhiên nó hiện thời nó không Giao hàng mục đích nào vào Android.

Đoạn mã sau có mang một hàm được Gọi là calculateArea, có thể được truy cập xuất phát từ 1 lớp Java được Điện thoại tư vấn là MainActivity:

JNIEXPORT jstring JNICALLJava_com_giamcanherbalthin.com_mynativeapplication_MainActivity_calculateArea( JNIEnv *jenv, jobject self, jdouble radius) Lưu ý rằng kế bên bán kính, hàm cũng gật đầu một hình dạng JNIEnv, bao gồm những hàm có ích, bạn cũng có thể áp dụng để xử trí những giao diện Java, và một biểu hiện của jobject, tsi chiếu cho một thể hiện của MainActivity. Tất nhiên bọn họ sẽ khởi tạo một MainActivity sau vào bài xích giải đáp này.

Tính toán thù diện tích S thì thuận lợi. Tất cả những gì bạn phải làm cho là nhân macro M_PI với bình phương của bán kính radius.

jdouble area = M_PI * radius * radius;Chỉ nên các bạn đã hiểu phương pháp cách xử lý chuỗi khi thao tác với JNI, hiện nay họ hãy chế tạo một chuỗi bắt đầu cất một thông điệp thể hiện diện tích S là bao nhiêu. Để làm cho những điều đó, bạn có thể áp dụng hàm sprintf().

char output<40>;sprintf(output, "The area is %f sqm", area);Bởi do Java quan trọng trực tiếp xử lý một mảng các cam kết từ bỏ C++, đề xuất đẳng cấp trả về của hàm chúng ta là jstring. Để thay đổi mảng output thành một đối tượng jstring, chúng ta buộc phải áp dụng hàm NewStringUTF().

return jenv->NewStringUTF(output);Tại thời điểm này, mã C++ của bọn họ sẽ chuẩn bị sẵn sàng.

4. Sử dụng Native Library

Ở bước trước, bạn đang thấy hàm calculateArea() cần được nằm trong về lớp Java MainActivity. Bắt đầu chế tác lớp bằng cách nhấp chuột nên vào tên của gói Java và lựa chọn File > New > Empty Activity.

Trong hộp thoại nhảy lên, đánh tên activity là MainActivity. Sau lúc chắc chắn rằng rằng tùy chọn Launcher Activity được chọn, nhận nút ít Finish.

*

Native library cần được hấp thụ trước lúc nó hoàn toàn có thể được thực hiện. Do đó, thêm 1 khối hận static vào lớp với nạp thỏng viện bằng cách sử dụng các thủ tục loadLibrary() của lớp System.

static System.loadLibrary("native-lib");Để hoàn toàn có thể sử dụng hàm C++ calculateArea() bên phía trong activity, chúng ta bắt buộc khai báo nó nlỗi là 1 trong những phương thức native sầu.

private native String calculateArea(double radius);Bây giờ bạn cũng có thể áp dụng thủ tục calculateArea() giống hệt như ngẫu nhiên phương thức thông thường của Java. lấy ví dụ như, bạn cũng có thể thêm mã tiếp sau đây vào cách tiến hành onCreate() để tính toán thù và in ra diện tích vòng tròn có bán kính là 5,5:

Log.d(TAG, calculateArea(5.5f));Nếu chúng ta chạy ứng dụng, bạn có thể nhìn thấy cổng đầu ra tiếp sau đây vào hành lang cửa số logcat:

*

Kết luận

Trong gợi ý này, các bạn đang học tập giải pháp tạo một tlỗi viện cội C++ cùng thực hiện nó trong một ứng dụng Android. Điều yêu cầu để ý là quá trình xây cất mã cội mang định tạo nên một tệp tin .so riêng biệt cho mỗi một kiến trúc CPU nhưng NDK cung cấp. Do kia, bạn có thể chắc chắn là rằng các áp dụng của bạn sẽ chạy trên số đông sản phẩm công nghệ Android nhưng mà không tồn tại ngẫu nhiên sự việc làm sao.

Xem thêm: Thứ Tự Mọc Răng Của Trẻ Sơ Sinh, Thứ Tự Mọc Răng Của Bé Sơ Sinh

Để xem thêm về Android NDK, tôi ý kiến đề xuất bạn xem thêm chỉ dẫn NDK.

Và mày mò một vài hướng dẫn với các khóa huấn luyện và đào tạo vào cải tiến và phát triển Android của bọn chúng tôi!