打造强大的Android C++工程

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

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

架构设计

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

工具选择

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

项目结构

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

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

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

相关推荐
冷白白16 分钟前
【C++】C++对象初探及友元
c语言·开发语言·c++·算法
睡觉然后上课35 分钟前
c基础面试题
c语言·开发语言·c++·面试
qing_04060342 分钟前
C++——继承
开发语言·c++·继承
ya888g43 分钟前
GESP C++四级样题卷
java·c++·算法
小叶学C++1 小时前
【C++】类与对象(下)
java·开发语言·c++
NuyoahC1 小时前
算法笔记(十一)——优先级队列(堆)
c++·笔记·算法·优先级队列
FL16238631292 小时前
[C++]使用纯opencv部署yolov11-pose姿态估计onnx模型
c++·opencv·yolo
sukalot2 小时前
windows C++-使用任务和 XML HTTP 请求进行连接(一)
c++·windows
落落落sss2 小时前
MybatisPlus
android·java·开发语言·spring·tomcat·rabbitmq·mybatis
ぃ扶摇ぅ2 小时前
Windows系统编程(三)进程与线程二
c++·windows