Android Ndk Là Gì

Chào mọi người, bài viết này mình sẽ chia sẻ cách để Kotlin làm việc cùng với Android NDK dành cho những bạn mới bắt đầu. Hãy cùng tìm hiểu nhé!

Android NDK

Native Development Kit (NDK) là một bộ công cụ giúp ta sử dụng code C/C++ trong Android, cung cấp các thư viện giúp chúng ta có thể sử dụng để quản lý các hoạt động của thiết bị, truy nhập vào các bộ phận vật lý của máy như các cảm biến sensors, màn hình cảm ứng, ...

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

CMake, JNI là gì?

CMake, JNI(Java Native Interface) sẽ xử lý các công việc liên quan đến tương tác giữa native code và Java. Nó là một cầu nối giữa Java, ứng dụng và các thư viện được viết ở các ngôn ngữ khác nhau.

Vì sao ta cần sử dụng NDK?

Thực tế ta đã biết các ngôn ngữ được viết bằng C/C++ có tốc độ chạy rất cao, nhờ đó giúp cho tốc độ của ứng dụng được cải thiện đáng kể.

Xem thêm: Hack Game Nhập Vai Online - Hack Archer'S Tale (Mod Money)

Việc sử dụng NDK giúp cải thiện được hiệu năng của ứng dụng nhờ vào 3 lý do sau:

Navite code được biên dịch trực tiếp ra binary code và chạy trực tiếp trên OS, trong khi đó Java code sẽ được chuyển thành Java byte-code và chạy trên máy ảo Java (JVM)Native code cho phép developer có thể sử dụng một số các tính năng của bộ xử lý trong khi Android SDK thì không thểCó thể để cải thiện các đoạn mã ở mức assemblyRất nhiều các thư viện ví dụ như ffmpeg được viết bằng ngôn ngữ C/C++, và ta có thể sử dụng thư viện này nhờ vào NDKBắt đầu nào

Ở bài viết này mình sẽ hướng dẫn các bạn liên kết ứng dụng của mình với NDK sử dụng jni, ở lớp C sẽ viết 1 hàm trả về 1 đoạn string, và ta sẽ gọi hàm đó và lấy ra đoạn string trả về từ lớp Java.

Tạo 1 folder là jni bên trong src/main
*
Trong folder jni tạo 1 file Android.mk với nội dung như sau:

LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE := keysLOCAL_SRC_FILES := keys.cinclude $(BUILD_SHARED_LIBRARY)LOCAL_MODULE = “keys” là tên bạn muốn sử dụng để truy nhập từ Java codeLOCAL_SRC_FILES = “keys.c” là file native code chứa mã nguồn mà bạn sẽ viết.Tạo file Application.mk bên trong folder jni với nội dung sau:APP_ABI := allTạo C/C++ file "keys.c" trong folder jni với nội dung sau:#include JNIEXPORT jstring JNICALLJava_com_hungnt_helloapplication_MainActivity_getStringHello(JNIEnv *env, jobject instance) { return (*env)-> NewStringUTF(env, "Hello from nativeLib");}Java_com_hungnt_helloapplication_MainActivity_getStringHello Thể hiện đoạn Java code với package name là com.hungnt.helloapplication với Activity là MainActivity là nơi sẽ gọi hàm native này với tên static method là getStringHello

Cây thư mục sẽ như sau:
*
Ở bên trong Activity MainActivity ta sẽ tạo một static block và để load thư viện và declare các vừa viết trong file C/C++Nếu sử dụng Java ta sẽ viết như sau:

static { System.loadLibrary("keys"); } public native String getStringHello();Với Kotlin init { System.loadLibrary("keys") } external fun getStringHello(): StringGiờ ta có thể gọi được rồi đó, ví dụ ta sẽ hiển thị ra log:Log.d("Debug", "Result: " + getStringHello())Bước cuối cùng, ta cần thêm vào file gradle để có thể build được app qua NDKandroid { ..... buildTypes { ..... } externalNativeBuild { ndkBuild { path "src/main/jni/Android.mk" } }}Giờ ta hãy sync vào build lại project và chạy thử thôi nào, hãy chắc chắn rằng các file của bạn đặt đúng tên là đường dẫn tới NDK là đúng trong module settings nhé!Chúc các bạn thành công!

Tham khảo: https://proandroiddev.com/android-ndk-interaction-of-kotlin-and-c-c-5e19e35bac74