Application.mk

Tài liệu này giải thích về tệp bản dựng Application.mkndk-build sử dụng.

Bạn nên đọc trang Khái niệm trước khi đọc tài liệu này.

Tổng quan

Application.mk chỉ định các chế độ cài đặt trên toàn dự án cho ndk-build. Theo mặc định, tệp này nằm tại jni/Application.mk, trong thư mục dự án của ứng dụng.

Biến

APP_ABI

Theo mặc định, hệ thống xây dựng NDK tạo mã cho tất cả ABI không dùng nữa. Bạn có thể dùng chế độ cài đặt APP_ABI để tạo mã cho các ABI cụ thể. Bảng 1 cho thấy chế độ cài đặt APP_ABI cho các tập lệnh khác nhau.

Bảng 1. Chế độ cài đặt APP_ABI cho các tập lệnh khác nhau.

Tập lệnh Giá trị
ARMv7 32 bit APP_ABI := armeabi-v7a
ARMv8 64 bit (AArch64) APP_ABI := arm64-v8a
x86 APP_ABI := x86
x86-64 APP_ABI := x86_64
Tất cả ABI được hỗ trợ (mặc định) APP_ABI := all

Bạn cũng có thể chỉ định nhiều giá trị bằng cách đặt các giá trị đó trên cùng một dòng, được phân tách bằng dấu cách. Ví dụ:

APP_ABI := armeabi-v7a arm64-v8a x86

Để biết danh sách tất cả ABI được hỗ trợ và thông tin chi tiết về việc sử dụng và giới hạn của các ABI đó, hãy tham khảo bài viết ABI Android.

APP_ASFLAGS

Các cờ được truyền đến trình tập hợp cho mọi tệp nguồn tập hợp (tệp .s.S) trong dự án.

APP_ASMFLAGS

Cờ được truyền đến YASM khi dành cho tất cả tệp nguồn YASM (.asm, chỉ dành cho x86/x86_64).

APP_BUILD_SCRIPT

Theo mặc định, ndk-build giả định rằng tệp Android.mk được đặt tại jni/Android.mk tương ứng với thư mục gốc của dự án.

Để tải một tệp Android.mk từ vị trí khác, hãy đặt APP_BUILD_SCRIPT thành đường dẫn tuyệt đối của tệp Android.mk.

APP_CFLAGS

Cờ cần được truyền cho tất cả phần biên dịch C/C++ trong dự án.

Xem thêm: APP_C ONLYFLAGS, APP_CPPFLAGS.

APP_CLANG_TIDY

Đặt thành đúng để bật clang-tidy cho tất cả mô-đun trong dự án. Đã tắt theo mặc định.

APP_CLANG_TIDY_FLAGS

Cờ cần truyền cho tất cả tệp thực thi clang-tidy trong dự án.

APP_CONLYFLAGS

Cờ cần truyền cho tất cả phần biên dịch C trong dự án. Những cờ này sẽ không được dùng cho mã C++.

Xem thêm: APP_CFLAGS, APP_CPPFLAGS.

APP_CPPFLAGS

Cờ cần truyền cho tất cả phần biên dịch C++ trong dự án. Những cờ này sẽ không được dùng cho mã C.

Xem thêm: APP_CFLAGS, APP_CONLYFLAGS.

APP_CXXFLAGS

Giống hệt với APP_CPPFLAGS, nhưng sẽ xuất hiện sau APP_CPPFLAGS trong lệnh biên dịch. Ví dụ:

APP_CPPFLAGS := -DFOO
APP_CXXFLAGS := -DBAR

Cấu hình ở trên sẽ dẫn đến một lệnh biên dịch tương tự như clang++ -DFOO -DBAR thay vì clang++ -DBAR -DFOO.

APP_DEBUG

Đặt thành đúng để tạo ứng dụng có thể gỡ lỗi.

APP_LDFLAGS

Cờ cần truyền khi liên kết các tệp thực thi và thư viện dùng chung.

APP_MANIFEST

Đường dẫn tuyệt đối đến tệp AndroidManifest.xml.

Theo mặc định, hệ thống sẽ sử dụng $(APP_PROJECT_PATH)/AndroidManifest.xml) nếu có.

APP_MODULES

Danh sách rõ ràng các mô-đun cần tạo. Các thành phần trong danh sách này là tên mô-đun xuất hiện trong LOCAL_MODULE trong tệp Android.mk.

Theo mặc định, ndk-build sẽ xây dựng tất cả thư viện dùng chung, tệp thực thi và phần phụ thuộc. Thư viện tĩnh sẽ chỉ được xây dựng nếu được dự án sử dụng, dự án chỉ chứa thư viện tĩnh hoặc nếu các thư viện đó có tên trong APP_MODULES.

APP_OPTIM

Xác định biến tuỳ chọn này là release hoặc debug. Các tệp nhị phân của bản phát hành sẽ được tạo theo mặc định.

Chế độ phát hành cho phép tối ưu hoá và có thể tạo ra các tệp nhị phân không dùng được bằng trình gỡ lỗi. Chế độ gỡ lỗi sẽ tắt tính năng tối ưu hoá để có thể sử dụng trình gỡ lỗi.

Xin lưu ý rằng bạn có thể gỡ lỗi cho bản phát hành hoặc gỡ lỗi tệp nhị phân. Tuy nhiên, tệp nhị phân của bản phát hành cung cấp ít thông tin hơn trong quá trình gỡ lỗi. Ví dụ: Các biến có thể bị bỏ qua thông qua quá trình tối ưu hoá, ngăn việc kiểm tra. Ngoài ra, việc sắp xếp lại mã có thể khiến quá trình duyệt qua mã khó khăn hơn; dấu vết ngăn xếp có thể không đáng tin cậy.

Việc khai báo android:debuggable trong thẻ <application> của tệp kê khai ứng dụng sẽ khiến biến này trở thành giá trị mặc định là debug thay vì release. Ghi đè giá trị mặc định này bằng cách đặt APP_OPTIM thành release.

APP_PLATFORM

APP_PLATFORM khai báo cấp độ Android API là cơ sở xây dựng ứng dụng này và tương ứng với minSdkVersion của ứng dụng.

Nếu không được chỉ định, ndk-build sẽ nhắm mục tiêu đến cấp độ API tối thiểu được NDK hỗ trợ. Cấp độ API tối thiểu mà NDK mới nhất hỗ trợ sẽ luôn đủ thấp để hỗ trợ gần như tất cả thiết bị đang hoạt động.

Ví dụ: Giá trị của android-16 chỉ định rằng thư viện sử dụng các API không có trong Android dưới 4.1 (API cấp 16) và không thể dùng trên các thiết bị chạy phiên bản nền tảng thấp hơn. Để xem danh sách đầy đủ tên các nền tảng và ảnh hệ thống Android tương ứng, hãy xem bài viết API gốc của Android NDK.

Khi sử dụng Gradle và externalNativeBuild, bạn không nên đặt tham số này trực tiếp. Thay vào đó, hãy đặt thuộc tính minSdkVersion trong các khối defaultConfig hoặc productFlavors của tệp build.gradle cấp mô-đun. Việc này đảm bảo thư viện chỉ được các ứng dụng cài đặt trên thiết bị chạy phiên bản Android đầy đủ sử dụng.

Lưu ý: NDK không chứa thư viện cho mọi cấp độ API của Android. Các phiên bản không chứa API gốc mới sẽ bị bỏ qua để tiết kiệm dung lượng trong NDK. ndk-build sử dụng các phần sau (theo thứ tự ưu tiên giảm dần):

  1. Phiên bản nền tảng khớp với APP_PLATFORM.
  2. Cấp độ API tiếp theo hiện có dưới APP_PLATFORM. Ví dụ: android-19 sẽ được sử dụng khi APP_PLATFORMandroid-20, vì không có API gốc mới nào trong android-20.
  3. Cấp độ API tối thiểu mà NDK hỗ trợ.

APP_PROJECT_PATH

Đường dẫn tuyệt đối của thư mục gốc của dự án.

APP_SHORT_COMMANDS

Giá trị tương đương trên toàn dự án là LOCAL_SHORT_COMMANDS. Để biết thêm thông tin, hãy xem tài liệu về LOCAL_SHORT_COMMANDS trong Android.mk.

APP_STL

Thư viện chuẩn C++ cần dùng cho ứng dụng này.

Theo mặc định, STL system được sử dụng. Các lựa chọn khác là c++_shared, c++_staticnone. Xem Các tính năng và Môi trường thời gian chạy C++ trong NDK..

APP_STRIP_MODE

Đối số cần truyền đến strip cho các mô-đun trong ứng dụng này. Giá trị mặc định là --strip-unneeded. Để tránh loại bỏ tất cả tệp nhị phân trong mô-đun, hãy đặt thành none. Đối với các chế độ loại bỏ khác, hãy xem tài liệu về chế độ loại bỏ.

APP_THIN_ARCHIVE

Đặt thành đúng để sử dụng các bản lưu trữ nhỏ cho tất cả thư viện tĩnh trong dự án. Để biết thêm thông tin, hãy xem tài liệu về LOCAL_THIN_ARCHIVE trong Android.mk.

APP_WRAP_SH

Đường dẫn đến tệp wrap.sh cần gửi kèm ứng dụng này.

Hiện có một biến thể của biến này cho mỗi ABI, cũng như một biến thể chung cho ABI:

  • APP_WRAP_SH
  • APP_WRAP_SH_armeabi-v7a
  • APP_WRAP_SH_arm64-v8a
  • APP_WRAP_SH_x86
  • APP_WRAP_SH_x86_64