车设共线 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

📷 图示:车设共线架构图(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编译:

          1. 需要差异化的Module的bp文件可以声明2个android_library ,前缀分别为dcd-和xcd- 。
          2. 该Module 有公共部分代码和资源,也有dcd或者xcd 独有的代码和资源。
          3. Settings - DCD 依赖 dcd-[Module]-android_library_name,Settings - XCD 依赖 xcd-[Module]-android_library_name,详情可以参考micarConnectionSettings Module。

      • Gradle 编译 - flavor 方案(仅用来研发自测,目的提高开发效率,不可以用来发版)

        • 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']
            }
        }