Khái niệm

Chúng tôi rất vui mừng chia sẻ kiến thức sâu sắc về từ khóa Ndk la gi và hy vọng rằng nó sẽ hữu ích cho bạn đọc. Bài viết tập trung trình bày ý nghĩa, vai trò và ứng dụng của từ khóa này trong việc tối ưu hóa nội dung trang web và chiến dịch tiếp thị trực tuyến. Chúng tôi cung cấp các phương pháp tìm kiếm, phân tích và lựa chọn từ khóa phù hợp, cùng với các chiến lược và công cụ hữu ích. Hy vọng rằng thông tin mà chúng tôi chia sẻ sẽ giúp bạn xây dựng chiến lược thành công và thu hút lưu lượng người dùng. Xin chân thành cảm ơn sự quan tâm và hãy tiếp tục theo dõi blog của chúng tôi để cập nhật những kiến thức mới nhất.

Trước lúc mở màn

Hướng dẫn này giả thiết rằng bạn đã thân thuộc với những khái niệm vốn có trong lớp học gốc và trong quá trình phát triển Android.

Bạn Đang Xem: Khái niệm

Giới thiệu

Phần này đưa ra nội dung giảng giải tổng thể về phương pháp hoạt động của NDK. Android NDK là một bộ dụng cụ được cho phép bạn nhúng C hoặc C++ (“mã gốc”) vào ứng dụng Android. Khả năng sử dụng mã gốc trong ứng dụng Android có thể đặc biệt quan trọng hữu ích cho những nhà phát triển muốn thực hiện một hoặc nhiều việc sau:

  • Chuyển ứng dụng giữa các nền tảng.
  • Sử dụng lại thư viện hiện có hoặc cung cấp thư viện riêng được cho phép sử dụng lại.
  • Tăng hiệu suất trong một số trường thống nhất định, đặc biệt quan trọng các trường hợp nặng về điện toán như trò chơi.

Phương pháp hoạt động

Phần này giới thiệu các thành phần chính dùng làm xây dựng ứng dụng gốc giành riêng cho Android, song song mô tả quy trình xây dựng và đóng gói ứng dụng.

Các thành phần chính

Khi xây dựng ứng dụng, bạn nắm rõ về các thành phần sau:

  • Thư viện san sớt gốc: NDK xây dựng các thư viện này hoặc các tệp .so qua mã nguồn C/C++ của bạn.

  • Thư viện tĩnh gốc: NDK cũng có thể có thể xây dựng các thư viện tĩnh hoặc các tệp .a mà chúng ta có thể liên kết với những thư viện khác.

  • Giao diện gốc của Java (Java Native Interface – JNI): JNI là giao diện mà thông qua đó các thành phần Java và C++ giao tiếp với nhau. Hướng dẫn này giả thiết rằng bạn đã sở hữu tri thức về JNI. Chúng ta cũng có thể tham khảo nội dung Thông số kỹ thuật của giao diện gốc Java để biết thêm thông tin.

  • Giao diện nhị phân của ứng dụng (Application Binary Interface – ABI): ABI xác định xác thực cách mã máy của ứng dụng tương tác với mạng lưới hệ thống khi chạy. NDK xây dựng các tệp .so dựa trên những khái niệm này. Mỗi ABI lại sở hữu kiến trúc riêng: NDK cung cấp tính năng tương trợ ABI cho ARM 32-bit, AArch64, x86 và x86-64. Để biết thêm thông tin, hãy xem nội dung ABI Android.

  • Tệp kê khai: Nếu đang viết một ứng dụng không có thành phần Java, bạn phải khai báo lớp NativeActivity trong tệp kê khai. Hãy xem nội dung Sử dụng giao diện native_activity.h để biết thêm thông tin về phong thái thực hiện việc này.

Quy trình

Sau đây là quy trình chung về việc phát triển một ứng dụng gốc giành riêng cho Android:

  1. Thiết kế ứng dụng của bạn, quyết định phần nào cần triển khai trong Java và phần nào cần triển khai dưới dạng mã gốc.

    Lưu ý: Mặc dù có thể hoàn toàn tránh khỏi Java, nhưng chúng ta có thể thấy rằng khuông Android Java vẫn hữu ích cho một số công việc, gồm có cả kiểm soát giao diện người dùng và chủ trương hiển thị.

  2. Tạo một Dự án ứng dụng Android như bạn thực hiện với mọi dự án Android khác.

  3. Nếu như bạn đang viết một ứng dụng chỉ dùng mã gốc, hãy khai báo lớp nativeActivity trong AndroidManifest.xml. Để biết thêm thông tin, hãy xem nội dung Hoạt động gốc và ứng dụng gốc.

  4. Xem Thêm : Hướng dẫn bí quyết đánh cá độ bóng đá luôn thắng từ cao thủ

    Tạo một tệp Android.mk mô tả thư viện gốc, gồm có cả tên, các cờ, thư viện liên kết và tệp nguồn được biên dịch trong thư mục “JNI”.

  5. Nếu muốn, chúng ta có thể tạo một tệp Application.mk định cấu hình ABI mục tiêu, chuỗi dụng cụ, chủ trương phát hành/gỡ lỗi và STL. Khi đối chiếu với mọi giá trị bạn không chỉ định trong số này, giá trị mặc định sau đây sẽ tiến hành sử dụng, tuần tự như sau:

    • ABI: tất cả ABI không còn được sử dụng nữa
    • Chính sách: Phát hành
    • STL: mạng lưới hệ thống
  6. Đặt nguồn mã gốc vào thư mục jni của dự án.

  7. Sử dụng ndk-build để biên dịch thư viện gốc (.so, .a).

  8. Xây dựng thành phần Java, tạo tệp thực thi .dex.

  9. Đóng gói mọi thứ vào trong 1 tệp APK, chứa .so, .dex và các tệp khác cấp thiết để ứng dụng của bạn chạy được.

Hoạt động gốc và ứng dụng gốc

SDK Android cung cấp một lớp trợ giúp (NativeActivity) được cho phép bạn viết một hoạt động hoàn toàn bằng mã gốc. NativeActivity xử lý thông tin giao tiếp giữa khuông Android và mã gốc, vì vậy bạn không phải tạo lớp con hoặc gọi phương thức. Bạn chỉ có khai báo rằng ứng dụng của bạn là ứng dụng gốc trong tệp AndroidManifest.xml rồi mở màn tạo ứng dụng gốc.

Ứng dụng Android sử dụng NativeActivity vẫn sẽ chạy trong máy ảo của riêng ứng dụng đó và chạy trong hộp cát qua các ứng dụng khác. Do đó, bạn vẫn có thể truy cập API khuông Android thông qua JNI. Trong một số trường hợp (ví như khi đối chiếu với các cảm ứng, sự kiện nguồn vào và nội dung), NDK cung cấp giao diện gốc mà chúng ta có thể sử dụng thay vì phải gọi trên JNI. Để biết thêm thông tin về tính chất năng tương trợ đó, hãy xem nội dung API gốc.

Bất kể có đang phát triển hoạt động gốc hay là không, bạn nên tạo dự án bằng các dụng cụ xây dựng Android truyền thống. Phương pháp này sẽ giúp đảm bảo việc tạo và đóng gói ứng dụng Android với cấu trúc xác thực.

Android NDK cung cấp cho bạn hai lựa chọn để triển khai hoạt động gốc:

  • Tiêu đề native_activity.h khai báo phiên bản gốc của lớp nativeActivity. Tiêu đề này chứa giao diện gọi lại và các cấu trúc tài liệu cấp thiết để tạo hoạt động gốc. Vì luồng chính của ứng dụng của bạn xử lý các lệnh gọi lại, nên các phương thức triển khai lệnh gọi lại của bạn đều không được chặn. Nếu các phương thức triển khai này chặn, chúng ta có thể gặp lỗi ANR (Ứng dụng không phản hồi) vì luồng chính không phản hồi cho đến lúc lệnh gọi lại trở về.
  • Tệp android_native_app_glue.h khai báo một thư viện trình trợ giúp tĩnh được xây dựng trên giao diện native_activity.h. Thư viện này tạo ra một luồng khác để xử lý các lệnh gọi lại hoặc sự kiện nguồn vào trong vòng lặp sự kiện. Việc vận chuyển các sự kiện này sang một luồng riêng biệt sẽ ngăn mọi lệnh gọi lại chặn luồng chính của bạn.

Nguồn <ndk_rootvàgt;/sources/android/native_app_glue/android_native_app_glue.c cũng có thể có sẵn, được cho phép bạn sửa đổi phương thức triển khai.

Để biết thêm thông tin về phong thái sử dụng thư viện tĩnh này, hãy kiểm tra mẫu ứng dụng hoạt động gốc và tài liệu tương ứng. Bạn cũng có thể có thể đọc thêm trong các ghi chú ở tệp <ndk_rootvàgt;/sources/android/native_app_glue/android_native_app_glue.h.

Sử dụng giao diện native_activity.h

Cách triển khai hoạt động gốc bằng giao diện native_activity.h:

  1. Tạo thư mục jni/ trong thư mục gốc của dự án. Thư mục này lưu trữ tất cả mã gốc của bạn.

  2. Xem Thêm : Phân biệt nguồn điện AC, DC, AC/DC, DC/DC. Đại diện Puls Việt Nam.

    Khai báo hoạt động gốc trong tệp AndroidManifest.xml.

    Vì ứng dụng của bạn không có mã Java, hãy đặt android:hasCode thành false.

    <application android:label=”@string/app_name” android:hasCode=”false”>

    Bạn phải thiết lập tính chất android:name của thẻ hoạt động thành nativeActivity.

    <activity android:name=”android.app.NativeActivity” android:label=”@string/app_name”> Lưu ý: Chúng ta cũng có thể thêm lớp con NativeActivity. Nếu như bạn thực hiện việc này, hãy sử dụng tên của lớp con thay vì NativeActivity.

    Tính chất android:value của thẻ meta-data sẽ chỉ định tên của thư viện san sớt chứa điểm truy cập vào ứng dụng (ví như C/C++main), bỏ qua tiền tố lib và hậu tố .so của tên thư viện.

    <manifestvàgt; <applicationvàgt; <activityvàgt; <meta-data android:name=”android.app.lib_name” android:value=”native-activity” /> <intent-filtervàgt; <action android:name=”android.intent.action.MAIN” /> <category android:name=”android.intent.category.LAUNCHER” /> </intent-filtervàgt; </activityvàgt; </applicationvàgt; </manifestvàgt;

  3. Tạo một tệp giành riêng cho hoạt động gốc của bạn roofi triển khai hàm mang tên trong biến AnativeActivity_onCreate. Ứng dụng gọi hàm này khi hoạt động gốc mở màn. Hàm này (tương tự như hàm main trong C/C++) nhận một con trỏ đến một cấu trúc ANativeActivity có chứa các con trỏ hàm đến nhiều phương thức triển khai lệnh gọi lại mà bạn cần phải viết. Thiết lập các con trỏ hàm gọi lại hiện hành trong ANativeActivity->callbacks thành phương thức triển khai của rất nhiều lệnh gọi lại.

  4. Thiết lập trường ANativeActivity->instance thành địa chỉ của mọi thực thể của tài liệu cụ thể mà bạn muốn sử dụng.

  5. Triển khai mọi việc khác mà bạn muốn hoạt động của mình thực hiện khi phát động.

  6. Triển khai các lệnh gọi lại còn sót lại mà bạn đã thiết lập trong ANativeActivity->callbacks. Để biết thêm thông tin về thời khắc gọi lệnh gọi lại, hãy xem nội dung Quản lý vòng đời hoạt động.

  7. Phát triển phần còn sót lại của ứng dụng.

  8. Tạo Android.mk file trong thư mục jni/ của dự án để mô tả cho mạng lưới hệ thống xây dựng về mô-đun gốc của bạn. Để biết thêm thông tin, hãy xem nội dung Android.mk.

  9. Sau khi chúng ta có tệp Android.mk, hãy biên dịch mã gốc bằng lệnh ndk-build.

    cd <pathvàgt;/<tovàgt;/<projectvàgt; $NDK/ndk-build

  10. Tạo bản dựng và setup dự án Android của bạn như thông thường. Nếu mã gốc của bạn nằm trong thư mục jni/, thì tập lệnh bản dựng sẽ tự động hóa đóng gói (các) tệp .so được tạo qua mã gốc đó vào tệp APK.

Mã nguồn mẫu khác

Để tải các mẫu NDK xuống, hãy xem nội dung Mẫu NDK.

You May Also Like

About the Author: v1000