• 如果觉得本站的内容有帮助,可以考虑打赏博主哦!

  • 欢迎大家交换友链,可在https://www.stubbornhuang.com/申请友情链接进行友链交换申请!

  • 本站会放置Google广告用于维持域名以及网站服务器费用。

  • 在本站开通年度VIP,无限制下载本站资源和阅读本站文章

  • 计算机图形学与计算几何经典必备书单整理,下载链接可参考:https://www.stubbornhuang.com/1256/

  • 本站由于前段时间遭受到大量临时和国外邮箱注册,所以对可注册的邮箱类型进行了限制!

  • 问题反馈可发送邮件到stubbornhuang@qq.com

  • 工资「喂饱肚子」,副业「养活灵魂」!

  • 感谢大家访问本站,希望本站的内容可以帮助到大家!

Windows使用CMake交叉编译Android项目

编程技术 发布于2023-12-07 阅读 3,270次 0次评论 0次点赞 本文共3291个字,阅读需要9分钟。

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_SDKANDROID_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

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

文章末尾
上一篇
NCNN - ncnn将onnx模型转换为fp16模型
NCNN
下一篇
Windows交叉编译Crypto++ Android库
编程技术
当前分类随机文章推荐

发表评论

您必须 [ 登录 ] 才能发表留言!

关注我们的公众号

微信公众号