Thêm mã C và C++ vào dự án của bạn | Android Developers

Bạn có thể thêm mã C và C++ vào dự án Android bằng cách đặt mã vào thư mục
cpp trong mô-đun dự án của mình. Khi bạn xây dựng dự án, mã
này được biên dịch thành một thư viện gốc mà Gradle có thể đóng gói bằng ứng dụng của bạn.
Sau đó, mã Java hoặc Kotlin có thể gọi các hàm trong thư viện gốc của bạn
thông qua Giao diện gốc Java (JNI). Để tìm hiểu thêm về cách sử dụng khung JNI,
hãy đọc các mẹo của JNI dành cho
Android.

Android Studio tương hỗ CMake, một công cụ tương thích với những dự án Bất Động Sản nhiều nền tảng và ndk-build, hoàn toàn có thể nhanh hơn CMake nhưng chỉ tương hỗ Android. Chúng tôi hiện không tương hỗ sử dụng cả CMake và ndk-build trong cùng một mô-đun .
Nếu bạn muốn nhập một thư viện chứa ndk-build hiện có vào dự án Bất Động Sản Android Studio của mình, hãy khám phá cách link Gradle với dự án Bất Động Sản thư viện gốc .

Trang này cho bạn biết cách thiết lập Android Studio bằng
các công cụ bản dựng cần thiết, tạo một dự án mới có hỗ trợ
C/C++ và thêm tệp C/C++ mới vào dự án của bạn.

Thay vào đó, nếu bạn muốn thêm mã gốc vào một dự án Bất Động Sản hiện có, bạn cần phải làm theo những bước sau :

  1. Tạo các tệp nguồn gốc mới và thêm các tệp đó
    vào dự án Android Studio.

    • Bạn có thể bỏ qua bước này nếu đã có mã gốc hoặc muốn
      nhập một thư viện gốc được tạo sẵn.
  2. Định cấu hình CMake để
    tích hợp mã nguồn gốc của bạn vào thư viện. Bạn cũng cần có tập lệnh bản dựng
    này nếu đang nhập và liên kết với các thư viện
    hoặc nền tảng được tạo sẵn.

    • Nếu một thư viện gốc hiện có của bạn đã có
      tập lệnh bản dựng CMakeLists.txt, hoặc sử dụng ndk-build và bao gồm
      một tập lệnh bản dựng Android.mk
      thì bạn có thể bỏ qua bước này.
  3. Định cấu hình
    Gradle bằng cách cung cấp một đường dẫn cho tệp tập lệnh CMake hoặc ndk-build.
    Gradle sẽ sử dụng tập lệnh bản dựng để nhập mã nguồn vào dự án Android
    Studio của bạn và đóng gói thư viện gốc của bạn (tệp SO) vào
    ứng dụng đó.

Sau khi định cấu hình dự án, bạn có thể truy cập vào các hàm gốc từ
mã Java hoặc Kotlin bằng khung JNI. Để xây dựng và chạy ứng dụng, bạn chỉ cần
nhấp vào Chạy chạy rồi chạy ứng dụng từ thanh trình đơn.

Lưu ý: Nếu dự án hiện tại của bạn sử dụng công cụ ndkCompile không còn được dùng nữa, bạn nên chuyển sang dùng CMake hoặc
ndk-build. Để tìm hiểu thêm, hãy chuyển đến phần về cách
Di chuyển từ ndkCompile.

Chú ý đến người dùng Gradle thử nghiệm: Hãy cân nhắc
việc di chuyển sang trình bổ trợ phiên bản 2.2.0 trở lên và sử dụng CMake hoặc ndk-build
để xây dựng thư viện gốc nếu có trường hợp sau đây áp dụng cho bạn: Dự án
gốc của bạn đã sử dụng CMake hoặc ndk-build; bạn muốn sử dụng phiên bản ổn định
của hệ thống xây dựng Gradle; hoặc bạn muốn được hỗ trợ cho các công cụ tiện ích bổ sung,
chẳng hạn như CCache.
Nếu không, bạn có thể tiếp tục sử dụng
phiên bản thử nghiệm của Gradle và trình bổ trợ Android.

Tải NDK xuống và xây dựng các công cụ

Để biên dịch và gỡ lỗi mã gốc cho ứng dụng, bạn cần có những thành phần sau :

  • Native Development Kit
    (NDK) dành cho Android: một bộ công cụ cho phép bạn sử dụng mã C và C++ với
    Android, đồng thời cung cấp các thư viện nền tảng cho phép bạn quản lý các hoạt động gốc
    và truy cập vào các thành phần thiết bị thực tế, chẳng hạn như cảm biến và
    tính năng nhập bằng cách nhấn.
  • CMake: một
    công cụ bản dựng ngoài hoạt động cùng với Gradle để tạo thư viện
    gốc của bạn. Nếu bạn chỉ định sử dụng bản dựng ndk thì không cần đến thành phần này.
  • LLDB: trình gỡ lỗi mà Android Studio sử dụng để gỡ lỗi mã gốc.

Để biết thông tin về cách setup những thành phần này, vui mắt xem phần Cài đặt và định thông số kỹ thuật NDK, CMake và LLDB .

Tạo dự án mới có hỗ trợ C/C++

Cách tạo một dự án Bất Động Sản mới có tương hỗ mã gốc cũng tựa như như cách tạo mọi dự án Bất Động Sản Android Studio khác, nhưng có thêm một bước nữa :

  1. Trong mục Chọn dự án của bạn trong trình hướng dẫn, chọn loại dự án C++ gốc.
  2. Nhấp vào Tiếp theo.
  3. Hoàn thành tất cả các trường khác trong mục tiếp theo của trình hướng dẫn.
  4. Nhấp vào Tiếp theo.
  5. Trong mục Tùy chỉnh Hỗ trợ C++ của trình hướng dẫn, bạn có thể tùy chỉnh
    dự án của mình với trường Tiêu chuẩn C++. Sử dụng danh sách thả xuống để
    chọn quá trình chuẩn hóa C++ mà bạn muốn sử dụng. Chọn Chế độ mặc định cho
    Chuỗi công cụ
    thì có nghĩa là sẽ sử dụng chế độ cài đặt CMake mặc định.
  6. Nhấp vào Hoàn tất.

Sau khi Android Studio hoàn tất quá trình tạo dự án mới, hãy mở ngăn
Dự án ở phía bên trái của IDE và chọn
chế độ xem
Android. Như minh họa trong hình 2, Android Studio sẽ thêm nhóm cpp:

Hình 2. Nhóm chế độ xem Android cho nguồn mã gốc
và tập lệnh bản dựng ngoài.

Lưu ý: Chế độ xem này không phản ánh hệ phân cấp tệp thực tế
trên ổ đĩa, mà nhóm các tệp tương tự nhau để tinh giản quá trình điều hướng trong dự án của bạn.

Nhóm cpp là nơi bạn có thể tìm thấy tất cả các tệp nguồn
mã gốc, tiêu đề, tập lệnh bản dựng cho CMake hoặc bản dựng ndk và các thư viện
có sẵn nằm trong dự án của bạn. Đối với các dự án mới, Android Studio
sẽ tạo một tệp nguồn C++ mẫu, native-lib.cpp và đặt tệp đó
vào thư mục src/main/cpp/ của mô-đun ứng dụng. Mã mẫu này cung cấp một hàm C++ đơn giản, stringFromJNI(),
hàm trả về chuỗi “Xin chào từ C++”. Bạn có thể tìm hiểu cách thêm tệp nguồn bổ sung
vào dự án trong mục hướng dẫn
Tạo tệp nguồn mã gốc mới.

Tương tự như cách các tệp build.gradle cho Gradle biết cách xây dựng
ứng dụng, CMake và bản dựng ndk yêu cầu một tập lệnh bản dựng để biết cách xây dựng
thư viện gốc. Đối với các dự án mới, Android Studio sẽ tạo một tập lệnh bản dựng cho CMake,
CMakeLists.txt và đặt tập lệnh này vào thư mục gốc của mô-đun.
Để tìm hiểu thêm về nội dung của tập lệnh bản dựng này, hãy đọc phần
Định cấu hình CMake.

Xây dựng và chạy ứng dụng mẫu

Khi bạn nhấp vào Chạy, Android Studio
sẽ xây dựng và chạy một ứng dụng hiển thị văn bản “Xin chào từ C++” trên
thiết bị hoặc trình mô phỏng Android của bạn. Phần tổng quan sau đây mô tả các sự kiện
xảy ra để xây dựng và chạy ứng dụng mẫu:

  1. Gradle yêu cầu tập lệnh bản dựng ngoài,
    CMakeLists.txt.
  2. CMake thực hiện các lệnh trong tập lệnh bản dựng để biên dịch tệp nguồn C++, native-lib.cpp,
    thành một thư viện đối tượng dùng chung và đặt tên
    cho tệp này là libnative-lib.so, sau đó Gradle sẽ gói tệp này vào trong ứng dụng.
  3. Trong thời gian chạy, MainActivity của ứng dụng sẽ tải thư viện gốc bằng cách sử dụng
    System.loadLibrary(). Hàm gốc của thư viện,
    stringFromJNI(), hiện đã có trong ứng dụng.
  4. MainActivity.onCreate() gọi stringFromJNI(),
    câu lệnh trả về “Xin chào từ C++” và dùng câu lệnh trả về này để cập nhật TextView.

Lưu ý: Tính năng Chạy
tức thì không tương thích với các thành phần của dự án được viết bằng mã gốc.

Nếu muốn xác định rằng Gradle đã gói thư viện gốc trong ứng dụng, bạn hoàn toàn có thể sử dụng Công cụ nghiên cứu và phân tích APK :

  1. Chọn Build (Xây dựng) > Build Bundles(s) / APK(s) ( (Xây dựng gói / tệp APK) > Build APK(s) (Xây dựng tệp APK)
  2. Chọn Build (Xây dựng) > Analyze APK (Phân tích APK).
  3. Chọn APK hoặc AAB từ thư mục app/build/outputs/
    và nhấp vào OK.
  4. Như minh họa trong hình 3, bạn có thể thấy libnative-lib.so trong
    cửa sổ Công cụ phân tích APK trong lib//.

    Hình 3. Định vị thư viện gốc bằng Công cụ phân tích APK.

Mẹo: Nếu bạn muốn thử nghiệm với các ứng dụng Android khác
có sử dụng mã gốc, hãy nhấp vào File > New > Import Sample (Tệp > Mới > Nhập mẫu) rồi
chọn một dự án mẫu từ Danh sách Ndk.

Tạo tệp nguồn C/C++ mới

Để thêm tệp nguồn C / C + + mới vào dự án Bất Động Sản hiện có, hãy triển khai như sau :

  1. Nếu bạn chưa có thư mục cpp/ trong nhóm tài nguyên
    chính của ứng dụng, hãy tạo một thư mục như sau:
    1. Mở ngăn Dự án từ bên trái của IDE và
      chọn chế độ xem Dự án từ trình đơn thả xuống.
    2. Điều hướng tới your-module > src, nhấp chuột phải vào
      thư mục chính rồi chọn New >
      Directory
      (Mới > Thư mục).
    3. Nhập cpp làm tên thư mục và nhấp vào
      OK.
  2. Nhấp chuột phải vào thư mục cpp/ rồi chọn New >
    C/C++ Source File
    (Mới > Tệp nguồn C/C++).
  3. Nhập tên cho tệp nguồn, chẳng hạn như native-lib.
  4. Từ trình đơn thả xuống Loại, hãy chọn đuôi tệp
    cho tệp nguồn, chẳng hạn như .cpp.

    • Bạn có thể thêm các loại tệp khác vào trình đơn thả xuống, chẳng hạn như
      .cxx hoặc .hxx, bằng cách nhấp vào phần Chỉnh sửa loại tệp
      . Trong hộp thoại C/C++ bật lên,
      hãy chọn một đuôi tệp khác từ trình đơn thả xuống Phần mở rộng nguồn
      Phần mở rộng tiêu đề rồi nhấp vào
      OK.
  5. Nếu bạn cũng muốn tạo tệp tiêu đề, hãy đánh dấu vào hộp đánh dấu Tạo
    tiêu đề liên kết
    .
  6. Nhấp vào OK.

Sau khi thêm những tệp C / C + + mới vào dự án Bất Động Sản, bạn vẫn cần định thông số kỹ thuật CMake để đưa những tệp này vào thư viện gốc .

Tài nguyên khác

Để tìm hiểu và khám phá thêm về cách tương hỗ mã C / C + + trong ứng dụng của bạn, hãy thử dùng tài nguyên sau đây .

Lớp học lập trình

  • Tạo Hello-CMake với Android Studio,
    một lớp học lập trình sẽ hướng dẫn cho bạn biết cách sử dụng mẫu Android Studio CMake để bắt đầu
    phát triển dự án Android NDK