Top*_*ter 2 command-line android cmake android-ndk
看来,Android-Studio 设置了特定的CMake选项,而且无论我尝试什么,我都无法使用命令行(Android-Studio 之外)进行构建!
有没有什么方法可以在不打开 Android-Studio 的情况下构建 Android 项目的 CMake 库?
注意:我已经找到了解决方案,并将很快分享答案。
是的,需要设置一些选项和/或变量才能使 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
虽然mips和mips64现已弃用(并且Android NDK r16b是支持它们的最后一个版本)。
| 归档时间: |
|
| 查看次数: |
1803 次 |
| 最近记录: |