Navigation

    蓝鲸ROS机器人论坛

    • Register
    • Login
    • Search
    • Categories
    • Tags
    • Popular
    ROS交流群
    ROS Group
    产品服务
    Product Service
    开源代码库
    Github
    官网
    Official website
    技术交流
    Technological exchanges
    激光雷达
    LIDAR
    ROS教程
    ROS Tourials
    深度学习
    Deep Learning
    机器视觉
    Computer Vision

    如何利用cmake移植程序到Android

    技术交流
    2
    3
    1888
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • weijiz
      weijiz last edited by

      很多c++和c程序都使用cmake去管理程序依赖和编译程序。新版本的cmake已经支持 cross compile 程序到android平台。我们可以利用ndk和cmake很方便的移植程序。下面是一个移植的例子。

      安装clang

      因为新版本的ndk已经默认使用clang进行编译了

      安装方式参照这里

      安装新版本的cmake(>3.14)

      wget -q https://github.com/Kitware/CMake/releases/download/v3.14.0-rc4/cmake-3.14.0-rc4.tar.gz
      tar -xzf cmake-3.14.0-rc4.tar.gz
      cd cmake-3.14.0-rc4/
      env CC=$(which clang) CXX=$(which clang++) ./bootstrap --prefix=/usr --parallel=4
      make
      sudo make install
      

      下载NDK

      cd ..
      wget -q https://dl.google.com/android/repository/android-ndk-r18b-linux-x86_64.zip
      unzip -qq android-ndk-r18b-linux-x86_64.zip
      export NDK_ROOT=$(pwd)/android-ndk-r18b
      

      创建toolchain文件

      toolchain文件是cmake用来设置编译工具链的文件。配置好此文件就可以让cmake cross compile android 程序了。

      toolchain.cmake文件内容如下

      # 设置编译Android
      set(CMAKE_SYSTEM_NAME Android)
      # 设置Android NDK 路径
      set(CMAKE_ANDROID_NDK $ENV{NDK_ROOT})
      # 设置 Android ABI
      set(CMAKE_ANDROID_ARCH_ABI armeabi-v7a)
      # 设置target api版本
      set(CMAKE_SYSTEM_VERSION 19)
      # 设置cmake寻找路径,自己随便创建一个文件夹, 依赖的相关库文件也要放在这里
      set(CMAKE_FIND_ROOT_PATH /opt/arm)
      
      # 设置cmake搜寻文件的方式,防止使用系统中的其他不相干文件
      set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM BOTH)
      set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
      set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
      

      编译自己的程序

      和正常编译方式差别不大,只要加上toolchain参数就可以了

      mkdir build
      cd build
      cmake -DCMAKE_TOOLCHAIN_FILE=$TOOLCHAIN_ROOT/toolchain.cmake -DCMAKE_INSTALL_PREFIX=$INSTALL_PREFIX  ..
      

      TOOLCHAIN_ROOT是你的toolchain文件路径, INSTALL_PREFIX是之前设置的CMAKE_FIND_ROOT_PATH。这样就可以cross compile Android程序了。

      shaokangfeng 1 Reply Last reply Reply Quote 0
      • shaokangfeng
        shaokangfeng @weijiz last edited by

        @weijiz 你好,我想请教下一个问题。现在我有一个Android 10.0的源码工程,想移植采用cmake编译的项目到这个工程上,Android.bp文件要怎么写才能运行cmake命令?

        weijiz 1 Reply Last reply Reply Quote 0
        • weijiz
          weijiz @shaokangfeng last edited by

          @shaokangfeng 我没用过android.bp,我的是直接cmake在android studio外编译的。

          1 Reply Last reply Reply Quote 0
          • 1 / 1
          • First post
            Last post
          Copyright © 2015-2023 BlueWhale community