android架构拆分方案

9 篇文章 2 订阅
5 篇文章 1 订阅

编译拆https://blog.csdn.net/dongyi1988/article/details/128629011

结构拆https://blog.csdn.net/dongyi1988/article/details/128633808

google对android架构的拆分

android的linux内核解耦https://blog.csdn.net/dongyi1988/article/details/128731557

android的system域解耦https://blog.csdn.net/dongyi1988/article/details/128739983

一、背景

android设备已经遍及各行各业,手机整个项目阶段包括需求沟通,硬件设计打板,研发联调,小批量测试等,涉及的版本可能包括国内版本、国际版本、线下商店演示版本、认证版本、生产版本。现实是终端设备是10个月一个新产品,3个月迭代出新版本,新产品真正给研发的时间可能只有3-4个月时间。

如此多的工作内容,如此紧迫的工期,项目该如何处理?这里谈下项目架构方面内容,不谈项目管理。

下面就认识下android手机的差异性需求:

  1. 华为系有harmonyOS,小米有MIUI、OPPO有colorOS,显然每个厂家都有自己UI方案。

  1. 芯片平台区分于高通芯片、联发科芯片、麒麟芯片等,芯片还区分高中低端产品。

  1. 手机除芯片外硬件种类繁多,例如RAM、充电IC、电池、摄像头、屏幕、WLAN&NFC&BT、指纹、各种sensor(加速度传感器、光感、距感、陀螺仪等)等等;单个硬件厂商也是繁多,光屏幕就包括三星、京东方、天马、LG、TCL等等。并且手机厂商为了规避风险一般一种器件会选择二种以上的供应商。

  1. 厂商一般有定制手机应用与特性UI,例如互联互通、商务机、游戏性能机、老年机、特殊行业机。这区别于NFC、指纹等硬件功能相关的差异性。

  1. 还需要适应不同国家地区的射频频段,输入法与语言,符合当地的法律法规等需求。

  1. 不同场景线下的版本需求又有差异,会出现上面提到的商店演示版本、认证版本、生产版本、正式用户版本。

如此多的差异需要一个拆分解耦思想,把工作任务拆分出来,分给各个领域去实现。当然这个差异还能再分,但不再细说。这里主要讲的是andorid系统设备软件结构拆分思路,大家理解即可。

二、android架构 极简介

早期开发一般是如下图的开发方式

开机流程

https://blog.csdn.net/dongyi1988/article/details/103994152?spm=1001.2014.3001.5501

EDL、recovery、android三个模式启动大概流程如上图,modem、安全域与稳定性相关就不扩展。

开机镜像

按开机流程都会有对应镜像https://blog.csdn.net/ly890700/article/details/67634784

sbl1.img(abl) Partition for secondary boot loader

emmc_appsboot.mbn(aboot) Partition for apps boot loader

recovery.img(recovery) This is specially designed for backup. The recovery partition can be considered as an alternative boot partition

boot.img(boot): Android bootimg, kernel, ramdisk, page size: 2048, cmdline (console=ttyMSM0,115200,n8 androidboot.console=ttyMSM0 androidbo)

system.img(system): This partition contains the entire Android OS, other than the kernel and the ramdisk. This includes the Android GUI and all the system applications that come pre-installed on the device

vendor.img(vendor): 芯片域

odm.img(odm) : 厂商定制

dtbo.img(dtbo): 设备树叠加层

域的概念

按照背景里面提到的需求差异,我们增加域的概念,每个域负责不同类型的差异化需求。

system系统域,负责系统的差异化,例如harmonyOS、MIUI、colorOS;

vendor芯片域,负责芯片的差异化,例如高通、MTK、海思、全志等;

device设备域,负责外设的差异化,例如TP、LCD、memory、充电IC、NFC、指纹等等硬件的差异;

odm厂商域,负责厂商的产品系列定制,例如定制应用与UI、商务机、游戏性能机、老年机、特殊行业机等;

product产品域,负责地域与法规的差异化;

version版本域,负责场景的差异化处理版本差异。

三、结构拆分

拆分目的是项目任务拆分,并行开发。每个域独立开发同时增加域的复用性,减少重复移植,提高效率。

2020年在https://blog.csdn.net/dongyi1988/article/details/103995862blog中提到,如果repo可以include,<google的manifest>,<方案商的manifest>,<自己的manifest>来共同管理一套源码,将是非常爽的事情,其实google,方案商,一些厂商一直都在往这方向努力。

所以这拆分不是我提出来,不是copy某厂商,不涉及厂商方案,这里只说下google与平台方案商的拆分,以及部分已知技术。再来波否认三连图强调。

思想

我们按域的概念将整个终端业务开发工作拆分成各个领域,各领域部门管理自己的代码分支,独立开发编译,生成的镜像在出版本时再组包发布。

a.代码拆分,各领域负责自己的代码;

b.镜像拆分,各领域负责自己的镜像,标注版本和更新list;

c.如果功能有领域交叉内容,功能负责人整理补丁给相关领域;

d.版本发布时,匹配各个领域的镜像,进行组合打包。

android官网划分

优劣评估

基本就是拆分解耦的优劣

优势

  1. 首先就是工作的分工,并行开发带来效率的提升;

  1. 加快编译与调试速度,只需要编译自己负责领域的镜像,再进行组包即可;

  1. 模块的分工可以扩展商业模式,device域可以交给供应商,vendor域可以外包;

  1. 产品省去移植步骤,研发可以更专注自己的领域,更多精力去迭代成长,远离移植,远离无效加班;

  1. 同因问题可类比追溯;

  1. 厂商可以保护自己核心技术、核心需求方案,不断淬炼形成技术or需求壁垒;

  1. 各域的镜像版本可以任意组合;

  1. 快速定制,提供定制指导后,还能卖方案。

劣势

1.需要各域剥离完善的成熟主干;

2.需要合理架构规划,整个系统必须能拆能组;

3.剥离与架构规划难度高,需要资深开发与架构;

4.一个地方出了问题影响多项目产品,需要专业的程序员;

5.跨域的功能容易产生责任/分工上的分歧,甚至冲突。

四、拆分相关技术

modem、安全域与稳定性会使整个拆分更复杂化,这里不扩展。

后面与技术细节更紧密,分开blog来讲;这里给个目录结构,均是现有成熟技术,欢迎厂商审查。

编译方案与技术

网址https://blog.csdn.net/dongyi1988/article/details/128629011

结构拆分方案与技术

网址https://blog.csdn.net/dongyi1988/article/details/128633808


  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Kael.dong

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值