1 准备环境
在Windows系统上使用CMake交叉编译Android项目需要准备以下环境:
- Android SDK
- Android NDK
- CMake
如果之前安装了Android Studio则可以使用Android Studio中安装的SDK、NDK、CMake。
2 在Windows上交叉编译Android项目示例
假设我们有一个这样的main.cpp
,里面的代码如下
#include <iostream>
int main()
{
double a = 1.0 + 5.0;
std::cout << "sum = " << a << std::endl;
return 0;
}
现在我们想让这个程序在Android上跑,而我们现在的操作系统是Windows,那么如何使用CMake将上面的代码编译成Android可以运行的可执行程序呢?
首先我们要为上述代码写一个CMakeLists.txt,内容如下
# CMake最低版本号要求
cmake_minimum_required(VERSION 3.6)
# 项目信息
project (AndroidCrossCompile)
# 设置目标文件的名字
set(TARGET_NAME android_corss_test)
# 生成可执行文件
add_executable(${TARGET_NAME} main.cpp)
然后我们新建一个build_android.bat
Windows的批处理文件,在该文件中写入以下内容
@REM abi=armeabi armeabi-v7a arm64-v8a mips mips64 x86 x86_64
set abi=arm64-v8a
set ANDROID_SDK_HOME=F:/Software/Android/AndroidSDK/SDK
set ANDROID_NDK_HOME=F:/Software/Android/AndroidSDK/SDK/ndk/25.1.8937393
set ANDROID_SDK_CMAKE=%ANDROID_SDK_HOME%/cmake/3.22.1
set ANDROID_NATIVE_API_LEVEL=19
set ANDROID_PLATFORM=android-29
set BUILD_TYPE=Release
set GENERATOR="Ninja"
if not exist build md build
cd build
@REM build armeabi-v7a
if not exist %abi% md %abi%
cd %abi%
%ANDROID_SDK_CMAKE%/bin/cmake ^
-DANDROID_ABI=%abi% ^
-DANDROID_NDK=%ANDROID_NDK_HOME% ^
-DCMAKE_BUILD_TYPE=%BUILD_TYPE% ^
-DCMAKE_TOOLCHAIN_FILE=%ANDROID_NDK_HOME%/build/cmake/android.toolchain.cmake ^
-DANDROID_PLATFORM=%ANDROID_PLATFORM% ^
-DANDROID_NATIVE_API_LEVEL=%ANDROID_NATIVE_API_LEVEL% ^
-DANDROID_TOOLCHAIN=clang ^
-DCMAKE_GENERATOR=%GENERATOR% ^
-DCMAKE_MAKE_PROGRAM=%ANDROID_SDK_CMAKE%/bin/ninja ^
../../
%ANDROID_SDK_CMAKE%/bin/ninja
cd ../../
在以上内容中我们需要配置ANDROID_SDK、ANDROID_NDK、以及所使用CMake的路径,上面的路径需要根据自己的路径进行修改。
整个项目结构如下
build_android.bat
CMakeLists.txt
main.cpp
然后在该目录直接点击运行build_android.bat
批处理文件,如果一切编译顺利的话则会出现以下的日志信息
C:\Users\Admin\Desktop\Android Cmake Test\build\arm64-v8a>F:/Software/Android/AndroidSDK/SDK/cmake/3.22.1/bin/cmake -DANDROID_ABI=arm64-v8a -DANDROID_NDK=F:/Software/Android/AndroidSDK/SDK/ndk/25.1.8937393 -DCMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE=F:/Software/Android/AndroidSDK/SDK/ndk/25.1.8937393/build/cmake/android.toolchain.cmake -DANDROID_PLATFORM=android-29 -DANDROID_NATIVE_API_LEVEL=19 -DANDROID_TOOLCHAIN=clang -DCMAKE_GENERATOR="Ninja" -DCMAKE_MAKE_PROGRAM=F:/Software/Android/AndroidSDK/SDK/cmake/3.22.1/bin/ninja ../../
-- The C compiler identification is Clang 14.0.6
-- The CXX compiler identification is Clang 14.0.6
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: F:/Software/Android/AndroidSDK/SDK/ndk/25.1.8937393/toolchains/llvm/prebuilt/windows-x86_64/bin/clang.exe - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: F:/Software/Android/AndroidSDK/SDK/ndk/25.1.8937393/toolchains/llvm/prebuilt/windows-x86_64/bin/clang++.exe - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: C:/Users/HuangWang/Desktop/Android Cmake Test/build/arm64-v8a
生成完成之后,如果我们在build_android.bat
设置的abi为arm64-v8a,那么则会在该文件夹下创建一个build文件夹,在build文件夹下会创建一个arm64-v8a文件夹,里面为cmake目录,并且保存了编译完成的可执行程序。
3 验证交叉编译的可执行程序
将测试的Android手机通过USB数据线连接到电脑,这里需要在windows中配置adb环境,然后通过adb命令将交叉编译的可执行程序push到一个临时目录下,然后看是否可以执行成功,具体的命令如下
adb push ./arm64-v8a/android_corss_test /data/local/tmp
adb shell
cd /data/local/tmp
chmod 777 ./android_corss_test
./android_corss_test
执行完成之后看是否输出6,如果可执行成功并且输出正确结果6,则说明交叉编译成功。
本文作者:StubbornHuang
版权声明:本文为站长原创文章,如果转载请注明原文链接!
原文标题:Windows使用CMake交叉编译Android项目
原文链接:https://www.stubbornhuang.com/2906/
发布于:2023年12月07日 15:55:04
修改于:2023年12月07日 16:20:17
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
评论
52