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

相关推荐
会编程的小孩4 小时前
C++ qt的安装
c++
美狐美颜SDK开放平台6 小时前
准备开发直播APP?视频美颜SDK接入前的十项检查清单
android·ios·音视频·直播美颜sdk·视频美颜sdk
传奇开心果编程6 小时前
【Jetpack Compose娓娓道来】第26课:Repository模式与数据层设计——数据的唯一入口
android·移动开发·1024程序员节·jetpack compose·编程语言理论·编程框架·声明式ui
小成2023032026510 小时前
C++~07补充
开发语言·c++
hold?fish:palm10 小时前
40 二叉树的直径
c++·leetcode
三少爷的鞋10 小时前
Kotlin 协程,重点就在「协」这个字上
android·kotlin
好的佩奇11 小时前
Dart 之模式
android·flutter·dart
解决小子11 小时前
【虚幻引擎】【C++】【GAS框架】构建角色基类、属性集、数值钳制
c++·笔记·游戏引擎·虚幻·gas·能力系统
lunar_coder12 小时前
【C++】如何解决智能指针的析构函数,如何实现shared_ptr的引用计数以及解决shared_ptr的循环引用
c++·1024程序员节
白白白小纯12 小时前
C++进阶.多态
c++