无需 Android-Studio 构建 CMake 库(通过命令行或 GUI)

Top*_*ter 2 command-line android cmake android-ndk

看来,Android-Studio 设置了特定的CMake选项,而且无论我尝试什么,我都无法使用命令行(Android-Studio 之外)进行构建!

有没有什么方法可以在不打开 Android-Studio 的情况下构建 Android 项目的 CMake 库?

注意:我已经找到了解决方案,并将很快分享答案。

Top*_*ter 5

是的,需要设置一些选项和/或变量才能使 CMake 命令行构建正常工作(甚至无需打开 Android-Studio)。

1. 首先,创建my-toolchain.cmake文件(在您的项目旁边,可能在config目录中),内容如下:

#
# Allows compiling outside of Android-Studio.
#

set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)

set(CMAKE_TOOLCHAIN_DIRECTORY "$ENV{ANDROID_HOME}/ndk-bundle/build/cmake")
if(NOT CMAKE_TOOLCHAIN_FILE)
  if(NOT ANDROID_ABI)
    # Default to 32 Bit ARMv7 CPU.
    set(ANDROID_ABI "armeabi-v7a")
  endif()
  if(NOT ANDROID_PLATFORM)
    set(ANDROID_PLATFORM "android-15")
  endif()
  set(CMAKE_TOOLCHAIN_FILE "${CMAKE_TOOLCHAIN_DIRECTORY}/android.toolchain.cmake")
endif()

if(WIN32 AND NOT CMAKE_MAKE_PROGRAM)
  set(CMAKE_MAKE_PROGRAM "$ENV{ANDROID_HOME}/ndk-bundle/prebuilt/windows/bin/make.exe" CACHE INTERNAL "" FORCE)
endif()

Run Code Online (Sandbox Code Playgroud)

2. 其次,将上一步创建的文件添加到您的项目中,例如:

cmake_minimum_required(VERSION 3.2)

# Detect toolchain.
include(config/my-toolchain.cmake)

project(MyProject C CXX)

# ... and so on ...
Run Code Online (Sandbox Code Playgroud)

3. 最后,cd在文件所在的控制台中CMakeLists.txt,使用以下命令进行构建:

#
# Allows compiling outside of Android-Studio.
#

set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)

set(CMAKE_TOOLCHAIN_DIRECTORY "$ENV{ANDROID_HOME}/ndk-bundle/build/cmake")
if(NOT CMAKE_TOOLCHAIN_FILE)
  if(NOT ANDROID_ABI)
    # Default to 32 Bit ARMv7 CPU.
    set(ANDROID_ABI "armeabi-v7a")
  endif()
  if(NOT ANDROID_PLATFORM)
    set(ANDROID_PLATFORM "android-15")
  endif()
  set(CMAKE_TOOLCHAIN_FILE "${CMAKE_TOOLCHAIN_DIRECTORY}/android.toolchain.cmake")
endif()

if(WIN32 AND NOT CMAKE_MAKE_PROGRAM)
  set(CMAKE_MAKE_PROGRAM "$ENV{ANDROID_HOME}/ndk-bundle/prebuilt/windows/bin/make.exe" CACHE INTERNAL "" FORCE)
endif()

Run Code Online (Sandbox Code Playgroud)

请注意,第 3 步的最后一个命令会根据您的操作系统而变化,但Windows如果您将ANDROID_HOME环境变量设置为 Android-SDK 根目录(当然,需要将 NDK 提取到ndk-bundle子目录中),则上述命令应该适用。

全做完了!
只需对每个 CPU 架构重复步骤 3,即更改ANDROID_ABI为可能的选项之一:
armeabi-v7a, arm64-v8a, x86, x86_64, mips,mips64

虽然mipsmips64现已弃用(并且Android NDK r16b是支持它们的最后一个版本)。