打造强大的Android C++工程


theme: cyanosis

好久没有写博客了,最近一直在做项目重构,动刀之深,让我无暇其他。今天终于告一段落了,就总结一下前段时间学习C++时的一些开发心得吧。

因为Android系统🈶️C++ 语言开发的原因,每个 Android开发者都或多或少的涉及过一些C++ 的开发,但是作为一个常年开发Android的人来讲,开发C++时变得不合乎常理,总感觉写的东西就是一个Demo,或者不知道怎么在工程中开发C++。

架构设计

首先,Android开发C++相关的东西,现在变的非常简单,只需要在创建项目时,根据AS的提示创建包含C++ 的开发环境,即可将需要的JNI环境全部创建出来,再稍微了解一下cmake的语法,没什么技术难度。

工具选择
  1. 纯Android项目 :AS对C++的开发语法支持也是较好的,所以直接在AS中开发即可
  2. 需要开发多平台项目:由于可能出现多个平台不同特性的开发,我们可以选择更专业的开发工具,比如CLion等.
项目结构

都用C++了,那我们就假设项目较大,使用平台较多吧,这会包含所有的开发场景的。

一般情况下,我们在物理结构上进行如下设计:

image.png

说明:
  1. 应用层(Application Layer):
  • 包括Android、iOS和其他多平台应用,负责用户交互和应用逻辑。
  1. SDK层(Proxy Layer) :
  • SDK:提供应用层接口,与C++核心层协作以创建具体的功能实现。
  • 配置管理:用于管理配置,包括选择要使用的具体实现的配置。
  1. C++核心层(C++ Core Layer) :
  • C++核心:这一层实现自己的抽象方法,将SDK提供的接口适配到具体的实现上。
  • 抽象工厂模式:根据SDK配置来选择创建具体功能实现的工厂。
  1. 具体功能实现库(Concrete Implementation Libraries)** :
  • eg:播放器库(Player Libraries) :包括不同的播放器实现,例如ijkplayer、exoplayer等。
  • 其他功能库:包括其他功能的具体实现,根据SDK配置来选择使用其中之一。
  1. C++基建层:提供通用功能,如日志记录、数据存储等,为C++项目提供基础设施支持。

在开发过程中可以将C++ core 层以下的东西直接在专业软件中开发,link 到AS的目录中即可调试

优点
  1. 模块化和可维护性:架构将不同功能和职责分离到不同的层级,使得每个层级都可以独立开发、测试和维护。这提高了代码的可维护性,并使开发人员能够更容易识别和解决问题。
  2. 代码重用性:通过将通用功能放在独立的基建层中,可以在整个C++项目和具体功能实现库之间实现代码重用。这有助于减少冗余代码的编写,提高开发效率。
  3. 可扩展性:架构的模块化性质意味着可以轻松添加新的具体功能实现,而不必重写整个应用程序。此外,可以在不影响应用层和SDK的情况下扩展通用基建功能。
  4. 灵活性:通过使用配置来选择具体功能实现,应用程序可以在不改变代码的情况下切换功能实现。这使得应用程序适应不同的需求和环境变得更加容易。
  5. 解耦合:架构将不同层级之间的关注点分离,使得它们相互独立,并减少了它们之间的紧密耦合。这有助于减小修改一个部分对其他部分的影响,从而提高了系统的稳定性。
  6. 跨平台支持:由于SDK层的存在,应用层可以跨不同平台共享相同的接口,而C++核心层可以根据平台特定的需求选择适当的具体实现。
  7. 易测试性:分离业务逻辑和功能实现使得测试更加容易。可以编写单元测试来验证各个层级的功能,从而提高代码的质量。

这样设计之后,C++ 层的东西可以按需插拔。团队开发时互相不会影响,测试也可以单独进行测试。通过采用模块化的架构设计,开发者可以更好地管理复杂性、提高代码质量,并更灵活地适应不同的需求和环境。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/322815.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Flutter 混合开发 - aar打包

背景 项目接入 Flutter 后有两种方式,一种是 module 引入开发,一种是 aar 依赖开发。当前项目中在 Debug 阶段为了方便调试采用 module 开发,在发版时(即 Release 阶段)采用 aar 依赖引入。为了配合这种模式就需要在 …

【2023年度技术盘点】「年终盘点后端系列」探索服务架构体系的技术风向,构建微服务核心能力(升级版)

探索服务架构体系的技术风向,构建微服务核心能力 文章导航大纲前提背景架构未来的风向云原生化的微服务架构(未来软件架构)历史历代服务架构路径新时代架构预测服务架构方向—云原生化微服务云原生化微服务提升了哪些方面 云原生化微服务架构…

XV4001BC (数字输出) 车载用

XV4001BC、XV4001BD、XV4001KC和XV4001KD是车载用SPI/I2C输出接口,支持角速度输出、温度传感器输出以及20度倾斜实现。这些接口可适应各种汽车导航和通讯系统,符合AEC-Q200标准 SPI / I2C 输出接口角速度输出(16bit)、温度传感器输出(11bit)20度倾斜实现…

OpenAI ChatGPT-4开发笔记2024-04:Chat之Tool之2:multiple functions

从程序员到ai Expert 1 设定目标2 自定义function,3个3 接口。自定义function--->ChatGPT4 define function to call ChatGPT5 发起首次请求,告诉gpt要做什么,已经有哪些函数可以调动6 大结局7 参考资料 上一篇解决了调用一个函数的问题。这一篇扩展为…

钉钉审批流程解读

组织机构 部门 部门可以创建下级部门部门可以设置部门主管,可以是多人部门可以默认构建,沟通群可以设置部门信息,比如电话、简介可以设置部门的可见性,比如隐藏本部门,本部门将不会在组织机构、搜索,个人…

Activiti7官方在线流程设计器下载和部署

文章目录 一、流程设计器下载二、流程设计器简单运行三、流程设计器简单使用四、流程设计器持久化持久化会遇到的常见错误 五、流程设计器汉化说明菜单汉化操作汉化 参考文档 一、流程设计器下载 官网下载地址:https://www.activiti.org/get-started 点击直接获取官…

1.1 Heterogeneous Parallel Computing

1.1 Heterogeneous Parallel Computing 前言HETEROGENEOUS PARALLEL COMPUTING 前言 基于单个中央处理器(CPU)的微处理器,如英特尔奔腾系列和AMD皓龙系列的微处理器,二十多年来推动了计算机应用程序的性能快速提高和成本降低。 …

Qt中图片旋转缩放操作

在我们开发过程中,难免会遇到加载图片的问题,在上一个开发项目里我就遇到了图片缩放的问题,所以,我决定将这一部分好好研究,记录下来,希望对大家有帮助哟~ 在讲解之前,我们先看一看具体的展示效…

运行了一晚上的经典京东面试原题

写在前面 今天在「京东」题库中翻到一道经典题。 众所周知,题目越经典,评论区越逆天。 可能是的呢 🤣 评论区常规操作 怀疑人生第一步:做道经典题 小白初评? 说归说,闹归闹,这道题还是要掌握的。…

Android studio报错误提示 Some Kotlin libraries attached to this project 问题解决方案

前些天发现了一个蛮有意思的人工智能学习网站,8个字形容一下"通俗易懂,风趣幽默",感觉非常有意思,忍不住分享一下给大家。 👉点击跳转到教程 Android新建项目后,报以下错误 错误提示内容为: 这个项目附带的一…

cesium键盘控制模型

效果: 由于对添加模型和更新位置api进行二次了封装,下面提供思路 1.添加模型 const person reactive({modelTimer: null,position: {lon: 104.07274,lat: 30.57899,alt: 1200,heading: 0,pitch: 0,roll: 0,}, }); window.swpcesium.addEntity.addMo…

Linux第3步_安装Ubuntu操作系统

创建好虚拟机后,就可以安装Ubuntu操作系统了。 1、双击“VMware Workstation Pro”,得到下面的界面。 2、点击“编辑虚拟机设置”,见下图: 3、等几秒钟,得到下面的界面: 4、点击“CD/DVD”,得到…