IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> 车联网通信中间件 -- vsomeip协议栈的编译 -> 正文阅读

[移动开发]车联网通信中间件 -- vsomeip协议栈的编译

前言

本文目的在于记录SOME/IP协议的实现库-- vsomeip协议栈在android平台中的编译,内容包含如下:

  • 环境配置
  • 编译依赖
  • 工程配置

环境配置

环境:

操作系统:Window10 	
IDE:AndroidStudio  	
gradle版本:6.7.1 	
cmake版本:3.17.2

这里简单说一下,在实际操作过程中有尝试过使用更高版本的cmake与gradle工具来编译,但是产生的问题是使用高版本的gradle编译后libvsomeip3.so库无法生成,但是无编译报错。使用高版本的cmake会导致编译报错。因为时间问题暂且放后续跟进,有知道的兄弟可以说下。

编译依赖

vsomeip中的网络通讯以及部分dlt日志实现依赖c++ boost库,因此需要这两部分的源码

  • 下载vsomeip协议栈包

https://github.com/GENIVI/vsomeip

  • 下载boost库,版本必须大于1.55,依赖其中的三个模块(system, thread and log)

https://master.dl.sourceforge.net/project/boost/boost/1.71.0.beta1/boost_1_71_0_b1.tar.bz2?viasf=1或者去https://www.boost.org/users/download/下载指定的版本

  • 下载boost编译配置工程

https://github.com/Orphis/boost-cmake

工程配置

新建工程,类型选择native应用,工程目录如下:
在这里插入图片描述

修改编译环境

  • 指定gradle编译版本:
//工程的build.gradle文件指定gradle工具为4.0.1
buildscript {
    ext.kotlin_version = "1.5.31"
    repositories {
        google()
        mavenCentral()
    }
    dependencies {
        classpath "com.android.tools.build:gradle:4.0.1"
        ...
        ...
    }
}

修改gradle/wrapper/gradle-wrapper.properties, 指定gradle版本为6.7.1,此处如有同步失败,需要gradle-wrapper.jar同步更新为低版本的jar包。

distributionUrl=https\://services.gradle.org/distributions/gradle-6.7.1-bin.zip
  • 指定cmake版本

修改local.properties

sdk.dir=C\:\\Users\\zoujie\\AppData\\Local\\Android\\Sdk
cmake.dir=C\:\\Users\\zoujie\\AppData\\Local\\Android\\Sdk\\cmake\\3.17.2
  • 指定模块的CMakeLists.txt文件

修改app模块的build.gradle, 在android{} 目录下添加如下:

android{
    defaultConfig{
         ...
         ...
         externalNativeBuild {
            cmake {
                cppFlags ""
                abiFilters "arm64-v8a"
                arguments "-DANDROID_STL=c++_shared", "-DLOGGER_BUILD_HEADER_LIB=OFF", "-DUSE_INSTALLED_COMMONAPI=OFF"
            }
        }
    }
	externalNativeBuild {
	     cmake {
	          path "../CMakeLists.txt"
	          version "3.17.2"
         }
	}
}

添加模块编译

external 是新建的文件夹,我们需要将编译依赖模块中提到的boost-cmake, boost, vsomeip的三个工程下载下来复制到该目录下。

  • boost-cmake主要是用来构建boost模块的配置文件,默认是从网络上fetch boost源码,我们已经手动下载了就不需要去重复同步,只需修改boost-cmake/CMakeLists.txt文件,修改内容如下:
#指定boost库代码本地路径
set(FETCHCONTENT_SOURCE_DIR_BOOST ${CMAKE_CURRENT_SOURCE_DIR}/../boost_1_72_0)
#注释从网络同步boost代码的逻辑
#set(BOOST_URL "https://master.dl.sourceforge.net/project/boost/boost/1.71.0.beta1/boost_1_71_0_b1.tar.bz2?viasf=1" CACHE STRING "Boost download URL")
#set(BOOST_URL_SHA256 "d73a8da01e8bf8c7eda40b4c84915071a8c8a0df4a6734537ddde4a8580524ee" CACHE STRING "Boost download URL SHA256 checksum")

include(FetchContent)
#注释从网络同步boost代码的逻辑
#FetchContent_Declare(
#  Boost
#  URL ${BOOST_URL}
#  URL_HASH SHA256=${BOOST_URL_SHA256}
#)
# add
FetchContent_GetProperties(Boost)
  • cmake_module 是存放查找库的配置文件信息的,新建FindBoost.cmake, Findvsomeip3.cmake两个文件,内容如下:

FindBoost.cmake文件内容

set(Boost_FOUND TRUE)
set(Boost_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../boost_1_72_0)

# Detect Boost version
file(STRINGS "${Boost_INCLUDE_DIR}/boost/version.hpp" boost_version_raw
  REGEX "define BOOST_VERSION "
)
string(REGEX MATCH "[0-9]+" boost_version_raw "${boost_version_raw}")
set(Boost_VERSION ${boost_version_raw})

foreach(comp ${Boost_FIND_COMPONENTS})
    list(APPEND Boost_LIBRARIES Boost::${comp})
endforeach()

Findvsomeip3.cmake

set(vsomeip3_FOUND TRUE)
set(vsomeip3_VERSION "030120")
set(VSOMEIP3_INCLUDE_DIRS ${CMAKE_SOURCE_DIR}/external/vsomeip-3.1.20.3/interface)

list(APPEND VSOMEIP_LIBRARIES vsomeip3)
  • 根目录的CMakeLists.txt文件是整个工程C/C++库的编译配置入口,内容如下:
cmake_minimum_required(VERSION 3.4.1)

project(SomeIP)
#设置库输出目录
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/output/${CMAKE_ANDROID_ARCH_ABI}/)
#将所有Find文件加入查找模块路径
list(APPEND CMAKE_MODULE_PATH      ${CMAKE_SOURCE_DIR}/cmake_module)
#添加boost库编译
add_subdirectory(external/boost-cmake)
#添加vsomeip库编译
add_subdirectory(external/vsomeip-3.1.20.3)
#添加本地C++代码编译
add_subdirectory(app/src/main/cpp)

配置完成启动编译,编译完成后即可在工程目录中看到相关的库:
在这里插入图片描述

当然这里也可以使用ubuntu虚拟机去编译vsomeip与boost,然后拷贝so库跟头文件到项目中,引用so库的方式可以参考我之前写的文章,不过这种方式太麻烦,我还是采用AndroidStudio构建了,下一篇文章来看看vsomeip中的常用API以及用法,配置。

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-07-17 16:34:46  更:2022-07-17 16:35:40 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 4:06:23-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码