Android Studio với Cmake build Ndk

I.Cross Compiling cho Android

Một tập tin toolchain có thể cấu hình qua compiling cho Android bằng cách thiết lập biến CMAKE_SYSTEM_NAME cho Android. Cấu hình nào cụ thể cho các môi trường phát triển Android sẽ được sử dụng.

Đối với Visual Studio Generators , CMake phải được cài đặt trên NVIDIA Tegra Nsight Visual Studio. T

Đối với phát Makefile và Ninja, CMake yêu cầu một trong những môi trường:

  • NDK
  • Standalone toolchain

CMake sử dụng các bước sau đây để lựa chọn một trong các môi trường:

  • Nếu CMAKE_ANDROID_NDK biến được thiết lập, NDK tại vị trí quy định sẽ được sử dụng.
  • nếu biến CMAKE_ANDROID_STANDALONE_TOOLCHAIN được thiết lập, các Standalone toolchain tại vị trí quy định sẽ được sử dụng.
  • nếu biến CMAKE_SYSROOT được đặt vào một thư mục của các hình thức <ndk>/platforms/android-<api>/arch-<arch>, các <ndk> phần sẽ được sử dụng như là các giá trị củaCMAKE_ANDROID_NDK và NDK sẽ được sử dụng.
  • nếu CMAKE_SYSROOTbiến được đặt vào một thư mục của các hình thức <standalone-toolchain>/sysroot, các <standalone-toolchain>phần sẽ được sử dụng như là các giá trị củaCMAKE_ANDROID_STANDALONE_TOOLCHAIN và Standalone toolchain sẽ được sử dụng.
  • nếu một biến cmake ANDROID_NDK là thiết lập nó sẽ được sử dụng như giá trị củaCMAKE_ANDROID_NDK, Và NDK sẽ được sử dụng.
  • nếu một biến cmake ANDROID_STANDALONE_TOOLCHAINđược thiết lập, nó sẽ được sử dụng như giá trị củaCMAKE_ANDROID_STANDALONE_TOOLCHAIN, Và các Standalone toolchain sẽ được sử dụng.
  • nếu một biến môi trường ANDROID_NDK_ROOThoặc ANDROID_NDKđược thiết lập, nó sẽ được sử dụng như giá trị của CMAKE_ANDROID_NDK, Và NDK sẽ được sử dụng.
  • nếu một biến môi trường ANDROID_STANDALONE_TOOLCHAINđược thiết lập sau đó nó sẽ được sử dụng như giá trị của CMAKE_ANDROID_STANDALONE_TOOLCHAIN, Và các Standalone toolchain sẽ được sử dụng.
  • một lỗi chẩn đoán sẽ được ban hành mà không phải NDK hoặc Standalone toolchain có thể được tìm thấy.

II.Cross Compiling cho Android vói NDK

tệp tin toolchain có thể được cấu hình qua Makefile Genrators hoặc Ninja Generator với từng loại Android để cross-compiling.

Cấu hình sử dụng một NDK Android với các biến sau:

  • CMAKE_SYSTEM_NAME Cài đặt Android. Phải được xác định để cho phép biên dịch chéo cho Android.

  • CMAKE_SYSTEM_VERSION Đặt mức API Android. Nếu không quy định, giá trị được xác định như sau: Nếu biến CMAKE_ANDROID_API được thiết lập, giá trị của nó được sử dụng như các mức API. Nếu biến CMAKE_SYSROOT được thiết lập, mức API được phát hiện từ cấu trúc thư mục NDK chứa sysroot. Nếu không, mức API mới nhất hiện có trong NDK được sử dụng.

  • CMAKE_ANDROID_ARCH_ABI Đặt cho Android ABI (kiến trúc). Nếu không quy định, biến này sẽ mặc định armeabi. Biến CMAKE_ANDROID_ARCH sẽ được tính từ CMAKE_ANDROID_ARCH_ABI tự động. Cũng thấy các biến * * * CMAKE_ANDROID_ARM_MODE và CMAKE_ANDROID_ARM_NEON.

  • CMAKE_ANDROID_NDK Đặt đường dẫn tuyệt đối đến thư mục gốc Android NDK. A $ {} CMAKE_ANDROID_NDK / nền tảng phải tồn tại. Nếu không quy định, một mặc định cho biến này sẽ được lựa chọn theo quy định trên.

  • CMAKE_ANDROID_NDK_TOOLCHAIN_VERSION Đặt các phiên bản của toolchain NDK được lựa chọn như trình biên dịch. Nếu không quy định, mặc định sẽ là mới nhất hiện có GCC toolchain.

  • CMAKE_ANDROID_STL_TYPE Thiết lập để xác định C ++ tiêu chuẩn thư viện để sử dụng. Nếu không quy định, mặc định sẽ được lựa chọn như mô tả trong tài liệu biến. Các biến sau đây sẽ được tính toán và cung cấp tự động:

  • CMAKE_ <LANG> _ANDROID_TOOLCHAIN_PREFIX Đường dẫn tuyệt đối tiền tố để các binutils trong toolchain NDK.

  • CMAKE_ <LANG> _ANDROID_TOOLCHAIN_SUFFIX Các nền tảng máy chủ hậu tố của binutils trong toolchain NDK.

Ví dụ, một tập tin toolchain có thể chứa:

set(CMAKE_SYSTEM_NAME Android)
set(CMAKE_SYSTEM_VERSION 21) # API level
set(CMAKE_ANDROID_ARCH_ABI arm64-v8a)
set(CMAKE_ANDROID_NDK /path/to/android-ndk)
set(CMAKE_ANDROID_STL_TYPE gnustl_static)

Ngoài ra người ta có thể xác định các giá trị mà không có một tập tin toolchain:

$ cmake ../src \
  -DCMAKE_SYSTEM_NAME=Android \
  -DCMAKE_SYSTEM_VERSION=21 \
  -DCMAKE_ANDROID_ARCH_ABI=arm64-v8a \
  -DCMAKE_ANDROID_NDK=/path/to/android-ndk \
  -DCMAKE_ANDROID_STL_TYPE=gnustl_static

III.Cross Compiling cho Android với Standalone Toolchain

tệp tin toolchain có thể được cấu hình qua Makefile Genrators hoặc Ninja Generator với mục tiêu Android sử dụng standalone toolchain để cross-compiling.

Cấu hình sử dụng một standalone toolchain với các biến sau:

  • CMAKE_SYSTEM_NAME Đặt Android. Phải được xác định để cho phép biên dịch chéo cho Android.
  • CMAKE_ANDROID_STANDALONE_TOOLCHAIN Đặt đường dẫn tuyệt đối đến thư mục gốc standalone toolchain. A $ {} CMAKE_ANDROID_STANDALONE_TOOLCHAIN ​​/ thư mục sysroot phải tồn tại. Nếu không quy định, một mặc định cho biến này sẽ được lựa chọn theo quy định trên.
  • CMAKE_ANDROID_ARM_MODE Khi standalone toolchain ARM, tùy chọn thiết lập này để ON để nhắm mục tiêu ARM 32-bit thay vì 16-bit Thumb. Xem tài liệu biến để biết chi tiết.
  • CMAKE_ANDROID_ARM_NEON Khi các mục tiêu standalone toolchain ARM v7, tùy chọn thiết lập thisto ON để nhắm mục tiêu các thiết bị NEON ARM. Xem tài liệu biến để biết chi tiết. Các biến sau đây sẽ được tính toán và cung cấp tự động:
  • CMAKE_SYSTEM_VERSION Mức API Android được phát hiện từ standalone toolchain.
  • CMAKE_ANDROID_ARCH_ABI Android ABI phát hiện từ standalone toolchain.
  • CMAKE_ <LANG> _ANDROID_TOOLCHAIN_PREFIX Đường dẫn tuyệt đối tiền tố để các binutils trong standalone toolchain.
  • CMAKE_ <LANG> _ANDROID_TOOLCHAIN_SUFFIX Các nền tảng máy chủ hậu tố của binutils trong standalone toolchain. Ví dụ, một tập tin toolchain có thể chứa:
set(CMAKE_SYSTEM_NAME Android)
set(CMAKE_ANDROID_STANDALONE_TOOLCHAIN /path/to/android-toolchain)

Ngoài ra người ta có thể xác định các giá trị mà không có một tập tin toolchain:

$ cmake ../src \
  -DCMAKE_SYSTEM_NAME=Android \
  -DCMAKE_ANDROID_STANDALONE_TOOLCHAIN=/path/to/android-toolchain

IV.Cross Compiling cho Android với NVIDIA Nsight Tegra Visual Studio Edition

Một tập tin toolchain để cấu hình một trong những Visual Studio Generators để xây dựng sử dụng nhắm mục tiêu Android có thể trông như thế này NVIDIA Tegra Nsight:

set(CMAKE_SYSTEM_NAME Android)

The CMAKE_GENERATOR_TOOLSET có thể được thiết lập để chọn Nsight Tegra “Toolchain Version”.

Xem thêm các thuộc tính:

  • ANDROID_ANT_ADDITIONAL_OPTIONS
  • ANDROID_API_MIN
  • ANDROID_API
  • ANDROID_ARCH
  • ANDROID_ASSETS_DIRECTORIES
  • ANDROID_GUI
  • ANDROID_JAR_DEPENDENCIES
  • ANDROID_JAR_DIRECTORIES
  • ANDROID_JAVA_SOURCE_DIR
  • ANDROID_NATIVE_LIB_DEPENDENCIES
  • ANDROID_NATIVE_LIB_DIRECTORIES
  • ANDROID_PROCESS_MAX
  • ANDROID_PROGUARD_CONFIG_PATH
  • ANDROID_PROGUARD
  • ANDROID_SECURE_PROPS_PATH
  • ANDROID_SKIP_ANT_STEP
  • ANDROID_STL_TYPE