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

相关推荐

  1. 深入Pandas:数据分析强大工具

    2024-01-08 14:02:02       34 阅读
  2. React:构建用户界面强大工具

    2024-01-08 14:02:02       26 阅读
  3. 强大蓝牙工具Ubertooth系列

    2024-01-08 14:02:02       27 阅读
  4. 深入了解 STL:强大编程工具

    2024-01-08 14:02:02       16 阅读
  5. NumPy:深度学习领域强大工具

    2024-01-08 14:02:02       13 阅读
  6. PyTorch:深度学习领域强大工具

    2024-01-08 14:02:02       12 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-08 14:02:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-08 14:02:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-08 14:02:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-08 14:02:02       18 阅读

热门阅读

  1. Nacos vs Eureka的区别:微服务注册中心的选择

    2024-01-08 14:02:02       36 阅读
  2. [设计模式 Go实现] 结构型~外观模式

    2024-01-08 14:02:02       30 阅读
  3. 2024年超详细的Python3学习路径规划

    2024-01-08 14:02:02       35 阅读
  4. vue项目获取 iframe 中的DOM元素

    2024-01-08 14:02:02       34 阅读
  5. android常用方法

    2024-01-08 14:02:02       42 阅读