work-record

2025年6月27日

  1. 黑屏bug,mesh加载逻辑优化--->end
  2. 安卓浅色模式后排吹面风不对--->居然好了
  3. 绿净切换完前后排之后会打开--->end
  4. 国内HT ktx优化--->我发现都一个德行,在最后一下会顿一下

周报:

  1. 开发MC车型并出包
  2. 修复MR车型bug
  3. 修复国内空调bug并出包

出aar的包

2025年6月26日

  1. MC出包
  2. 看代码学习
  3. 出现一个bug导出后 后排风 没加载到

13点48分

  1. 吹风模式

  2. 发现自动调节风向,输入不同时间,速度不一样

2025年6月25日

  1. 开发MC

13点37分

  1. CI---->不搞
  2. 风量调节问题 --->end

2025年6月24日

  1. 开发MC

黑屏时间长--->end

14点28分

  1. 修复风量调节的逻辑
  2. 增加UI滑块的材质切换

2025年6月23日 周一

  1. 解决bug,国内和MR--end
  2. 开发MC

14点48分

  1. 修改MR2bug

2025年6月20日

  1. 合入国内bug----end
  2. MR出包
  3. 把所有的项目都搬到G盘
  4. HT加载慢
  5. MR F:\imgui\imgui_air_condition\Export\0620MR\launcher\build\outputs\apk\debug 构思

13点47分

  1. HT加载慢---->初步定位资源加载慢

2025年6月19日

  1. 合入国内bug

  2. develop-ht茂南的修改

  3. 看看CI出包的

  4. 更新jira

  5. 海外HT方向调节问题

  6. MR更新引擎引入新问题--->end

2025年6月18日

  1. 解决MRbug--->end 就是风口材质用错了
  2. 国内空调还有一个问题,UI缩放--->end 用了新方案,上下黑色,只渲染1280x720
  3. QZ量产,从根上改---->end

14点51分

  1. CI出包
  2. 海外回退车体图更新,出包

2025年6月17日

  1. 看MR的bug,不是raycast,就是raycast
  2. 学习回调函数
  3. 修复国内切换中英文UI缩放

2025年6月16日 一

  1. MR出包--->完成,但是还有bug,raycast
  2. 学习回调函数
  3. 安装clang-format---->end
  4. QZ5.0量产--->end
  5. 海外HT更换启动图----要改的挺多---->中控副驾启动图都要换除了调了相机还调整了车体图---->待验证
  6. 将各个单分支的修改合入合包的主干,因为现在主干是合包---->等通知吧,尤其develop太乱了

2025年6月13日

  1. 出5.0qz主干包---更换jar包
  2. MR手动调整风向
  3. 海外HT右舵副驾漏了一个风口材质---->下周四
  4. HT三厢扶手屏分辨率问题
  5. qz5.1即develop-qz变成量产了

2025年6月12日

  1. MR的bug要不要立即修
  2. 改造RS架构
  3. 前后排切换更换ktx--->end

13点42分

  1. rs导出
    server
    resource
    sdk client
    影响启动方式不一样

  2. 学习回调函数

2025年6月11日

  1. MR出包---->有崩溃
  2. sendmessage写好了,出包的时候再换
  3. QZ5.0量产新需求
    吹窗的效果开关逻辑,仅跟随主驾控制。
    QZ 这个实车上 是不会发副驾吹窗ID 的。
    动效侧 识别到主驾侧的吹窗ID 通知时,同步关联副驾吹窗的动效,开关,冷热风

2025年6月10日

  1. RS架构在MR车型---->影响启动方式
  2. 前后排切换更换ktx,

13点50分

  1. sendmessage
  2. MR出包

2025年6月9日 周一

  1. 空调bug,包括美术的ht修改--->BYD2445,推至develop-ht
    前后排切换更换ktx,
    分辨率不对导致的UI缩放
  2. MR的测试按钮---end
  3. RS架构在MR车型---->影响启动方式
  4. QZ的不对,加接口啥的

QZ空实现接口,要换jar包--->end
降低SDK版本
UI位置不对

qz5.0 主干 量产 ----->5.0单包出了量产包验证

  1. 更换jar包空实现onStart(),onStop();2. 调整minSdkVersion 为25

qz5.1 一个分支出合包

对应的jar包已更换完,空实现了start和stop
等待确认sdk版本是否降级

修改分辨率:
adb root
adb shell wm size 1920x1080

修改位置:com/gritworld/gritmobile/client/GritEngine.java com/gritworld/gritmobile/activity/GritPlayerActivity.java文件

2025年6月6日

  1. 2462 切换中英文后空调UI会进行缩放---->看中英文切换干了什么,可能是改变了窗口大小
  2. 2461 频繁点击温度调节,即启动销毁,导致黑屏
  3. 2440 0x9B空调开启时偶现不展示车体图---->类似crash
  4. 什么卡顿,改造序列帧为ktx
  5. BYD-2445ht改完放在ht分支后面合入

16点29分

  1. 修改海外crash 内存分配不足bug---->修改消息队列增加最大长度限制;修改splitString函数中字符串类型为string_view
    file://docs.gritworld.cn/Company/DevelopmentSH/gm-cicd/byd_airconditioner/19465_develop-oversea/

qz变成量产了 没

杨宇的0514的那个不能用了,引擎中没那个方法了 why
周报:

  1. QZ单包与合包出包
  2. 解决海外sf的crash问题
  3. 国内HT_SZ出主干包
  4. 定位并解决byd反馈的0508量产包的多个bug

2025年6月5日

  1. 海外SFbug 不一定解决,有分析
  2. HT_SZ出包
  3. QZ出包

滑块问题未彻底解决,SZ的和HT三厢扶手屏有冲突,后续合入时再调整

14点14分

  1. 确认调节风口为什么没有立即下发角度
  2. 海外crash为什么会发那么多的消息

3D 架构需要采用 render service 架构,至少需要同时支持 4 个 3D 动效场景同时显示。 这个是啥,问建超

2025年6月4日

  1. 海外SFbug 不一定解决,有分析
  2. 国内HT_SZ出量产包

2407 sfcrash 优先在看--->改了一部分感觉不完美
2456 sfcrash
2086 HT三厢前后排卡顿----之前茂南解决了一次没和
2218 中英文切换 ---->老问题,一直没解决,
2232 中英文切换 ---->老问题,一直没解决,
2444 已有结论 ---- 双击打开出风口不顺畅
2443 D3更换车体图 ----美术配合
2441 SZA8空调设置为“避人吹”手动调节电动出风口时,“避人吹”开关需要置灰-----有结论
2440 0x9B空调开启时偶现不展示车体图---->类似crash
2050 SZA8风口方向上下滑块不能滑动到顶部和底部---->end 横竖滑块不一样长,不能仅用水平滑块长度
2462 切换中英文后空调UI会进行缩放---->看中英文切换干了什么,可能是改变了窗口大小 解压有密码

  1. QZ出包

2025年6月3日

  1. QZ单包---->有方案了
  2. 海外SFbug
  3. ht_sz出量产--->end

SZ分支 16 19 20 21 27 28
HT分支 21 30

ht和ht_sz 差 45c2da9547be768e92c8e83e0964ded673fb2d3e
sz和ht_sz 差 587b50073005566a59bddb2c37f5d69fe86f7635

2025年6月1日

  1. QT版本空调Bug
  2. QZ单包需求
  3. MR车型空调开发

海外主干即量产

2025年5月31日

Bug

  1. 2407 海外SF 128 crash闪退一次
  2. 2040 0x9B空调开启时偶现不展示车体图
  3. 2041 SZA8空调设置为“避人吹”手动调节电动出风口时,“避人吹”开关需要置灰
  4. 2047 D4风口联动开启,动效先关后开---->之前看log定位到是,风口正常打开但是同步了实车信号
  5. 2050 SZA8风口方向上下滑块不能滑动到顶部和底部

2025年5月30日

  1. imgui空调出包
  2. 海外出量产包----主干变为量产包了
  3. QZ出压测包

周报:

  1. QZ_SQ合包
  2. 海外空调包
  3. imgui空调出包

2025年5月29日

  1. 烦死了imgui

2025年5月28日

  1. 海外出包

19184

2025年5月27日

  1. 0408 HT25两厢-->已改,等后续副驾修改--->end---->SZ副驾驶滑块UI
  2. develop-oversea 海外sf右舵,19039---->已出---->海外sz不对在改--->拆分了副驾----->海外SQ相机位置修改,SZ滑块UI----->出包就行
  3. QZ-SQ合包 19106

Ht25 682d9e2dba7dbf21ddd1329e7e9f1b9eaf44a10e这个位置回退,不要美术的东西

本地QZ合包 F:\project\bydDomestic\Export\QZ\launcher\build\outputs\apk\debug\AirConditioner_fps30_v1.0.0-250527_1851_debug.apk 给测试

2025年5月26日 一

  1. QZ合包--->已出
  2. 0408 HT25两厢-->已改,等后续副驾修改--->end
  3. develop-oversea 海外sf右舵,19039---->已出---->海外sz不对在改--->拆分了副驾

我能做的已经ok,导出安卓工程,可能Java层还要写

将风口材质手动加入

把develop-sz的修改没合入,居然也没被发现!!!

2025年5月25日

3D旋转的本质:如果直接旋转 mWindComp,旋转中心可能不是你想要的点,容易出现模型“绕错轴”或“漂移”。
通过包一层空节点,把旋转中心“搬”到你想要的位置,所有旋转都在 mRotateComp 上做,mWindComp 只负责显示。
这样拖拽时,只需修改 mRotateComp 的旋转属性(如欧拉角、四元数),风口模型就能正确地围绕自身中心点旋转,实现风向的3D调整。

2025年5月23日

  1. 周报

  2. 完成QZ车型并出包

  3. 定位1453空调bug

  4. 更新HT三厢车体图以及解决后排屏出风口点不动的bug,SZ风效等问题,出包ht_sz合包

  5. 满足BYD提出的新需求,点击空白区域发送一个信号给上层,来控制UI

  6. 完成空调的接口的文档,测试端需要

  7. 完成海外SF右舵开发,并出包

  8. imgui引擎上开发MR车型

  9. 国内HT两厢系列的初始出风叠加了,可能是X轴数据弄反了,三厢是好的@杨凯(杨凯)---问题

S:\DevelopmentSH\gm-cicd\DailyBuild\develop\60091\GWEDITOR\release 引擎位置
S:\DevelopmentSH\gm-cicd\DailyBuild\develop\59682\GWEDITOR\release 可以的

其他的赶5月底(MR2、Qz合包、海外SF右舵、Ht两厢)

QZ合包可以直接出,除雾风材质不受影响

2025年5月22日

  1. 将sz和ht分支的合入develop 有冲突---end

更新完启动图待出包
qz/sq合包 file://docs.gritworld.cn/Company/DevelopmentSH/gm-cicd/byd_airconditioner/18948_develop-qz/
qz单包 file://docs.gritworld.cn/Company/DevelopmentSH/gm-cicd/byd_airconditioner/18949_develop-qz/

分辨率 render view

0408包 18937 file://docs.gritworld.cn/Company/DevelopmentSH/gm-cicd/byd_airconditioner/18937_develop_ht_sz_0408/

你这边在空调模块的工作清单有这些:我按优先级顺序写的
1、MR2(接口与引擎侧对接)--节点528
2、Qz配合出包(目前应该就是debug阶段了)--节点528
3、BYD提出的屏幕点击逻辑----这个是不是又要出包给他们HT&SZ?
4、接口文档-----这个是内部测试要用的
5、海外SF右舵--节点603

2025年5月21日

将0408启动图更新到develop
然后将sz和ht分支的合入develop 有冲突

  1. 先将0408分支的问题解决----完成HT三厢车体图更新出包,解决后排屏点不动的bug

2025年5月20日

  1. 写一下API文档
  2. 继续mr车型开发
  3. 后排屏bug--->end
    d673df01afc9687f0cc102994d983e01a2da8873 这个删多了

明天

将0408启动图更新到develop
然后将sz和ht分支的合入develop 有冲突

2025年5月19日

  1. qz出包--->end
  2. 1453空调bug
  3. imgui--->16点02分 我看这个 先看双击出风口以及拖拽调节风向的逻辑 正好这里还没有实现

13点30分

  1. 新增一个接口 传信号
  2. 修改sz--->改完了,存在develop中了,有好多不需要pick 由于develop启动图落后同步

2025年5月16日

  1. HT_SZ出包--->end
  2. 1453空调bug
  3. qz车型

周报

  1. 分析1439空调bug_sz卡滞问题,已经将分析意见反馈给BYD待其复测
  2. 开发QZH新车型
  3. 更新HT三厢车体图并出包
  4. 开发MR车型

20250519今日【主干包】更新:

【QZH】新增QZH车型

file://docs.gritworld.cn/Company/DevelopmentSH/gm-cicd/byd_airconditioner/18758_develop-qz/

2025年5月15日

  1. 还是新空调

14点19分

  1. 理一下引擎包
    3. 杨宇修复回弹---wqx 主干 没要
    2. 移除openssl---Release_BYD_2022 主干
    1. 书山修复黑屏---wqx 不要上量产,其实上了
      出主干要手动更新引擎路径 \docs.sh.gritworld.local\Company\DevelopmentSH\gm-cicd\Builds\Release\BYD\2022\60106\WIN\RELEASE

2025年5月14日

  1. 国内HT三厢更新
  2. 空调修复引擎bug出包,问一下要不要换CI的引擎--->先不出

15点13分

  1. HT三厢车体图更新完毕

20250514今日【主干包】更新:

【SZ】修复海外SZ副驾驶屏幕左右黑边问题:

【HT】HT三厢更新车体图 10系 中控屏 副驾屏 扶手屏
30系 中控屏 副驾屏 左右头枕屏 扶手屏
优化部分出风口贴图大小

file://docs.gritworld.cn/Company/DevelopmentSH/gm-cicd/byd_airconditioner/18626_develop_ht_sz_0408/

//call before grit player construct
    private void setGritplayerExternalpath()
    {
        File internalDir = getFilesDir();
        Log.i("GritPlayer", "internal writeable path: " + internalDir.getAbsolutePath());
        File externalDir = getExternalFilesDir(null);
        Log.i("GritPlayer", "external writeable path: " + externalDir.getAbsolutePath());
        GritPlayer.setExternalReadPath(internalDir.getAbsolutePath());
    }

2025年5月13日

  1. sz卡滞问题--->复测
  2. 新空调烦
  3. 将项目push到我的gitlab--->失败放弃

16点11分

  1. QZH新车型

2025年5月12日

  1. 新空调烦

13点35分

  1. sz卡滞问题
  2. 将图片加载和引擎启动放在一个容器,让图片在主线程不依赖引擎直接加载--->后面

2025年5月10日 周六

  1. 修改启动图逻辑,使其在引擎之前,加快时间
    ---->按要求搞定但是效果不明显,只快了十几毫秒

2025年5月9日

  1. 研究一下upslider那里的作用
  2. 把引擎和项目打包发到网盘,周末研究
  3. 周报

关于滑块的修改出问题了再改 UserModule\source\private\OutletBeh.cpp:510

bool IsRcs = atoi(BydSingleton::Instance()->GetDeviceData(DEVICE_TYPE).c_str()) == AC_DEVICE_RCS_ID;
if ((mOutletId == MIDDLE_LS_FACE_MASK || mOutletId == MIDDLE_RS_FACE_MASK || mOutletId == MIDDLE_METER_LS_FACE_MASK || mOutletId == MIDDLE_METER_RS_FACE_MASK) && IsRcs)
{
    total -= 1.5;
}
  1. 增加xml文件和activity文件,方便出压测包
  2. 修改启动图逻辑,使其在引擎之前--->未完成

show time!! use time 显示时间

周报:

  1. 完成在国内HT扶手屏放大后加遮罩,调整滑块UI长度后,出量产包
  2. 增加xml文件和activity文件,方便出压测包--->待验证
  3. 修改启动图逻辑,使其在引擎之前--->未完成

2025年5月8日

  1. 还是按层次写,始终都要用到

14点16分

  1. 搞完ht扶手屏加遮罩以及调整滑块--出量产包ht_250508
  2. 1430卡的bug
  3. 等出问题了改一下spalsh那里的逻辑,有点乱
  4. 国内新增qz车型,类似sq,一个中控前后排

2025年5月7日 周三

  1. 在新引擎上实现空调--->先在一层上实现功能

  2. 加阴影遮罩
    看看遮罩Mask---->18点51分,大概找见遮罩的位置了
    UserModule\source\private\CarInteriorBeh.cpp#694 这里不可以渐变,
    --->这里不对,要跟随相机位置变化,绑在时间轴上,UserModule\source\private\CarInteriorBeh.cpp:1022

  3. git reflog show --date=local --all | grep cora/20250507_HTRCS 查看分支源头

2025年4月29日

  1. 用新引擎出一个apk给修竹测
  2. imgui引擎的空调,只有一个场景,加一些粒子开关,风口开关的功能

13点42分

  1. 修复右舵出风口角度---->end
    都怪用了cherry-pick 全搞乱了,byd乱测
    修复右舵出风口角度;
    修改右舵滑块位置;
    补充当未指定车型时选取中控和附加启动图的逻辑(健壮性);
    删除非11D和14B车型时,mLeftRudder必为true的逻辑,由于未考虑非法车型ID;
  2. 弄云桌面

2025年4月28日

  1. 海外HT修复序列帧车体图,以及副驾驶按钮问题出包--->还是车体图有问题
  2. 先弄云桌面,再看新空调,差距还多的啊

13点28分

  1. 新引擎的空调--->先不管场景加载了,先看--->张嘴问,不用切其他场景只需要实现一个场景的一些功能即可
  2. 将引擎的修改合入到htsz sq的拆包上--->end 要用修复后的引擎,不过要等加完日志

2025年4月27日

  1. 看看黑屏问题,新修改的 --->end
    file://docs.gritworld.cn/Company/DevelopmentSH/gm-cicd/byd_airconditioner/18107_develop/ 黑屏复现的
    file://docs.gritworld.cn/Company/DevelopmentSH/gm-cicd/byd_airconditioner/18110_develop/ 修复后的包
  2. 新引擎开发空调

14点50分

  1. 在单独分支上开发,不要cherry-pick到主干分支,而是merge过去!!!!!!!!---->只有量产的时候再cherry-pick 剩下的用merge,记住
  2. 海外HT右舵,剩下的都是美术的问题
  3. 修改国内sz副驾驶黑边,到拆包sz_ht_0408 以及develop_sz
  4. registAcCallback changeModeSkin onMultiWindowModeChanged updateConfigurationChanged//都是干嘛的 好像用到了,是用来发送消息的

单例模式和工厂模式

设计模式(Design Pattern)是前辈们对代码开发经验的总结,是解决特定问题的一系列套路,他不是语法规定,而是一套用来提高代码可复用性、可维护性、可读性、稳定性以及安全性的解决方案。

后面国内空调的修改都在拆包后的版本中修改

2025年4月26日

  1. 本地出aar流程,aar,apk脚本作用
    • 看一下显卡是什么版本,怎么被使用的
  2. CI出包流程
    • 有三个ac_classes.jar文件需要替换 apk_testaar_base\ac_classes.jar apk_base\ac_classes.jar aar_base\ac_classes.jar

明早记得发:
250425今日 【主干包】更新:

HT右舵需求制作
SQ的吹风形态优化
HT初始出风角度调整
HT吹风口动销优化
收到极限角度有效角度范围外,风口角度动效保持不变

file://docs.gritworld.cn/Company/DevelopmentSH/gm-cicd/byd_airconditioner/18091_develop-oversea/

  1. 新引擎的空调

4. aar学习

AAR(Android Archive)包是 Android 开发中用于封装和分发可重用组件的一种文件格式。它类似于 Java 中的 JAR 包,但专为 Android 设计,支持包含代码、资源、清单文件及其他 Android 特有的配置。

这个批处理文件 prepare_AC_AAR.bat 主要用于自动化配置和构建 Android 库(AAR),以下是其详细分析:


作用概述

  1. 配置 Android 工程路径:通过用户输入或默认路径设置工程目录,确保路径有效性。
  2. 修改 SDK 和 CMake 路径:将引擎路径转换为适合 local.properties 的格式,写入配置文件。
  3. 清理与替换文件
    • 删除旧代码、资源文件和冗余目录。
    • 拷贝新的 Java 代码、依赖库(JAR)、构建脚本(Gradle)和清单文件(AndroidManifest.xml)。
  4. 执行 Gradle 构建:最终调用 assembleRelease 生成 AAR 包。

详细步骤解析

1. 设置基础路径

set basePath=..\aar_base
  • 定义 basePath 变量,指向存放模板文件的目录 ..\aar_base(如 Java 代码、Gradle 脚本等)。

2. 获取 Android 工程路径

set /p AndroidPath=<./AndroidPath
  • 从当前目录的 AndroidPath 文件中读取预设的工程路径。
  • 验证路径有效性
    if NOT exist %AndroidPath%/local.properties (
        set /p AndroidPath=请输入引擎路径 [默认 %AndroidPath%]: || set AndroidPath=%AndroidPath%
    )
    
    • 如果 local.properties 不存在,提示用户输入路径(默认使用历史值)。
    • 最终将路径保存到 AndroidPath 文件中,以便复用。

3. 配置 SDK 和 CMake 路径

set /p EnginePath=<./EnginePath
set converted_path=%EnginePath:\=\\%       ! 转义反斜杠为双反斜杠
set converted_path=%converted_path::=\:%   ! 替换冒号为转义格式(适配属性文件)
echo sdk.dir=%converted_path%\\editor_data\\export\\GWSource\\android\\Tools\\Sdk >%basePath%\local.properties
echo cmake.dir=%converted_path%\\tools\\cmake >>%basePath%\local.properties
  • EnginePath 文件读取引擎路径,处理后写入 local.properties
  • 路径转换逻辑
    • \\\:避免 Windows 路径中的转义问题。
    • :\::可能用于适配 Unix 风格路径(如 CMake 配置)。

4. 文件清理与替换

4.1 删除旧代码和资源
rd /s/q %AndroidPath%\launcher\src\main\java      ! 递归删除 Java 目录
rd /s/q %AndroidPath%\launcher\libs              ! 删除依赖库
del /s/q %AndroidPath%\gritLibrary\src\main\java\com\gritworld\gritmobile\activity\*.*  ! 删除 Activity 代码
  • /s/q 表示静默递归删除,无确认提示。
4.2 拷贝新文件
xcopy %basePath%\java %AndroidPath%\gritLibrary\src\main\java /Y /S /I  ! 拷贝 Java 代码
xcopy %basePath%\ac_classes.jar %AndroidPath%\gritLibrary\libs /Y       ! 拷贝 JAR 依赖
xcopy %basePath%\AndroidManifest.xml %AndroidPath%\gritLibrary\src\main /Y  ! 替换清单文件
  • /Y 覆盖现有文件,/S 包含子目录,/I 假定目标为目录。
4.3 替换构建脚本
xcopy %basePath%\build.gradle %AndroidPath%\gritLibrary /Y      ! 库模块构建脚本
xcopy %basePath%\launcher-build.gradle %AndroidPath%\launcher\build.gradle /Y  ! 启动模块脚本
xcopy %basePath%\project_build.gradle %AndroidPath%\build.gradle /Y           ! 项目级脚本
4.4 清理资源文件
del /s/q %AndroidPath%\gritLibrary\src\main\res\values\*.*       ! 删除 values 资源
del /s/q %AndroidPath%\gritLibrary\src\main\assets\Data\GFXResource\textures\*.*  ! 删除纹理
rmdir /s/q %AndroidPath%\gritLibrary\src\main\assets\Data\plugins  ! 删除插件目录
  • 删除无用资源以减小 AAR 包体积。

5. 执行 Gradle 构建

cd %AndroidPath%
.\gradlew assembleRelease --stacktrace
pause
if NOT ["%errorlevel%"]==["0"] pause
  • 切换到工程目录,执行 assembleRelease 生成 Release 版 AAR。
  • --stacktrace 用于输出详细错误信息。
  • 错误处理缺陷
    • if NOT ["%errorlevel%"]==["0"] pause 语法不标准,应改为 if %errorlevel% neq 0 pause

潜在风险与改进建议

  1. 路径空格问题:未用引号包裹路径,可能导致含空格的路径解析失败。
  2. 错误处理不足:Gradle 构建失败后仅简单暂停,可增加回滚或日志记录。
  3. 资源删除风险:递归删除命令(如 rd /s/q)可能误删重要文件,建议添加路径校验。
  4. 路径转义逻辑:替换 :\: 的用途需确认,可能在某些场景导致路径错误。

总结

该脚本通过自动化配置、文件替换和资源清理,简化了 AAR 的构建流程,适用于需要频繁打包的场景。其核心逻辑清晰,但需注意路径处理和删除操作的安全性,建议在关键步骤添加日志和错误恢复机制。

5. CI学习

CI/CD 自动化执行流程解读
从日志中可以看出,整个 CI/CD 流程分为以下几个阶段:

  1. 环境准备
    执行器类型: 使用 shell 执行器(具体为 PowerShell)。

操作系统: Windows(运行在 GWSHAQAEDA004 节点)。

编码设置: 设置 UTF-8 编码(chcp 65001),避免中文字符乱码。

  1. 代码获取
    检出代码: 从 Git 仓库拉取 develop-oversea 分支的最新提交 5bcfa3f5。

清理文件: 删除临时目录(如 Export/、Log/)和锁定文件(index.lock),确保构建环境干净。

  1. 执行构建脚本 (tools/deploy.py)
    脚本 deploy.py 的步骤如下:

a. 获取最新编辑器
从网络路径 \docs.gritworld.cn\Company\DevelopmentSH\gm-cicd\BYD_Editor\Airconditioner\release2022new.zip 下载或更新编辑器。

设置编辑器路径到环境变量 GW_EDITOR_PATH。

b. 导出项目
启动编辑器(GEditor.exe),通过自动化操作打开项目并执行导出:

修改项目配置(如设置 scriptbackend 为 cpp)。

打开部署窗口并设置参数(如最大化窗口)。

等待项目导出到 Export 目录。

c. 后处理
修改 Android 路径和引擎路径。

删除无用文件(如 medias 目录)。

修改版本号(将版本名设置为 V0425 和 0425Main)。

d. 构建 AAR 和 APK
使用 Gradle 构建 AAR(成功)。

构建 APK 失败:在 :launcher:compileReleaseJavaWithJavac 任务中因 RIGHT_DRIVER_SEAT 符号缺失导致编译失败。

  1. 错误处理与清理
    日志提示 BUILD FAILED in 13s,随后执行 after_script 清理临时文件。

最终作业状态为失败(exit status 1)。

  • git fetch --all 拉取远程仓库,更新--->常应对fatal: bad object问题

2025年4月25日

  1. 周报
  2. 差启动图和初始角度--->end

周报:

  1. 完成新增海外HT的右舵,出包进行测试
  2. 配合解决SZ空调黑屏问题
  3. 修改海外SZ/HT的出风口初始角度
  4. 修改调整风口角度逻辑

调整海外HT副驾驶左右按钮逻辑

16点26分

  1. CI出包,识别不到jar包
    调整SZ的初始风口角度

2025年4月24日

  1. 继续完成右舵
  2. 改初始角度
  3. 改调节角度逻辑--->end

13点28分

  1. 改初始角度--->有难度--->解决 SetAutoAngleX()这个就是设置角度的所谓接受角度,调角度,不要被这个auto迷惑
  2. 如何对按钮进行控制的--point

2025年4月23日

  1. 昨天肝到了一点多,还没提加班
  2. 台式远程控制笔记本,建立局域网共享文件夹
  3. 为啥我本地出包不行--->没有修改release2022\DeviceAssets\里面的几个info文件

13点57分

  1. 一定问一下在哪个分支上出包,出什么包
  2. 前后排切换卡顿
  3. HT出风口初始角度--->美术
  4. 基本成型,调节风口角度的时候出来的一个ui是在哪设置---->SetHTSliderScale();

2025年4月22日

  1. SQ HT_SZ拆包包体大小有问题,重新删除后出包,测试对--->end
  2. 右舵开发基本完成
  3. 今天需要输出一个国内空调量产包,当前量产包目前还是出合包(HT&SZ&SQ)。量产包的内容合入【HT25款的需求】和【HT三厢车体图偏大的bug修复】
  4. 国内SQ拆包 file://docs.gritworld.cn/Company/DevelopmentSH/gm-cicd/byd_airconditioner/17866_develop_sq_0408/--->废弃
    HT_SZ拆包 file://docs.gritworld.cn/Company/DevelopmentSH/gm-cicd/byd_airconditioner/17869_develop_ht_sz_0408/--->废弃
    看aar,也是一种压缩格式

13点33分

  1. 国内空调量产包--->end 完成
  2. 评估新车型MCHF/MCHG  七至八天
  3. 对于这个项目的疑问点,风效,风的大小 触摸拖拽
    当⽤⼾触控⻛效时,进⼊调节⽅式,并且触控的⻛效暂时不响应上报的⻆度(以防⽌⻛效偏离⼿势),当操作结束后,触控的⻛效⻆度调节到最新⻆度,最终保持⻛效移动到最新⻆度---->拖动的时候不发送坐标,到最后再发送,之看不动
  4. 空调CI出包只需要替换引擎路径,因为都在一个云服务器上
  5. 如何杀死安卓进程,只需要修改activity中的onpause函数

2025年4月21日 周一

  1. 解决昨天的右舵--->jar包应该只是用在Android工程中,而我先保证windows模拟成功
    SUPPORT_RSE_SCREEN这个有作用
  2. 可能得问他们要一下新的jar包,包含控制左舵右舵的变量---->貌似白干?如何控制左右舵

13点31分

  1. 确认一下出风口是如何初始化的
  2. 不要老是自己想 问清楚
  3. libs中的jar包在库中的哪存着?--->在apk_base这里面
  4. 拆包注意拆之前拆之后的大小

2025年4月20日

  1. 给海外也增加副驾未指定车型的问题--->不要轻易在主干上修改
  2. 检查2205需求,对出风口角度---->一毛一样
  3. 研究右舵,第一版,貌似不是很easy
 private void initDeviceDataButtonList() {
        Log.d("TimeLine", "------------------initDeviceDataButtonList----");
        LinearLayout buttonContainer = new LinearLayout(this);
        buttonContainer.setOrientation(LinearLayout.VERTICAL);
        buttonContainer.setBackgroundColor(Color.WHITE);
        buttonContainer.setElevation(20);

        //车型ID
        List<IdData> CarModeIdDataList = new ArrayList<>();
        //CarModeIdDataList.add(new IdData("SQ 0x9B", 0x9B));
        //CarModeIdDataList.add(new IdData("SQ 0x117", 0x117));
        CarModeIdDataList.add(new IdData("海外SQ 0x0126", 0x0126));
        CarModeIdDataList.add(new IdData("海外SF 0x011C", 0x011C));
        CarModeIdDataList.add(new IdData("海外SF 0x0128", 0x0128));
        //CarModeIdDataList.add(new IdData("HT 0XAA(两厢)", 0XAA));
        //CarModeIdDataList.add(new IdData("HT 0XAB(两厢)", 0XAB));
        //CarModeIdDataList.add(new IdData("HT 0XD3(三厢)", 0XD3));
        //CarModeIdDataList.add(new IdData("HT 0XD4(三厢)", 0XD4));
        CarModeIdDataList.add(new IdData("海外HT 0x11D(两厢)", 0x11D));
        CarModeIdDataList.add(new IdData("海外HT 0x14B(两厢)", 0x14B));
        CarModeIdDataList.add(new IdData("SZ 0xA8", 0xA8));
        CarModeIdDataList.add(new IdData("SZ 0xA9", 0xA9));

        Spinner carModeIdButton = new Spinner(this);
        LinearLayout.LayoutParams spinnerParams = new LinearLayout.LayoutParams(
                0,  // 宽度为0
                LinearLayout.LayoutParams.WRAP_CONTENT,  // 高度自适应
                1.0f  // 权重为1
        );
        carModeIdButton.setLayoutParams(spinnerParams);
        carModeIdButton.setPadding(12, 12, 12, 12);
        carModeIdButton.setBackgroundResource(android.R.drawable.btn_default);

        ArrayAdapter<IdData> adapter = new ArrayAdapter<IdData>(
                this,
                android.R.layout.simple_spinner_item,
                CarModeIdDataList
        ) {
            @Override
            public View getView(int position, View convertView, ViewGroup parent) {
                TextView view = (TextView) super.getView(position, convertView, parent);
                view.setText(getItem(position).name);
                view.setGravity(Gravity.CENTER);
                return view;
            }

            @Override
            public View getDropDownView(int position, View convertView, ViewGroup parent) {
                TextView view = (TextView) super.getDropDownView(position, convertView, parent);
                view.setText(getItem(position).name);
                view.setGravity(Gravity.CENTER);
                return view;
            }
        };
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        carModeIdButton.setAdapter(adapter);
        carModeIdButton.setSelection(cIndex);
        mCarModeId = CarModeIdDataList.get(cIndex).Id;
        carModeIdButton.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                IdData selected = (IdData) parent.getItemAtPosition(position);
                mCarModeId = selected.Id;
                cIndex = position;
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {}
        });

        // 屏幕ID
        List<IdData> DeviceTypeDataList = new ArrayList<>();
        DeviceTypeDataList.add(new IdData("前排屏", DeviceType.AC_DEVICE_IVI_ID));
        DeviceTypeDataList.add(new IdData("副驾屏", DeviceType.AC_DEVICE_FSE_ID));
        DeviceTypeDataList.add(new IdData("后排屏", DeviceType.AC_DEVICE_RSE_ID));
        DeviceTypeDataList.add(new IdData("后排左侧屏", DeviceType.RSE_LEFT_AREA_ID));
        DeviceTypeDataList.add(new IdData("后排右侧屏", DeviceType.RSE_RIGHT_AREA_ID));
        DeviceTypeDataList.add(new IdData("扶手屏", DeviceType.AC_DEVICE_RCS_ID));

        Spinner DeviceTypeButton = new Spinner(this);
        DeviceTypeButton.setLayoutParams(spinnerParams);
        DeviceTypeButton.setPadding(12, 12, 12, 12);
        DeviceTypeButton.setBackgroundResource(android.R.drawable.btn_default);

        ArrayAdapter<IdData> adapter2 = new ArrayAdapter<IdData>(
                this,
                android.R.layout.simple_spinner_item,
                DeviceTypeDataList
        ) {
            @Override
            public View getView(int position, View convertView, ViewGroup parent) {
                TextView view = (TextView) super.getView(position, convertView, parent);
                view.setText(getItem(position).name);
                view.setGravity(Gravity.CENTER);
                return view;
            }

            @Override
            public View getDropDownView(int position, View convertView, ViewGroup parent) {
                TextView view = (TextView) super.getDropDownView(position, convertView, parent);
                view.setText(getItem(position).name);
                view.setGravity(Gravity.CENTER);
                return view;
            }
        };
        adapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        DeviceTypeButton.setAdapter(adapter2);
        DeviceTypeButton.setSelection(cIndex);
        mDeviceType = DeviceTypeDataList.get(cIndex).Id;
        DeviceTypeButton.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                IdData selected = (IdData) parent.getItemAtPosition(position);
                mDeviceType = selected.Id;
                cIndex = position;
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {}
        });

        // 第一行:两个下拉框
        LinearLayout firstRow = new LinearLayout(this);
        firstRow.setOrientation(LinearLayout.HORIZONTAL);
        firstRow.addView(carModeIdButton);
        firstRow.addView(DeviceTypeButton);
        buttonContainer.addView(firstRow);

        // 第二行:左舵和支持触摸按钮
        Button rudderButton = new Button(this);
        rudderButton.setText("左舵");
        rudderButton.setLayoutParams(spinnerParams);
        mLeftRudder = true;
        rudderButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Button button = (Button) v;
                mLeftRudder = !mLeftRudder;
                if (mLeftRudder) {
                    button.setText("左舵");
                } else {
                    button.setText("右舵");
                }
            }
        });

        Button touchButton = new Button(this);
        touchButton.setText("支持触摸");
        touchButton.setLayoutParams(spinnerParams);
        mSupportDoubleOpenSwitch = true;
        touchButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Button button = (Button) v;
                mSupportDoubleOpenSwitch = !mSupportDoubleOpenSwitch;
                if (mSupportDoubleOpenSwitch) {
                    button.setText("支持触摸");
                } else {
                    button.setText("不支持触摸");
                }
            }
        });

        LinearLayout secondRow = new LinearLayout(this);
        secondRow.setOrientation(LinearLayout.HORIZONTAL);
        secondRow.addView(rudderButton);
        secondRow.addView(touchButton);
        buttonContainer.addView(secondRow);

        // 第三行:两排和座椅风格按钮
        Button rowButton = new Button(this);
        rowButton.setText("两排");
        rowButton.setLayoutParams(spinnerParams);
        mIsThreeRow = false;
        rowButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Button button = (Button) v;
                mIsThreeRow = !mIsThreeRow;
                if (mIsThreeRow) {
                    button.setText("三排");
                } else {
                    button.setText("两排");
                }
            }
        });

        List<IdData> SeatStyleDataList = new ArrayList<>();
        SeatStyleDataList.add(new IdData("七座", 0));
        SeatStyleDataList.add(new IdData("六座", 2));

        Button SeatStyleButton = new Button(this);
        SeatStyleButton.setLayoutParams(spinnerParams);
        IdData sData = SeatStyleDataList.get(sIndex);
        SeatStyleButton.setText(sData.name);
        mSeatStyle = sData.Id;
        SeatStyleButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                sIndex++;
                sIndex = sIndex % SeatStyleDataList.size();
                IdData data = SeatStyleDataList.get(sIndex);
                Button button = (Button) v;
                button.setText(data.name);
                mSeatStyle = data.Id;
            }
        });

        LinearLayout thirdRow = new LinearLayout(this);
        thirdRow.setOrientation(LinearLayout.HORIZONTAL);
        thirdRow.addView(rowButton);
        thirdRow.addView(SeatStyleButton);
        buttonContainer.addView(thirdRow);

        // 第四行:RSE支持按钮
        Button supportRseButton = new Button(this);
        supportRseButton.setText("不支持RSE");
        supportRseButton.setLayoutParams(spinnerParams);
        mSupportRseScreen = false;
        supportRseButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Button button = (Button) v;
                mSupportRseScreen = !mSupportRseScreen;
                if (mSupportRseScreen) {
                    button.setText("支持RSE");
                } else {
                    button.setText("不支持RSE");
                }
            }
        });

        Button startButton = new Button(this);
        startButton.setText("启动");
        startButton.setLayoutParams(new LinearLayout.LayoutParams(
                LinearLayout.LayoutParams.MATCH_PARENT,
                LinearLayout.LayoutParams.WRAP_CONTENT
        ));
        startButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                new Handler(Looper.getMainLooper()).post(new Runnable() {
                    @Override
                    public void run() {
                        try {
                            ViewGroup rootView = findViewById(android.R.id.content);
                            if (mDeviceDataButtonLinearLayout != null) {
                                rootView.removeView(mDeviceDataButtonLinearLayout);
                            }
                            initEngine();
                        } catch (Exception e) {
                            throw e;
                        }
                    }
                });
            }
        });

        LinearLayout fourthRow = new LinearLayout(this);
        fourthRow.setOrientation(LinearLayout.HORIZONTAL);
        fourthRow.addView(supportRseButton);
        buttonContainer.addView(fourthRow);

        // 添加启动按钮
        buttonContainer.addView(startButton);

        ViewGroup rootView = findViewById(android.R.id.content);
        mDeviceDataButtonLinearLayout = buttonContainer;
        rootView.addView(buttonContainer);
    }

14点00分

2025年4月18日

  1. 截图还是用png格式,因为保留更多细节,而且也不是很大,不过1MB
  2. 周报
  3. 和罗导确认一下那个bug,详细描述一下是什么问题
  4. 修改login界面的选车与屏幕的样式--->end
  5. 统计车型,屏幕,分辨率
  6. git restore . //撤销工作区未add 的文件 git clean -dfx //删除未跟踪文件

13点26分

  1. 统计车型,屏幕,分辨率--->发现启动图这里好乱--->整理完毕
  2. 国内空调拆包ht_sz车型 file://docs.gritworld.cn/Company/DevelopmentSH/gm-cicd/byd_airconditioner/17793_develop_ht_sz_0408/

周报:
海外出包:

  1. 海外新增SF车型,修复海外SQ问题,出量产包
  2. 删除SF后排资源,分别出主干和量产包
  3. 新增海外SZ车型,修复海外SZ副驾驶屏幕左右黑边问题出主干包
    国内出包:
  4. 国内【HT】副驾屏UI位置调整 HT三厢扶手屏幕相机调整 HT25中排出风口调整 替换HT三厢扶手屏贴图 30系扶手屏车体图替换 SQ出风口优化 两厢更新副驾 出主干包,
  5. 出风口调整,出量产包
  6. 完成国内空调SQ和HT-SZ的拆包
  7. 新增HT25两厢0x188和0x18c 修复当车型ID未指定,而屏幕类型为副驾屏时的bug HT三厢扶手屏空调背景车体图偏大 出量产包

修改login界面的选车与屏幕的样式
统计车型,屏幕,分辨率,整理成表格

2025年4月17日

  1. 有个bug--->更启动图有关,解决bug一定要先本地复现--->修复

13点27分

  1. 确认了包体减小的原因--->end
  2. @杨凯(杨凯)今天微信群里提到国内空调主干版本的HT车型0X118 副驾屏启动,应用首次车型图显示不正确问题解决后。将如下修改点/需求合入量产出一个包,今天要发给BYD@卢修竹(Bambo)@武利(武利)
    1、新增HT25款车型的需求(中控+副驾),今天提的问题记得解决
    2、HT三厢扶手屏空调背景车体图偏大(上次只修改了主干版本,没有合入到量产)--->end
  3. 右舵
  4. 新车型UR
  5. 本地出apk--->不用了
import android.widget.Spinner;
import android.widget.ArrayAdapter;
import android.widget.TextView;
import android.widget.AdapterView;

// 创建 Spinner
Spinner carModeSpinner = new Spinner(this);

// 设置布局参数
LinearLayout.LayoutParams spinnerParams = new LinearLayout.LayoutParams(
        LinearLayout.LayoutParams.MATCH_PARENT,  // 宽度匹配父容器
        LinearLayout.LayoutParams.WRAP_CONTENT   // 高度自适应
);
int marginVertical = (int) TypedValue.applyDimension(
        TypedValue.COMPLEX_UNIT_DIP,
        8,  // 上下边距 12dp
        getResources().getDisplayMetrics()
);
int marginHorizontal = (int) TypedValue.applyDimension(
        TypedValue.COMPLEX_UNIT_DIP,
        300,  // 左右边距 300dp(根据需求调整)
        getResources().getDisplayMetrics()
);
spinnerParams.setMargins(marginHorizontal, marginVertical, marginHorizontal, marginVertical);
carModeSpinner.setLayoutParams(spinnerParams);

// 设置内边距和背景
int padding = (int) TypedValue.applyDimension(
        TypedValue.COMPLEX_UNIT_DIP,
        12,  // 内边距 12dp
        getResources().getDisplayMetrics()
);
carModeSpinner.setPadding(padding, padding, padding, padding);
carModeSpinner.setBackgroundResource(android.R.drawable.btn_default);

// 关键:自定义适配器,强制文本居中
ArrayAdapter<IdData> adapter = new ArrayAdapter<IdData>(
        this,
        android.R.layout.simple_spinner_item,
        CarModeIdDataList
) {
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        TextView view = (TextView) super.getView(position, convertView, parent);
        view.setText(getItem(position).name);
        view.setGravity(Gravity.CENTER); // 强制文本居中
        return view;
    }

    @Override
    public View getDropDownView(int position, View convertView, ViewGroup parent) {
        TextView view = (TextView) super.getDropDownView(position, convertView, parent);
        view.setText(getItem(position).name);
        view.setGravity(Gravity.CENTER); // 下拉列表文本居中
        return view;
    }
};
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
carModeSpinner.setAdapter(adapter);

// 设置选中项和监听器
carModeSpinner.setSelection(cIndex);
mCarModeId = CarModeIdDataList.get(cIndex).Id;
carModeSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
    @Override
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
        IdData selected = (IdData) parent.getItemAtPosition(position);
        mCarModeId = selected.Id;
        cIndex = position;
    }

    @Override
    public void onNothingSelected(AdapterView<?> parent) {}
});

// 添加到容器
buttonContainer.addView(carModeSpinner);

2025年4月16日

  1. SZ车型
  2. 更新SQ的资源,重新打包
    国内SQ拆包 file://docs.gritworld.cn/Company/DevelopmentSH/gm-cicd/byd_airconditioner/17605_develop_sq_0408/

13点27分

  1. SZ车型的吹风模式有点难度---->我太牛了,大进展,14点06分,貌似搞定
    UserModule/source/private/CarInteriorBeh.cpp: 443 初始--->牛毛线,啥也不用改,白做
  2. SZ重做,不能随意cherrypick,容易混乱
  3. 试试序列帧加速

2025年4月15日

  1. 更新HT两厢副驾图,然后出包,紧急--->好像又要出量产包--->end
  2. 看代码!--->控制风开关,拖拽,变色
  3. git fetch origin /git branch -r
  4. 海外SZ新需求 --->风口调节和车体图
  5. 拆包合并出量产包问题--->end 没有拆,直接合入出量产包了,又加了吹风模式,拆除HT是因为怕有问题,笑话

13点31分

  1. SQHD出风口风量小,貌似之前已经解决了--->测试乌龙
  2. 出量产包
    git cherry-pick A^..B 包含A的连续commit
    直接cherry-pick merge--->但是没有独立的commit记录---->对于多个commit这样好
  3. SZ是单独mask

2025年4月14日 周一

10点41分

  1. 出国外空调量产包---->主干包只能在develop分支出,量产包只能在release分支出,一般出量产包不着急/量产分支,这个要等我们的主干版本他们验证ok,上他们量产线后,在那个版本的节点上拉出来一个分支,命名为量产分支--->end
  2. 要更新国内主干包的出包记录--->有一个启动图有问题,扶手屏的,--->分辨率不一致原因,确认扶手屏分辨率--->这貌似不是个问题,选错车型了,那么别的车型有扶手屏吗?没有的话,选择了会怎么样
    16点52分 改变了缩放模式,选别的车得有一个场景,不然会崩溃----end
  3. 211车型扶手屏的放大有黑边mask这个
  4. 海外SZ车型有崩溃问题--->引擎问题
  5. 反复拉起测试内存是否有上涨???---->11点35分 分析这个--->引擎侧的问题,老问题end

13点44分

  1. 海外空调测试excel里最后一点,反复拉起测试内存是否有上涨,这个是引擎的问题,老问题了,不用管听罗导的意思
  2. 如果遇到反复拉起测试,有黑屏,也是一样,引擎的老问题
  3. 移除SF后排资源,出主干包---end

只有三厢有头枕屏,扶手屏

  1. 看看遮罩Mask---->18点51分,大概找见遮罩的位置了
    UserModule\source\private\CarInteriorBeh.cpp#694

2025年4月11日

  1. 周报
    1. 国内空调新增HT两款车型HFEF,已完成并出主干包和压测包,测试通过
    2. 解决国内空调SQ和HT车型bug
    3. 解决海外SF车型和SQ车型空调的bug
    4. 完成国内空调SQ车型拆包
      下周
    5. 完成国内空调SZ和HT车型拆包
    6. 国内空调新增QZ车型
    7. 国内HT车型扶手屏启动图会放大问题
  2. 国内SQ问题
  3. 中英文切换黑屏?--->解决不了,和我无关

13点29分

  1. 出包
    难喽!!

  2. 国内空调可以通过这两个关键字查看启动时间海外没有做,需不需要加上

2025年4月10日

  1. 海外SF出包,主干和压测,要记录---->end
    • 逐渐把握节奏,更新了周一的国内出包记录,至于主干or量产,还是未知--->新功能都是出主干包(可以debug),然后去测,测完交给BYD,等BYD说没问题,可以发量产包,就再发一个量产包,如果量产包又出了问题,就修,再出修完的量产包
    • 出压测包的时候,改动Java代码在Android studio内改
  2. qz,新引擎,cmake--->不一定做,不要 拖着
	gw::render::GMaterial::CastTo<gw::render::GUnlitTextureMaterial>(frontBg->Children()[0]->CastTo<PlaneGeometry>()->GetMaterial())->SetTextureFromFile("UserResources/SZ_Mask/SZ_FrontRow.jpg");
	gw::render::GMaterial::CastTo<gw::render::GUnlitTextureMaterial>(midBg->Children()[0]->CastTo<PlaneGeometry>()->GetMaterial())->SetTextureFromFile("UserResources/SZ_Mask/SZ_RockRow.jpg");
	gw::render::GMaterial::CastTo<gw::render::GUnlitTextureMaterial>(backBg->Children()[0]->CastTo<PlaneGeometry>()->GetMaterial())->SetTextureFromFile("UserResources/SZ_Mask/SZ_backRow.jpg");
	//用于为场景中的不同背景平面设置对应的纹理贴图
	//类型安全转换:将通用材质(GMaterial)转换为无光照纹理材质(GUnlitTextureMaterial),确保支持纹理设置。

10点52分

  1. HT25副驾驶的图有修改,需要更新--->end 更新副驾启动图

13点27分

  1. 安装了虚拟机---->也就蓝叠强一些,但还是不行
  2. 国内SQ拆包 file://docs.gritworld.cn/Company/DevelopmentSH/gm-cicd/byd_airconditioner/17232_develop_sq_0408/

35fe5032696e291addffed370da9eb431a7078ca 1.7
34fb78c0c5f6a21a3c0438b253582c2d872b5641 1.14-2
c8497bdda673b1b1fbc7e62efffa7992f6f91ab5 1.14-1
3880d86aa5e0792d8a89685765dcca186fe69d58 1.21

  1. 海外SQ年久失修,需要和国内的一样,用cherry-pick拿过来修改,很方便,

    • git cherry-pick --abort 有冲突中止
    • git cherry-pick --continue 解决完冲突还卡在picking状态,
    • git cherry-pick 完直接就是commit完了,毕竟是直接拿过来commit
  2. 测试问题

海外SF 2个 --->end
SQ 3个 --->已解决
国内 SQ 一个
---都是美术

2025年4月9日

10点36分

  1. 帮忙python脚本 end ---> 学习一下

  2. 海外SF出包给测试--->end

    1. 14点18分 出了大问题 crash了---->Copy_Libs这个脚本使用了旧的库,删除就好了
    2. 又测出问题了,恨测试--->待修复,貌似是美术的
      1. 风口加注释,一类一行,先确认一下
    3. 国内HT也有问题,序列帧切换--->end 已没问题
  3. 昨天输出的国内空调主干包还需要更新下HT 25款的副驾车体图 --->end 貌似已经解决

  4. 闲了就看代码,分辨率那个设置不起作用啊

    1. SF (25.6, 14.4, 1) 16:9
    2. SQ HT SZ (25.6, 16.0, 1) 16:10

2025年4月8日

  1. 正则表达式
  2. 国外SF bug修复,代码修改----> 未做,但好像是改完了,就是那个恶心的FindAllWindMesh()需要搞明白--->验证

11点07分

  1. 看这个,解决FindAllWindMesh()
  2. 新需求,需评估时间---->0x011A QZH 25款混动
    • 几个功能点还需要再细看,还不是很清楚---->目前没有啥新功能点,还是一样的无动力发动机,和SQ一样,只不过可能需要在新引擎上做
//4.2海外SF测试问题

m2066-----吹热风情况下,除雾风脚部风和左右侧风的颜色不一样   end
k2067-----SF前排后排互切的过程中是黑屏,没有过场动画  end me viewchangeplane
2068-----后排吹风风量调节小于7的情况下,可以看到有一个黑色阴影方框  xx
m2069---- 只打开前排一侧出风口时,可以看到靠近出风口的位置也会亮起   end
2070----后排出风的范围比实际的出风口的范围大  xx
k2071----刚进入SF空调时,会短暂出现一个白框     end  me  启动图
m2072----除雾风左侧靠近车框的位置有一条黑线,右侧没有 end 待验证
2073----吹脚风外侧黑色的范围很大,没有过渡效果  xx

16点13分

  1. 拆包 ---->新任务 原本147mb

    1. fatal: 'origin/develop-HT-SZ' is not a commit and a branch 'develop-HT-SZ' cannot be created from it----->在远程建了新分支,要更新到本地,实际上,git仓库分为本地仓库和远程仓库,我们用checkout命令是从本地仓库中找要检出的分支的。本地仓库只有在进行网络请求时才会跟远程仓库交互,比如fetch命令。
      所以要git fetch origin 和 git remote update origin --prune
  2. 又是学习git的一天

2025年4月7日 周一

  1. 出包。新需求增加春季新款HT车型----> 完成
  2. viewchangeplane的开关在海外上,貌似国内也会加--->加上了

14点35分

  1. 看是如何加的风口---->还是不明所以,那个改名字的没用到啊,数组加载就生效了--->2025年4月10日13点31分,目前结论是有一套固定的加载的,但是防止漏掉,所以再筛选一次

2025年4月3日

  1. 加一个开关判断 对于是否切换前后排---->试一下SQ和HT有无问题11点17分
  2. 加一下虚拟机
  3. 本地出基于新引擎的包,给测试测---->测完通过后,修改CI中引擎的压缩包,用于自动出包
  4. 新需求HT的

14点30分
三件事

  1. 出一个sq的量产包,不确定要不要拉新分支cherry-pick,写进出包记录
  2. 国内all-0403出一个量产包,写进出包记录----->第1点和第2点出了一个包
  3. 国外sfbug修复,代码修改---->未做

2025年4月2日

  1. 合入 出包 更新了答疑中的出包流程和出包记录

13点43分 完成

在新增SF车型前拉了一个新的海外空调分支release-oversea,用于cherry-pick

15点46分
切换前后排为毛是黑屏一下? 之前是好的,序列帧没设置,设置了还是有问题,记得一开始就是这样,跟引擎开关无关 --->有关,是一个viewchange

2025年4月1日

void OutletBeh::SetWindStrength(int state)
{
	mWindState = state;
	mOpacity = 0.4 + 0.6 / 6 * (state - 1.0);
	mAlphaConversionRange = 2.5 - (state - 1.0) * (2.25 / 6.0);
	mStartOpactiy = GetComponent()->GetOpacity();
	mTimeLineWindStrength.PlayFromStart();
	if (mCarType != CAR_TYPE::SQ && mCarType != CAR_TYPE::SF)//SQ不需要风速效果
	{
		if (mWindMeshVector.empty() == false && mWindMeshVector[0]->Children()[0]->Children().empty() == false)
		{
			mStartAlphaConversionRange = gw::render::GMaterial::CastTo<gw::render::GPhysicalMaterial>(mWindMeshVector[0]->Children()[0]->Children()[0]->CastTo<Mesh>()->GetMaterial())->GetAlphaConversionRange();
		}
		if (mWindComp != nullptr)
		{
			for (auto comp : mWindMeshVector)
			{
				std::string materialName = comp->ComponentName();
				if (!comp->Children()[0]->Children().empty())
				{
					auto pbr = gw::render::GMaterial::CastTo<gw::render::GPhysicalMaterial>(comp->Children()[0]->Children()[0]->CastTo<Mesh>()->GetMaterial());
					if (pbr == nullptr) continue;
					pbr->EnableAlphaConversion(true);
					pbr->SetForceTransparent(true);
					pbr->SetAlphaConversionIntensity(1.5);
					if (pbr->GetUTransformFunction("BASE") == gw::render::EUVTransformFunction::TILING_TRANSLATE &&
						pbr->GetVTransformFunction("BASE") == gw::render::EUVTransformFunction::TILING_TRANSLATE)
					{
						float speedV = mWindPbrMatUVSpeedMap[materialName].y * (0.4 + 0.6 / 6 * (state - 1.0));
						pbr->SetVTransform("BASE", gw::render::EUVTransformFunction::TILING_TRANSLATE, std::vector<float>{ pbr->GetVFuncParam("BASE")[0], speedV, 0.0, 0.0 });
					}
				}
			}
		}
	}
	if (mTreeComp == nullptr || mTreeComp->Children().empty())
	{
		SetVFXWindStrength(mTreeComp, mStartDuration2);
	}
	else
	{
		for (auto comp : mTreeComp->Children())
		{
			SetVFXWindStrength(comp, mStartDuration2);
		}
	}
	if (mAnionComp == nullptr || mAnionComp->Children().empty())
	{
		SetVFXWindStrength(mAnionComp, mStartDuration1);
	}
	else
	{
		for (auto comp : mAnionComp->Children())
		{
			SetVFXWindStrength(comp, mStartDuration1);
		}
	}
	if (mClickArea != nullptr)
	{
		mClickArea->SetScale((0.6 + 0.4 / 6 * (state - 1.0)) * mClickAreaX, mClickArea->GetScale().y, mClickArea->GetScale().z);
	}
}

10点00分

  1. 填完工时
  2. 基本梳理完设置风力大小的地方,有点复杂,颜色,透明度,材质变换

14点32分

  1. 出风模式超!!!--->没区别的原因1. 是否有限制被设置上?之前确定被设置上了,但是不可能仅仅就是设置完ID就没了吧
    if (mRotateComp == nullptr) return; 这个生效所以全部return了
    SQ没有旋转相关的东西,所以,他的mRotateComp是nullptr
    16点54分 还在看出风口模式,严重怀疑没做---->它的作用是限制手动拖风的范围,角度

  2. 方向调节1和2也是HT才有,但是是如何排除SQ的,--->很明显!而且是怎么实现的好神奇??

mTimeLineAutoAngleY.SetTotalTime(time); //设置时间
mTimeLineAutoAngleY.PlayFromStart(); //启动时间线
mTargetY = std::clamp(angle * -5, (float)mAirOutletAngle[3] * -5, (float)mAirOutletAngle[2] * -5);
mStartY = mTotalY;

//开始和结束用在SetCurrentAngleY,因为打断点的时候,先断在set autoangleY,继续则断在了SetCurrentAngleY这,很说明问题

  1. HT修改,但貌似不是空调,也改的不多

2025年3月31日一

在上海第一个工作日

上午配置电脑 仓库啥的
(报销不急,问财务)

13点40分

  1. 开始执行在台式上,看有什么问题

  2. 基本都满足条件了,git曹,还有遗留吹风模式,出风口模式

 //SF
        mImagePathMap.put(String.valueOf(0x011C) ,"Data/UserResources/SF/SFStart.jpg");
        mImagePathMap.put(String.valueOf(0x0128) ,"Data/UserResources/SF/SFStart.jpg");

CarModeIdDataList.add(new IdData("海外SF 0x011C", 0x011C));
CarModeIdDataList.add(new IdData("海外SF 0x0128", 0x0128));

出风口模式,还有风量调节,看到根

3.20入职

一、 海外HT出风口角度调节---->乌龙,已于要求的一致 endtime3.27
二、 增加新车型SF--->在测试 4.2
三、 节后HTEF和HTHF

posted @ 2025-03-31 13:34  無碍  阅读(34)  评论(0)    收藏  举报