车设共线 1.0 方案
【方案】
架构:
- 关键元素解释:
- Settings - DCD: DCD - Setting AOSP源码,带DCD特性。
- Git 库:platform/packages/apps/Car/Settings
- 分支名称:dcd-dev
- Settings - XCD: XCD - Setting AOSP源码,带XCD特性。
- Git 库:platform/packages/apps/Car/Settings
- 分支名称:xcd-dev
- MiCarSettings工程:XCD 车设和DCD 车设 共线(共享)的的代码,大都是业务类代码。
- Git 库:platform/packages/apps/Car/MiCarSettings
- 分支名称:dev
- MiCarSettingsCommon工程:XCD 车设和DCD 车设 共线(共享)的的代码,基建框架、base组件之类的代码。
- Git 库:platform/packages/apps/Car/MiCarSettingsCommon
- 分支名称:dev
- Settings - DCD: DCD - Setting AOSP源码,带DCD特性。
📷 图示:车设共线架构图(readonly diagram block)
-
注意事项:例子:
- 项目结构配置
- MiCarSettings、MiCarSettingsCommon需要与Setttings为同级目录。
- Windows系统在克隆项目时,需要以管理员身份打开git Bash,并且增加 git clone -c core.symlinks=true 参数。
git clone -c core.symlinks=true "ssh://zhangxin66@slave.auto.mioffice.cn:29418/platform/packages/apps/Car/Settings" && (cd "Settings" && mkdir -p `git rev-parse --git-dir`/hooks/ && curl -Lo `git rev-parse --git-dir`/hooks/commit-msg https://gerrit.auto.mioffice.cn/tools/hooks/commit-msg && chmod +x `git rev-parse --git-dir`/hooks/commit-msg) - 项目结构配置
实现:
-
车设AOSP代码保留:
- 原因:
- 保留并不影响共线方案。
- 车设AOSP代码持续对系统API(ROM)强依赖, 如果不保留,每次基线升级都需要花很多时间很人力去删除车设AOSP代码。
- 原因:
-
DCD和XCD 车控代码差异化解决:
- 差异是新增、删除、隐藏:
- 解决方式:
- 通过配置字、环境变量来显示或隐藏相关功能。
- 解决方式:
- 差异是修改(例如同一包名和类名相同,但代码差异大):
-
解决方式:
-
BP编译:
- 需要差异化的Module的bp文件可以声明2个android_library ,前缀分别为dcd-和xcd- 。
- 该Module 有公共部分代码和资源,也有dcd或者xcd 独有的代码和资源。
- Settings - DCD 依赖 dcd-[Module]-android_library_name,Settings - XCD 依赖 xcd-[Module]-android_library_name,详情可以参考micarConnectionSettings Module。


-
-
Gradle 编译 - flavor 方案(仅用来研发自测,目的提高开发效率,不可以用来发版)
- product flavor(官网链接:https://developer.android.com/build/build-variants#product-flavors)
- Settings - DCD(dcd-dev 分支) 支持gradle 编译直接运行, Build Variants 切成dcdDebug 可以直接运行。

- Settings - XCD(xcd-dev 分支) 支持gradle 编译直接运行,Build Variants 切成xcdDebug 可以直接运行。

- 请参考micarConnectionSettings Module的 build.gradle。
flavorDimensions "miPlatform" productFlavors { dcd { dimension "miPlatform" } xcd { dimension "miPlatform" } } sourceSets { dcdDebug { manifest.srcFile 'src/main/AndroidManifest.xml' java.srcDirs = ['src/main/java', 'src/dcddif/java'] res.srcDirs = ['src/main/res', 'src/dcddif/res'] aidl.srcDirs = ['src/main/java', 'src/dcddif/java'] } xcdDebug { manifest.srcFile 'src/main/AndroidManifest.xml' java.srcDirs = ['src/main/java', 'src/xcddif/java'] res.srcDirs = ['src/main/res', 'src/xcddif/res'] aidl.srcDirs = ['src/main/java', 'src/xcddif/java'] } }
-
- 差异是新增、删除、隐藏: