Khái Niệm | Android NDK

Chuyển ngay đến nội dung chính Android Developers Thông tin cơ bản
  • Xây dựng trải nghiệm AI
  • Tạo ứng dụng Android sử dụng AI bằng các Gemini API và nhiều công cụ khác.
  • Bắt đầu
  • Bắt đầu
  • Bắt đầu bằng cách tạo ứng dụng đầu tiên, sau đó tìm hiểu sâu hơn thông qua các khoá đào tạo của chúng tôi hoặc tự mình khám phá hoạt động phát triển ứng dụng.
  • Hello world
  • Khoá đào tạo
  • Hướng dẫn
  • Compose cho các nhóm
  • Kotlin cho Android
  • Kiếm tiền với Play ↗️
  • Xác minh nhà phát triển Android
  • Mở rộng theo thiết bị
  • Tạo các ứng dụng mang đến cho người dùng trải nghiệm liền mạch từ điện thoại đến máy tính bảng, đồng hồ, tai nghe và nhiều thiết bị khác.
  • Ứng dụng thích ứng
  • Android XR
  • Wear OS
  • Android cho Ô tô
  • Android TV
  • ChromeOS
  • Tạo ứng dụng theo danh mục
  • Làm theo hướng dẫn định sẵn và có quy tắc của Google để tìm hiểu cách tạo ứng dụng sao cho phù hợp với trường hợp sử dụng của bạn.
  • Trò chơi
  • Camera và nội dung nghe nhìn
  • Mạng xã hội và nhắn tin
  • Sức khoẻ và thể dục
  • Năng suất
  • Ứng dụng dành cho doanh nghiệp
  • Nắm bắt thông tin mới nhất
  • Theo dõi các bản phát hành mới nhất trong suốt cả năm, tham gia các chương trình dùng thử và góp ý cho chúng tôi.
  • Thông tin mới nhất
  • Thông tin cập nhật về thử nghiệm
  • Bản xem trước Android Studio
  • Thư viện Jetpack và Compose
  • Bản phát hành cho Wear OS
  • Hộp cát về quyền riêng tư ↗️
Thiết kế và lập kế hoạch
  • Trải nghiệm xuất sắc
  • Tạo trải nghiệm tối ưu cho những người dùng tốt nhất của bạn.
  • Tìm hiểu thêm
  • Thiết kế giao diện người dùng
  • Thiết kế giao diện người dùng đẹp mắt bằng cách sử dụng các phương pháp hay nhất về Android.
  • Thiết kế dành cho Android
  • Thiết bị di động
  • Giao diện người dùng thích ứng
  • Thiết bị đeo đầu XR và kính XR
  • Kính AI
  • Tiện ích
  • Wear OS
  • Android TV
  • Android cho Ô tô
  • Cấu trúc
  • Thiết kế logic và các dịch vụ mạnh mẽ, có thể kiểm thử và bảo trì cho ứng dụng.
  • Giới thiệu
  • Thư viện
  • Thao tác
  • Mô-đun hoá
  • Kiểm thử
  • Kotlin Multiplatform
  • Chất lượng
  • Lập kế hoạch về chất lượng ứng dụng và điều chỉnh cho phù hợp với nguyên tắc của Cửa hàng Play.
  • Tổng quan
  • Giá trị cốt lõi
  • Trải nghiệm người dùng
  • Hỗ trợ tiếp cận
  • Chất lượng kỹ thuật
  • Trải nghiệm xuất sắc
  • Bảo mật
  • Bảo vệ người dùng khỏi các mối đe doạ và đảm bảo trải nghiệm Android an toàn.
  • Tổng quan
  • Quyền riêng tư
  • Quyền
  • Danh tính
  • Biện pháp chống lừa đảo
Phát triển
  • Gemini trong Android Studio
  • Người bạn đồng hành AI giúp bạn phát triển các ứng dụng Android.
  • Tìm hiểu thêm
  • Tải Android Studio
  • Lĩnh vực cốt lõi
  • Nhận mẫu và tài liệu về những tính năng bạn cần.
  • Mẫu
  • Giao diện người dùng
  • Hoạt động chạy trong nền
  • Dữ liệu và tệp
  • Khả năng kết nối
  • Tất cả các lĩnh vực cốt lõi ⤵️
  • Công cụ và quy trình công việc
  • Dùng IDE để viết và tạo ứng dụng hoặc tạo quy trình của riêng bạn.
  • Viết và gỡ lỗi mã
  • Xây dựng dự án
  • Kiểm thử ứng dụng
  • Hiệu suất
  • Công cụ dòng lệnh
  • API trình bổ trợ Gradle
  • Công nghệ của thiết bị
  • Viết mã cho các hệ số hình dạng. Kết nối thiết bị và chia sẻ dữ liệu.
  • Giao diện người dùng thích ứng
  • Wear OS
  • Android XR
  • Sức khoẻ trên Android
  • Android cho Ô tô
  • Android TV
  • Tất cả các thiết bị ⤵️
  • Thư viện
  • Duyệt xem tài liệu tham khảo API có đầy đủ thông tin chi tiết.
  • Nền tảng Android
  • Thư viện Jetpack
  • Thư viện Compose
  • Dịch vụ Google Play ↗️
  • Chỉ mục SDK của Google Play ↗️
Google Play
  • Play Console
  • Xuất bản ứng dụng hoặc trò chơi và phát triển hoạt động kinh doanh của bạn trên Google Play.
  • Chuyển đến Play Console
  • Tìm hiểu thêm ↗️
  • Nguyên tắc cơ bản
  • Tìm hiểu cách thu hút người dùng, kiếm tiền và bảo mật ứng dụng của bạn.
  • Kiếm tiền trên Play
  • API Tính toàn vẹn của Play
  • Chính sách của Play
  • Các chương trình của Play ↗️
  • Trung tâm dành cho nhà phát triển trò chơi
  • Phát triển và phân phối trò chơi. Tải các công cụ, nội dung tải xuống và mẫu.
  • Tổng quan
  • Play Asset Delivery
  • Dịch vụ trò chơi của Play
  • Play Games trên máy tính
  • Tất cả hướng dẫn về Play ⤵️
  • Thư viện
  • Duyệt xem tài liệu tham khảo API có đầy đủ thông tin chi tiết.
  • Play Feature Delivery
  • Bản cập nhật trong ứng dụng trên Play
  • Bài đánh giá trong ứng dụng trên Play
  • Play Install Referrer
  • Dịch vụ Google Play ↗️
  • Chỉ mục SDK của Google Play ↗️
  • Tất cả thư viện Play ⤵️
  • Công cụ và tài nguyên
  • Các công cụ để xuất bản, quảng bá và quản lý ứng dụng của bạn.
  • Android App Bundle
  • Thương hiệu và tiếp thị
  • Play Console API ↗️
Cộng đồng /
  • English
  • Deutsch
  • Español – América Latina
  • Français
  • Indonesia
  • Italiano
  • Polski
  • Português – Brasil
  • Tiếng Việt
  • Türkçe
  • Русский
  • עברית
  • العربيّة
  • فارسی
  • हिंदी
  • বাংলা
  • ภาษาไทย
  • 中文 – 简体
  • 中文 – 繁體
  • 日本語
  • 한국어
Android Studio
  • NDK
Tổng quan Nội dung đã tải xuống Mẫu Hướng dẫn Tài liệu tham khảo Android Developers
  • Thông tin cơ bản
    • Xem thêm
  • Thiết kế và lập kế hoạch
    • Xem thêm
  • Phát triển
    • Xem thêm
    • Tổng quan
    • Nội dung đã tải xuống
    • Mẫu
    • Hướng dẫn
    • Tài liệu tham khảo
  • Google Play
    • Xem thêm
  • Cộng đồng
  • Android Studio
  • Giới thiệu
  • Bắt đầu
  • Ý tưởng
  • Mẹo về JNI
  • Các vấn đề phổ biến và giải pháp
  • Lời khuyên cho nhà cung cấp phần mềm trung gian
  • Xây dựng dự án của bạn
  • Giới thiệu
  • ndk-build
    • Tập lệnh ndk-build
    • Android.mk
    • Application.mk
    • Sử dụng thư viện tạo sẵn
  • CMake
  • Sử dụng NDK với các hệ thống xây dựng khác
  • Tích hợp NDK vào hệ thống xây dựng của riêng bạn
  • Kiểm soát chế độ hiển thị biểu tượng
  • Kiến trúc và CPU
  • Giới thiệu
  • ABI Android
  • Tính năng CPU
  • Hỗ trợ Neon
  • Viết mã C/C++
  • Giới thiệu
  • Thuộc tính phiên bản SDK Android
  • Hỗ trợ C++
  • API gốc
  • Sử dụng API mới
  • Gỡ lỗi và phân tích
  • Giới thiệu
  • Gỡ lỗi bằng Android Studio
  • ndk-gdb
  • ndk-stack
  • Theo dõi mã gốc
  • Tệp thứ tự
  • Tối ưu hoá theo hướng dẫn của hồ sơ
  • Simpleperf
  • Tập lệnh bao bọc môi trường shell
  • Lớp GLES
  • Gỡ lỗi bộ nhớ và giảm thiểu lỗi bộ nhớ
  • Giới thiệu
  • Address Sanitizer
  • HWAddress Sanitizer
  • Tiện ích gắn thẻ bộ nhớ Arm
  • GWP-ASan
  • Âm thanh hiệu suất cao
  • Giới thiệu
  • Độ trễ âm thanh
  • Lấy mẫu âm thanh
  • AAudio
  • OpenSL ES
    • Tổng quan
    • Bắt đầu
    • OpenSL ES dành cho Android
    • Tiện ích Android
    • Ghi chú lập trình OpenSL ES
  • API MIDI gốc
  • Tài nguyên khác
  • Vulkan
  • Giới thiệu
  • Bắt đầu
  • Hướng dẫn thiết kế
  • Trình biên dịch đổ bóng
  • Lớp xác thực
  • Hỗ trợ dải màu rộng
  • Extensions
  • Cấu hình Vulkan trên Android
  • Học máy
  • Neural Networks API
  • Hướng dẫn di chuyển
  • Images
  • Bộ giải mã hình ảnh
Trang này được dịch bởi Cloud Translation API.
  • Trang chủ
  • NDK
  • Phát triển
  • Hướng dẫn
Ý tưởng Sử dụng bộ sưu tập để sắp xếp ngăn nắp các trang Lưu và phân loại nội dung dựa trên lựa chọn ưu tiên của bạn.

Trước khi bắt đầu

Hướng dẫn này giả định rằng bạn đã quen thuộc với các khái niệm vốn có trong chương trình gốc và trong quá trình phát triển Android.

Giới thiệu

Phần này đưa ra nội dung giải thích tổng thể về cách thức hoạt động của NDK. Android NDK là một bộ công 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 hữu ích cho các 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 cho phép sử dụng lại.
  • Tăng hiệu suất trong một số trường hợp nhất định, đặc biệt các trường hợp nặng về điện toán như trò chơi.

Cách thức hoạt động

Phần này giới thiệu các thành phần chính dùng để xây dựng ứng dụng gốc dành cho Android, đồng thời 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 chia sẻ 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ể xây dựng các thư viện tĩnh hoặc các tệp .a mà bạn có thể liên kết với các thư viện khác.

  • Giao diện gốc của Java (Java Native Interface – JNI): JNI là giao diện mà qua đó các thành phần Java và C++ giao tiếp với nhau. Hướng dẫn này giả định rằng bạn đã có kiến thức về JNI. Bạn 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 chính xác cách mã máy của ứng dụng tương tác với hệ thống khi chạy. NDK xây dựng các tệp .so dựa trên những định nghĩa này. Mỗi ABI lại có kiến trúc riêng: NDK cung cấp tính năng hỗ 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ề cách 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 dành 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 được Java, nhưng bạn có thể thấy rằng khung Android Java vẫn hữu ích cho một số công việc, bao gồm cả kiểm soát giao diện người dùng và chế độ 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 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. Tạo một tệp Android.mk mô tả thư viện gốc, bao gồm 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, bạn có thể tạo một tệp Application.mk định cấu hình ABI mục tiêu, chuỗi công cụ, chế độ phát hành/gỡ lỗi và STL. Đối với mọi giá trị bạn không chỉ định trong số này, giá trị mặc định sau đây sẽ được sử dụng, lần lượt như sau:

    • ABI: tất cả ABI không còn được dùng nữa
    • Chế độ: Phát hành
    • STL: 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 một tệp APK, chứa .so, .dex và các tệp khác cần 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) 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 khung 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ần 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 bắt đầu 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 khung Android thông qua JNI. Trong một số trường hợp (chẳng hạn như đối với các cảm biến, sự kiện đầu vào và nội dung), NDK cung cấp giao diện gốc mà bạn có thể sử dụng thay vì phải gọi trên JNI. Để biết thêm thông tin về tính năng hỗ 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 không, bạn nên tạo dự án bằng các cô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 chính xá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 dữ liệu cần 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, bạn 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 khi 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 đầu vào trong vòng lặp sự kiện. Việc di 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_root>/sources/android/native_app_glue/android_native_app_glue.c cũng có sẵn, cho phép bạn sửa đổi phương thức triển khai.

Để biết thêm thông tin về cách 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êm trong các ghi chú ở tệp <ndk_root>/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. 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.

    <applicationandroid:label="@string/app_name"android:hasCode="false">

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

    <activityandroid:name="android.app.NativeActivity" android:label="@string/app_name"> Lưu ý: Bạn có thể thêm lớp con NativeActivity. Nếu bạn chọn, hãy sử dụng tên của lớp con thay vì NativeActivity.

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

    <manifest> <application> <activity> <meta-dataandroid:name="android.app.lib_name" android:value="native-activity"/> <intent-filter> <actionandroid:name="android.intent.action.MAIN"/> <categoryandroid:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> </application> </manifest>
  3. Tạo một tệp dành cho hoạt động gốc của bạn roofi triển khai hàm có tên trong biến AnativeActivity_onCreate. Ứng dụng gọi hàm này khi hoạt động gốc bắt đầu. 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 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 các 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 dữ 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 khởi động.

  6. Triển khai các lệnh gọi lại còn lại mà bạn đã thiết lập trong ANativeActivity->callbacks. Để biết thêm thông tin về thời điểm 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 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 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 bạn có tệp Android.mk, hãy biên dịch mã gốc bằng lệnh ndk-build.

    cd<path>/<to>/<project> $NDK/ndk-build
  10. Tạo bản dựng và cài đặt dự án Android của bạn như bình 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 đóng gói (các) tệp .so được tạo qua mã gốc đó vào tệp APK.

Các mã mẫu khác

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

Nội dung và mã mẫu trên trang này phải tuân thủ các giấy phép như mô tả trong phần Giấy phép nội dung. Java và OpenJDK là nhãn hiệu hoặc nhãn hiệu đã đăng ký của Oracle và/hoặc đơn vị liên kết của Oracle.

Cập nhật lần gần đây nhất: 2025-07-27 UTC.

[[["Dễ hiểu","easyToUnderstand","thumb-up"],["Giúp tôi giải quyết được vấn đề","solvedMyProblem","thumb-up"],["Khác","otherUp","thumb-up"]],[["Thiếu thông tin tôi cần","missingTheInformationINeed","thumb-down"],["Quá phức tạp/quá nhiều bước","tooComplicatedTooManySteps","thumb-down"],["Đã lỗi thời","outOfDate","thumb-down"],["Vấn đề về bản dịch","translationIssue","thumb-down"],["Vấn đề về mẫu/mã","samplesCodeIssue","thumb-down"],["Khác","otherDown","thumb-down"]],["Cập nhật lần gần đây nhất: 2025-07-27 UTC."],[],[]]
  • X X Theo dõi @AndroidDev trên X
  • YouTube YouTube Xem Android Developers trên YouTube
  • LinkedIn LinkedIn Connect with the Android Developers community on LinkedIn
  • Tìm hiểu thêm về Android

    • Android
    • Android dành cho doanh nghiệp
    • Bảo mật
    • Source
    • Tin tức
    • Blog
    • Podcast
  • Khám phá

    • Trò chơi
    • Công nghệ máy học
    • Sức khoẻ và thể dục
    • Camera và nội dung nghe nhìn
    • Quyền riêng tư
    • 5G
  • Thiết bị Android

    • Màn hình lớn
    • Wear OS
    • Thiết bị ChromeOS
    • Android cho Ô tô
    • Android TV
  • Bản phát hành

    • Android 15
    • Android 14
    • Android 13
    • Android 12
    • Android 11
    • Android 10
    • Pie
  • Tài liệu và nội dung tải xuống

    • Hướng dẫn về Android Studio
    • Hướng dẫn cho nhà phát triển
    • Tham chiếu API
    • Tải Studio xuống
    • Android NDK
  • Hỗ trợ

    • Báo cáo lỗi nền tảng
    • Báo cáo lỗi tài liệu
    • Google Play support
    • Tham gia nghiên cứu
Google Developers
  • Android
  • Chrome
  • Firebase
  • Google Cloud Platform
  • Tất cả sản phẩm
  • Quyền riêng tư
  • Giấy phép
  • Nguyên tắc về thương hiệu
  • Manage cookies
  • Xem tin tức và các mẹo qua email Đăng ký
  • English
  • Deutsch
  • Español – América Latina
  • Français
  • Indonesia
  • Italiano
  • Polski
  • Português – Brasil
  • Tiếng Việt
  • Türkçe
  • Русский
  • עברית
  • العربيّة
  • فارسی
  • हिंदी
  • বাংলা
  • ภาษาไทย
  • 中文 – 简体
  • 中文 – 繁體
  • 日本語
  • 한국어

Từ khóa » đầm Ndk