-
把 CodeArts 接入 AI 工作流:我做了一个统一的 CodeArts MCP Server最近在整理华为云 CodeArts 的日常研发协作场景时,我发现一个很实际的问题:需求、代码仓、流水线、构建、部署、代码检查、测试计划、制品仓库这些能力都很完整,但如果想让 AI 助手真正参与研发流程,就需要一个统一、稳定、可复用的工具入口。于是有了这个项目:CodeArts MCP。它是一个面向华为云 CodeArts 中国站的统一 MCP Server,把 CodeArts 的多个产品能力封装成标准化 MCP 工具,让支持 MCP 的 AI 客户端可以直接调用 CodeArts 能力。它解决什么问题?传统方式里,AI 想参与研发流程,往往只能停留在“看代码、写建议”的层面。真正到了项目管理、工作项流转、流水线执行、构建日志查询、部署记录查看这些环节,仍然需要人手动切换平台操作。CodeArts MCP 的目标是把这些动作工具化,让 AI 可以在授权范围内完成类似这样的工作:查询项目、迭代、工作项、成员信息查看代码仓库、分支、提交和合并请求查询或触发流水线、构建任务查看构建日志、部署记录和制品版本查询代码检查问题和质量指标读取测试计划、用例和执行记录换句话说,它不是简单地“复制官方 API”,而是把真实研发流程中高频使用的路径整理成一组可被 AI 调用的 MCP 工具。当前覆盖范围项目目前覆盖 CodeArts 的 8 个产品模块:模块能力方向Req需求、项目、迭代、工作项、成员协作Repo代码仓库、分支、提交、MRPipeline流水线查询、执行、审批、治理Check代码检查任务、规则集、问题和指标TestPlan测试计划、用例、执行记录Deploy应用、环境、主机组、部署记录Build构建任务、构建记录、日志、参数Artifact制品仓库、版本、文件树、下载地址当前共享 HTTP 模式下共暴露 419 个 MCP 工具,其中包括 417 个产品工具 和 2 个会话鉴权工具。两种使用方式CodeArts MCP 支持两种接入模式。第一种是本地 stdio 模式,适合个人开发者在本机使用。配置 AK/SK 后,AI 客户端可以通过本地进程调用 CodeArts 能力。第二种是团队共享 http + session 模式,适合把 MCP Server 部署成团队公共入口。这里需要强调一点:共享的是服务入口,不是共享凭证。每个用户仍然使用自己的 AK/SK,服务端通过 session 做隔离。团队共享模式下还支持:Cookie 会话恢复Bearer token 恢复AK/SK 加密持久化写操作 per-session 限流高频读工具缓存与 in-flight dedupe这让它更适合放到团队环境里长期使用,而不是只做一个临时脚本。快速启动如果使用 Docker Compose,可以这样启动:cp .env.example .env docker compose up -d --build 核心环境变量示例:MCP_TRANSPORT=http MCP_HTTP_PORT=3000 MCP_SERVER_NAME=codearts-mcp MCP_SERVER_VERSION=0.1.0 MCP_AUTH_MASTER_KEY=replace-with-a-long-random-secret MCP_AUTH_DATA_PATH=.codearts-mcp/auth-store.json 客户端添加 MCP 服务:{ "mcpServers": { "codearts-shared": { "type": "http", "url": "http://your-server-ip/mcp" } } } 首次连接后调用:{ "access_key": "your-ak", "secret_key": "your-sk", "region": "cn-north-4" } 然后可以用下面几个读工具验证链路:req_list_projectsrepo_list_repositoriespipeline_list_pipelinesbuild_list_jobs如果这些工具能正常返回,说明 MCP 服务、会话鉴权和 CodeArts API 链路基本已经打通。为什么我觉得它有价值?我认为 MCP 对研发工具最大的意义,不是让 AI “替人点按钮”,而是让 AI 能进入真实上下文。例如以前你可能会问 AI:帮我分析一下这次构建为什么失败。但 AI 如果没有工具,只能根据你贴出来的日志猜。接入 CodeArts MCP 后,理论上可以变成:帮我看一下最近一次构建失败原因,关联流水线记录、构建日志和代码检查结果,给我一个排查建议。这时 AI 可以通过 MCP 工具读取构建记录、实时日志、流水线运行详情、代码检查问题,再组织出更接近真实工程场景的回答。对团队来说,这类能力可以继续扩展到:需求状态巡检迭代风险分析构建失败归因部署记录追踪制品版本回溯MR 与工作项联动分析这些都比单纯的聊天问答更接近“AI 研发助手”的实际形态。技术实现项目基于 TypeScript 和 @modelcontextprotocol/sdk 实现,主要技术栈包括:Node.js 22TypeScript 5.8+ZodVitestDocker / Docker ComposeNginxMCP Streamable HTTP / stdio代码结构上分为几层:src/server:MCP 服务入口、工具注册、HTTP 接入、会话管理src/products:CodeArts 各产品模块工具实现src/core:鉴权、缓存、配置、HTTP 客户端、错误处理等通用能力docs/wiki:模块能力、API 参考、部署和排障文档项目也内置了工具清单校验、文档统计同步、模块统计检查等脚本,避免工具数量、注册状态和文档长期漂移。适合谁使用?这个项目比较适合以下几类人:正在使用华为云 CodeArts 的研发团队想把 AI 助手接入真实研发流程的团队想研究 MCP Server 工程化实现的开发者想把内部 DevOps 平台能力开放给 AI 调用的工程师如果只是想让 AI 写代码,它可能不是必须的。但如果你希望 AI 能理解项目、需求、构建、流水线、部署和制品上下文,那么这类 MCP Server 会变得很有价值。总结CodeArts MCP 的核心思路很简单:把 CodeArts 的研发协作能力整理成 AI 可以调用的标准工具。它目前已经覆盖 8 个 CodeArts 产品模块,支持个人本地和团队共享两种模式,并在会话隔离、凭证加密、限流、缓存和部署方式上做了工程化处理。对我来说,这个项目更像是一个起点:当研发平台能力被 MCP 化之后,AI 助手就不再只是“回答问题”,而是可以真正进入研发流程,参与查询、分析、联动和自动化执行。仓库地址:https://gitee.com/dtse01/codearts-mcp
-
如图所示,最新版本,在扩展里,搜索不到 codeArts ,请大牛帮忙
yd_243089696
发表于2026-03-31 03:34:40
2026-03-31 03:34:40
最后回复
CodeArts小助手-蚂蚁
2026-03-31 09:19:22
57 1 -
开发者技术支持-鸿蒙应用提取音视频元数据信息1.1 问题说明在鸿蒙应用开发中,开发者常需要从音视频资源中提取标题、时长、分辨率、专辑封面等元数据,以支撑媒体文件展示、播放等业务场景。本方案基于 AVMetadataExtractor 组件,提供了从本地沙箱、RawFile 资源或在线链接中提取音视频元数据的完整实现流程。1.2 原因分析· 媒体资源多样化音视频资源可能来自应用内置 RawFile、应用沙箱存储或在线链接,不同来源的资源需要适配不同的加载方式。 · 元数据类型差异音频资源包含专辑封面、歌手等信息,视频资源包含分辨率、时长等信息,需要针对性的提取逻辑。· 资源管理风险若未正确释放 AVMetadataExtractor 实例,会导致文件描述符泄漏,引发应用性能问题或崩溃。 · 异步操作复杂度元数据提取与封面获取均为异步操作,需要合理处理回调与 Promise 模式,避免出现空指针或时序错误。1.3 解决思路· 创建实例通过 createAVMetadataExtractor() 初始化元数据提取器实例。· 设置资源来源根据资源类型,选择 fdSrc(文件描述符)、dataSrc(自定义数据源)或 setUrlSource(在线链接)设置资源。· 提取元数据调用 fetchMetadata() 获取音视频基础元数据,如时长、分辨率等。· 获取附加资源对音频资源调用 fetchAlbumCover() 获取专辑封面,对视频资源调用 fetchFrameByTime() 获取缩略图。· 释放资源操作完成后调用 release() 销毁实例,避免资源泄漏。1.4 解决方案核心实现代码· 1. 创建 AVMetadataExtractor 实例import { media } from '@kit.MediaKit'; // 创建AVMetadataExtractor对象let avMetadataExtractor: media.AVMetadataExtractor = await media.createAVMetadataExtractor(); · 2. 设置资源来源方式 1:加载 RawFile 资源(fdSrc)import { common } from '@kit.AbilityKit';import { media } from '@kit.MediaKit'; let context: common.UIAbilityContext = this.getUIContext().getHostContext() as common.UIAbilityContext;// 设置fdSrc,加载rawfile目录下的test.mp3avMetadataExtractor.fdSrc = await context.resourceManager.getRawFd('test.mp3'); 方式 2:加载沙箱资源(dataSrc)import { fileIo as fs, ReadOptions } from '@kit.CoreFileKit';import { common } from '@kit.AbilityKit';import { media } from '@kit.MediaKit'; const TAG = 'MetadataDemo';let context: common.UIAbilityContext = this.getUIContext().getHostContext() as common.UIAbilityContext;let rootPath: string = context.filesDir;let testFilename: string = '/test.mp3';let fd: number = fs.openSync(rootPath + testFilename).fd;let fileSize: number = fs.statSync(rootPath + testFilename).size; // 配置dataSrc数据源let dataSrc: media.AVDataSrcDescriptor = { fileSize: fileSize, callback: (buffer, len, pos) => { if (!buffer || !len || !pos) { console.error(TAG, 'dataSrc callback param invalid'); return -1; } let options: ReadOptions = { offset: pos, length: len }; let num = fs.readSync(fd, buffer, options); return num > 0 && fileSize >= pos ? num : -1; }};avMetadataExtractor.dataSrc = dataSrc; 方式 3:加载在线资源(setUrlSource)import { media } from '@kit.MediaKit'; let url: string = 'http://example.com/test.mp4';let headers: Record<string, string> = { "User-Agent": "HarmonyOS-App" };avMetadataExtractor.setUrlSource(url, headers); · 3. 提取元数据// Promise模式获取元数据let metadata = await avMetadataExtractor.fetchMetadata();// 获取视频宽高let videoWidth = metadata.videoWidth;let videoHeight = metadata.videoHeight;// 获取音频时长let audioDuration = metadata.duration; · 4. 获取专辑封面 / 视频缩略图import { image } from '@kit.ImageKit';@State pixelMap: image.PixelMap | undefined = undefined; // 获取音频专辑封面this.pixelMap = await avMetadataExtractor.fetchAlbumCover(); // 获取视频缩略图let timeUs: number = 0;let queryOption: media.AVImageQueryOptions = media.AVImageQueryOptions.AV_IMAGE_QUERY_PREVIOUS_SYNC;let param: media.PixelMapParams = { width: 300, height: 300 };this.pixelMap = await avMetadataExtractor.fetchFrameByTime(timeUs, queryOption, param); · 5. 释放资源// Promise模式释放资源await avMetadataExtractor.release();1.5 总结· 问题说明:音视频元数据提取是鸿蒙媒体类应用的基础能力,直接影响媒体文件的展示效率与用户体验。· 痛点总结:资源来源多样导致适配复杂,异步操作易引发时序问题,实例未释放会造成资源泄漏,且不同媒体类型的元数据提取逻辑存在差异。· 技术总结:通过 AVMetadataExtractor 统一处理本地与在线资源,结合 fdSrc/dataSrc/setUrlSource 适配不同场景,异步操作支持回调与 Promise 两种模式,最终通过 release() 保障资源安全。 · 避坑建议:禁止多个实例共用文件描述符,开发阶段需验证资源有效性,优先使用 Promise 模式简化异步逻辑,并确保在异常流程中也能释放实例。
-
开发者技术支持-基于ArkTs实现同应用跨设备数据同步的功能1.1 问题说明在鸿蒙跨设备应用开发中,用户期望在不同设备(如手机、平板、智慧屏等)上使用同一应用时,数据能够自动同步、状态保持一致。目前开发者在实现跨设备数据同步时,常面临设备发现、数据传输、冲突处理、状态同步等技术难点,缺乏统一、高效、可靠的同步方案,导致开发复杂度高、用户体验不一致。1.2 原因分析· 缺乏统一的跨设备数据同步框架,开发者需自行实现设备发现、通信与数据同步逻辑· 数据同步机制不标准化,不同设备间数据传输格式、同步策略不一致· 数据冲突处理机制缺失,多设备同时操作时易出现数据不一致问题1.3 解决思路· 设计一个统一的数据同步管理器,封装设备发现、数据传输、冲突解决等基础能力· 建立标准化的数据模型与同步协议,支持多种数据类型与同步策略· 实现基于操作日志的冲突解决机制,支持自动合并与用户决策1.4 解决方案步骤1: 创建统一数据同步管理器// DistributedSyncManager.tsimport { distributedData, deviceManager } from '@kit.ArkData'; export enum SyncMode { REAL_TIME = 'real_time', LAZY = 'lazy', MANUAL = 'manual'} export enum DataType { USER_PREF = 'user_preference', APP_STATE = 'application_state', BUSINESS_DATA = 'business_data'} export interface SyncItem { key: string; value: any; type: DataType; timestamp: number; deviceId: string; version: number;} export class DistributedSyncManager { private kvManager: distributedData.KVManager; private kvStore: distributedData.SingleKVStore | null = null; private deviceList: deviceManager.DeviceInfo[] = []; private readonly STORE_ID = 'cross_device_sync_store'; constructor(context: Context) { this.initKVStore(context); this.watchDeviceChange(); } private async initKVStore(context: Context): Promise<void> { const options: distributedData.KVManagerOptions = { bundleName: context.applicationInfo.bundleName, context: context }; this.kvManager = distributedData.createKVManager(options); const kvOptions: distributedData.Options = { createIfMissing: true, encrypt: false, backup: false, autoSync: true, kvStoreType: distributedData.KVStoreType.SINGLE_VERSION, schema: '' }; this.kvStore = await this.kvManager.getKVStore(this.STORE_ID, kvOptions); // 订阅数据变更 this.kvStore.on('dataChange', (data: distributedData.ChangeNotification) => { this.handleDataChange(data); }); } // 设备状态监听 private watchDeviceChange(): void { deviceManager.createDeviceManager().then((manager) => { manager.on('deviceOnline', (device) => { this.deviceList.push(device); this.syncAllData(SyncMode.REAL_TIME); }); manager.on('deviceOffline', (device) => { this.deviceList = this.deviceList.filter(d => d.deviceId !== device.deviceId); }); }); } // 设置数据(自动同步) async setData(key: string, value: any, type: DataType, syncMode: SyncMode = SyncMode.REAL_TIME): Promise<void> { const syncItem: SyncItem = { key, value, type, timestamp: Date.now(), deviceId: await this.getLocalDeviceId(), version: await this.getNextVersion(key) }; await this.kvStore?.put(key, JSON.stringify(syncItem)); if (syncMode === SyncMode.REAL_TIME) { await this.syncToAllDevices(key, syncItem); } } // 获取数据(自动合并最新版本) async getData<T>(key: string): Promise<T | null> { const entries = await this.kvStore?.getEntries(key); if (!entries || entries.length === 0) return null; // 选择版本号最高的数据 const latest = entries.reduce((prev, curr) => { const prevItem: SyncItem = JSON.parse(prev.value as string); const currItem: SyncItem = JSON.parse(curr.value as string); return currItem.version > prevItem.version ? curr : prev; }); return JSON.parse(latest.value as string).value; } private async syncToAllDevices(key: string, item: SyncItem): Promise<void> { // 通过分布式数据框架自动同步 // 框架底层自动处理设备间传输 } private handleDataChange(change: distributedData.ChangeNotification): void { // 处理数据变更事件,通知UI更新 EventHub.emit('dataSyncChanged', { key: change.key, changeType: change.changeType }); }}步骤2:实现数据同步UI组件// SyncStateComponent.ets@Componentexport struct SyncStateIndicator { @LocalStorageProp('syncState') syncState: string = 'idle'; @LocalStorageProp('lastSyncTime') lastSyncTime: string = ''; build() { Row() { Image(this.getSyncIcon()) .width(16) .height(16) .margin({ right: 6 }) Text(this.getSyncText()) .fontSize(12) .fontColor(this.getSyncColor()) if (this.lastSyncTime) { Text(`最近同步: ${this.lastSyncTime}`) .fontSize(10) .fontColor(Color.Gray) .margin({ left: 8 }) } } .padding(8) .backgroundColor(Color.White) .borderRadius(4) .shadow({ radius: 2, color: '#10000000' }) } private getSyncIcon(): Resource { switch (this.syncState) { case 'syncing': return $r('app.media.ic_sync'); case 'success': return $r('app.media.ic_sync_success'); case 'error': return $r('app.media.ic_sync_error'); default: return $r('app.media.ic_sync_idle'); } } private getSyncText(): string { switch (this.syncState) { case 'syncing': return '同步中...'; case 'success': return '已同步'; case 'error': return '同步失败'; default: return '未同步'; } } private getSyncColor(): ResourceColor { switch (this.syncState) { case 'syncing': return Color.Blue; case 'success': return Color.Green; case 'error': return Color.Red; default: return Color.Gray; } }} // 数据绑定组件@Componentexport struct SyncDataText { @LocalStorageProp('dataKey') dataKey: string = ''; @LocalStorageProp('defaultValue') defaultValue: string = ''; @State currentValue: string = ''; private syncManager: DistributedSyncManager = new DistributedSyncManager(getContext(this)); aboutToAppear() { this.loadData(); // 监听数据变更 EventHub.on('dataSyncChanged', (data: any) => { if (data.key === this.dataKey) { this.loadData(); } }); } async loadData() { const value = await this.syncManager.getData<string>(this.dataKey); this.currentValue = value || this.defaultValue; } build() { Text(this.currentValue) .fontSize(16) .onClick(async () => { // 点击后可在所有设备同步更新 const newValue = await this.showEditDialog(); await this.syncManager.setData( this.dataKey, newValue, DataType.USER_PREF ); }) }}步骤3:在Ability中初始化同步服务// EntryAbility.etsexport default class EntryAbility extends Ability { private syncManager: DistributedSyncManager | null = null; onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void { this.syncManager = new DistributedSyncManager(this.context); this.initDataSync(); } private initDataSync(): void { // 注册全局数据同步事件 EventHub.on('requestSync', (data: { key: string, value: any }) => { this.syncManager?.setData(data.key, data.value, DataType.BUSINESS_DATA); }); // 定时同步机制 setInterval(() => { this.syncManager?.syncAllData(SyncMode.LAZY); }, 30000); // 每30秒懒同步一次 } onWindowStageCreate(windowStage: window.WindowStage): void { // 窗口创建时恢复上次同步状态 this.restoreSyncState(); } private async restoreSyncState(): Promise<void> { const lastState = await this.syncManager?.getData('app_last_state'); if (lastState) { // 恢复应用状态 AppStorage.setOrCreate('appState', lastState); } }}步骤4:业务页面中使用数据同步// TodoListPage.ets@Entry@Componentstruct TodoListPage { @State todoList: TodoItem[] = []; private syncManager: DistributedSyncManager = new DistributedSyncManager(getContext(this)); aboutToAppear() { this.loadTodos(); // 监听其他设备的数据变更 EventHub.on('todoDataChanged', this.handleTodoUpdate.bind(this)); } async loadTodos() { const todos = await this.syncManager.getData<TodoItem[]>('user_todos'); this.todoList = todos || []; } async addTodo(content: string) { const newTodo: TodoItem = { id: Date.now().toString(), content, completed: false, createTime: new Date().toISOString(), deviceId: await this.syncManager.getLocalDeviceId() }; this.todoList = [...this.todoList, newTodo]; // 同步到所有设备 await this.syncManager.setData( 'user_todos', this.todoList, DataType.BUSINESS_DATA, SyncMode.REAL_TIME ); } // 处理来自其他设备的更新 handleTodoUpdate(update: { action: 'add' | 'update' | 'delete', data: TodoItem }) { switch (update.action) { case 'add': this.todoList = [...this.todoList, update.data]; break; case 'update': this.todoList = this.todoList.map(todo => todo.id === update.data.id ? update.data : todo ); break; } } build() { Column() { // 同步状态指示器 SyncStateIndicator() .margin({ top: 12 }) List() { ForEach(this.todoList, (item: TodoItem) => { ListItem() { TodoItemComponent({ item: item }) } }) } // 添加待办输入框 TodoInput({ onAdd: this.addTodo.bind(this) }) } }} 1.5 总结问题与痛点:跨设备数据同步实现复杂,缺乏统一框架,设备发现、数据传输、冲突处理等需开发者重复实现技术总结:通过构建统一数据同步管理器、标准化同步协议、声明式同步组件,实现了开箱即用的跨设备数据同步解决方案 效果总结:开发者只需关注业务数据模型,无需关心底层同步细节,大幅降低跨设备应用开发复杂度,提升数据一致性体验
-
开发者技术支持-基于鸿蒙ArkUI实现多模态文本智能换行适配效果 1.1 问题说明在鸿蒙跨设备应用场景中(如手机、平板、折叠屏切换,或分屏多任务模式),文本展示常面临适配难题:固定换行规则在屏幕尺寸 / 比例突变时,易出现单词截断、标点孤行、公式拆分等排版混乱;传统自适应换行仅依赖宽度计算,忽略文本类型(英文单词、中文语句、数学公式)差异,导致专业内容可读性下降;用户手动调整布局时,文本换行无法实时响应尺寸变化,影响跨设备使用体验。本案例基于 ArkUI 的多维度适配引擎与文本语义分析技术,实现智能换行效果,可根据设备尺寸、文本类型动态调整换行策略,自动规避排版缺陷,确保跨设备 / 分屏场景下文本展示的规范性与可读性。1.2 原因分析· 多场景尺寸适配复杂跨设备 / 分屏时屏幕宽高比、可用区域动态变化,需实时计算文本容器尺寸,传统固定换行阈值易导致适配失效。· 文本类型识别与处理难度高英文单词、中文语句、公式符号的换行规则差异大,单纯基于字符长度的换行逻辑会破坏语义完整性。· 实时响应性能压力屏幕尺寸变化时需重新计算换行布局,频繁重排易导致界面卡顿,尤其在长文本或复杂排版场景中更为明显。1.3 解决思路· 多维度尺寸监听机制通过 ArkUI 的布局变化监听接口,实时捕获屏幕尺寸、容器宽高、分屏比例等变化,动态更新换行计算阈值。· 文本语义分类与规则适配预设中文、英文、公式等文本类型识别模型,针对不同类型制定专属换行规则(如英文不截断单词、公式整体换行)。· 增量重排优化策略仅对尺寸变化影响的文本段落进行局部重排,而非全量刷新,结合缓存机制减少重复计算,提升响应速度。1.4 解决方案尺寸监听与阈值更新// 监听布局容器尺寸变化Column() { Text(this.targetText) .id("adaptText") .onLayoutSizeChange((width: number, height: number) => { this.containerWidth = width; this.calcWrapThreshold(); // 重新计算换行阈值 })}// 计算不同文本类型的换行阈值calcWrapThreshold() { switch (this.textType) { case TextType.CHINESE: this.wrapThreshold = this.containerWidth * 0.9; // 中文占容器90%宽度换行 break; case TextType.ENGLISH: this.wrapThreshold = this.containerWidth * 0.85; // 英文预留更多空间避免单词截断 break; case TextType.FORMULA: this.wrapThreshold = this.containerWidth; // 公式整体适配容器宽度,超宽时单独换行 break; }} 智能换行逻辑实现// 文本分段与换行处理processTextWrap() { const textSegments = []; if (this.textType === TextType.ENGLISH) { // 英文按单词拆分,避免截断 const words = this.targetText.split(" "); let currentLine = ""; words.forEach(word => { if (this.getTextWidth(currentLine + word + " ") <= this.wrapThreshold) { currentLine += word + " "; } else { textSegments.push(currentLine.trim()); currentLine = word + " "; } }); textSegments.push(currentLine.trim()); } else if (this.textType === TextType.FORMULA) { // 公式整体换行处理 const formulaWidth = this.getTextWidth(this.targetText); if (formulaWidth > this.containerWidth) { textSegments.push("\n" + this.targetText + "\n"); // 超宽公式单独占行 } else { textSegments.push(this.targetText); } } else { // 中文按字符长度换行,规避标点孤行 const chars = this.targetText.split(""); let currentLine = ""; chars.forEach(char => { const punctuation = /[,。;:!?、""''()【】]/; if (this.getTextWidth(currentLine + char) <= this.wrapThreshold) { currentLine += char; } else { // 避免行尾为标点 if (punctuation.test(char)) { textSegments.push(currentLine + char); currentLine = ""; } else { textSegments.push(currentLine); currentLine = char; } } }); textSegments.push(currentLine); } this.wrappedText = textSegments.join("\n");} 1.5 总结· 问题与痛点:跨设备 / 分屏时文本排版混乱;不同类型文本换行规则冲突;尺寸变化时换行响应滞后;专业内容(英文、公式)可读性差。· 技术要点:通过布局尺寸监听实现动态适配、文本语义分类制定专属规则、增量重排优化提升性能、文本宽度计算确保排版精准。· 实现效果:文本可根据设备尺寸、分屏比例实时调整换行方式,英文不截断单词、中文规避标点孤行、公式整体适配,跨设备切换时排版流畅过渡,无卡顿或错乱,大幅提升多场景文本阅读体验。· 适用场景:跨设备应用、分屏多任务工具、办公文档 APP、外语学习软件、包含公式的学术 / 技术类应用。
-
开发者技术支持-基于鸿蒙ArkUI实现多模态文本智能换行适配效果 1.1 问题说明在鸿蒙跨设备应用场景中(如手机、平板、折叠屏切换,或分屏多任务模式),文本展示常面临适配难题:固定换行规则在屏幕尺寸 / 比例突变时,易出现单词截断、标点孤行、公式拆分等排版混乱;传统自适应换行仅依赖宽度计算,忽略文本类型(英文单词、中文语句、数学公式)差异,导致专业内容可读性下降;用户手动调整布局时,文本换行无法实时响应尺寸变化,影响跨设备使用体验。本案例基于 ArkUI 的多维度适配引擎与文本语义分析技术,实现智能换行效果,可根据设备尺寸、文本类型动态调整换行策略,自动规避排版缺陷,确保跨设备 / 分屏场景下文本展示的规范性与可读性。1.2 原因分析· 多场景尺寸适配复杂跨设备 / 分屏时屏幕宽高比、可用区域动态变化,需实时计算文本容器尺寸,传统固定换行阈值易导致适配失效。· 文本类型识别与处理难度高英文单词、中文语句、公式符号的换行规则差异大,单纯基于字符长度的换行逻辑会破坏语义完整性。· 实时响应性能压力屏幕尺寸变化时需重新计算换行布局,频繁重排易导致界面卡顿,尤其在长文本或复杂排版场景中更为明显。1.3 解决思路· 多维度尺寸监听机制通过 ArkUI 的布局变化监听接口,实时捕获屏幕尺寸、容器宽高、分屏比例等变化,动态更新换行计算阈值。· 文本语义分类与规则适配预设中文、英文、公式等文本类型识别模型,针对不同类型制定专属换行规则(如英文不截断单词、公式整体换行)。· 增量重排优化策略仅对尺寸变化影响的文本段落进行局部重排,而非全量刷新,结合缓存机制减少重复计算,提升响应速度。1.4 解决方案尺寸监听与阈值更新// 监听布局容器尺寸变化Column() { Text(this.targetText) .id("adaptText") .onLayoutSizeChange((width: number, height: number) => { this.containerWidth = width; this.calcWrapThreshold(); // 重新计算换行阈值 })}// 计算不同文本类型的换行阈值calcWrapThreshold() { switch (this.textType) { case TextType.CHINESE: this.wrapThreshold = this.containerWidth * 0.9; // 中文占容器90%宽度换行 break; case TextType.ENGLISH: this.wrapThreshold = this.containerWidth * 0.85; // 英文预留更多空间避免单词截断 break; case TextType.FORMULA: this.wrapThreshold = this.containerWidth; // 公式整体适配容器宽度,超宽时单独换行 break; }} 智能换行逻辑实现// 文本分段与换行处理processTextWrap() { const textSegments = []; if (this.textType === TextType.ENGLISH) { // 英文按单词拆分,避免截断 const words = this.targetText.split(" "); let currentLine = ""; words.forEach(word => { if (this.getTextWidth(currentLine + word + " ") <= this.wrapThreshold) { currentLine += word + " "; } else { textSegments.push(currentLine.trim()); currentLine = word + " "; } }); textSegments.push(currentLine.trim()); } else if (this.textType === TextType.FORMULA) { // 公式整体换行处理 const formulaWidth = this.getTextWidth(this.targetText); if (formulaWidth > this.containerWidth) { textSegments.push("\n" + this.targetText + "\n"); // 超宽公式单独占行 } else { textSegments.push(this.targetText); } } else { // 中文按字符长度换行,规避标点孤行 const chars = this.targetText.split(""); let currentLine = ""; chars.forEach(char => { const punctuation = /[,。;:!?、""''()【】]/; if (this.getTextWidth(currentLine + char) <= this.wrapThreshold) { currentLine += char; } else { // 避免行尾为标点 if (punctuation.test(char)) { textSegments.push(currentLine + char); currentLine = ""; } else { textSegments.push(currentLine); currentLine = char; } } }); textSegments.push(currentLine); } this.wrappedText = textSegments.join("\n");} 1.5 总结· 问题与痛点:跨设备 / 分屏时文本排版混乱;不同类型文本换行规则冲突;尺寸变化时换行响应滞后;专业内容(英文、公式)可读性差。· 技术要点:通过布局尺寸监听实现动态适配、文本语义分类制定专属规则、增量重排优化提升性能、文本宽度计算确保排版精准。· 实现效果:文本可根据设备尺寸、分屏比例实时调整换行方式,英文不截断单词、中文规避标点孤行、公式整体适配,跨设备切换时排版流畅过渡,无卡顿或错乱,大幅提升多场景文本阅读体验。· 适用场景:跨设备应用、分屏多任务工具、办公文档 APP、外语学习软件、包含公式的学术 / 技术类应用。
-
1.1 问题说明在鸿蒙应用开发中,集成类似“小艺建议”的智能推荐功能时,开发者需要处理用户上下文感知、动态内容推荐、卡片化展示以及与应用间的双向交互。当前在ArkTs中实现此类功能缺乏统一组件与数据流方案,导致开发效率低、交互体验不一致。1.2 原因分析· 缺乏统一的智能建议组件框架,每次开发需重复实现推荐逻辑与UI· 上下文获取与建议生成逻辑分散,难以维护和扩展1.3 解决思路· 设计一个通用建议卡片组件,支持多种推荐类型(如天气、日程、新闻、提醒等)· 实现基于用户行为与系统状态的建议生成与更新机制· 建立卡片与应用间的标准化双向通信通道,支持点击跳转、状态同步等功能1.4 解决方案步骤1: 创建通用建议卡片组件/** * 智能建议卡片组件 */// 建议类型枚举export enum SuggestionType { WEATHER = 'weather', CALENDAR = 'calendar', NEWS = 'news', REMINDER = 'reminder', DEFAULT = 'default'} @Entry@Componentexport struct SmartSuggestionCard { @LocalStorageProp('suggestionType') suggestionType: SuggestionType = SuggestionType.DEFAULT; @LocalStorageProp('title') title: string = ''; @LocalStorageProp('content') content: string = ''; @LocalStorageProp('actionUrl') actionUrl: string = ''; @LocalStorageProp('icon') icon: string = ''; @LocalStorageProp('time') time: string = ''; aboutToAppear() { // 可根据类型初始化数据 } build() { Column() { Row() { Image(this.icon) .width(24) .height(24) .margin({ right: 12 }) Text(this.title) .fontSize(16) .fontWeight(FontWeight.Bold) .layoutWeight(1) Text(this.time) .fontSize(12) .fontColor(Color.Gray) } .width('100%') .padding(12) Divider() Text(this.content) .fontSize(14) .padding({ left: 12, right: 12, bottom: 12 }) .width('100%') // 可点击区域 Blank() .height(40) .onClick(() => { this.handleCardClick(); }) } .borderRadius(12) .backgroundColor(Color.White) .shadow({ radius: 6, color: '#20000000' }) .margin(8) } private handleCardClick() { // 触发应用内跳转或执行建议动作 if (this.actionUrl) { // 可通过路由器或事件机制通知应用 } }}步骤2:实现建议生成与管理服务// SuggestionService.tsexport class SuggestionService { private context: common.Context; constructor(context: common.Context) { this.context = context; } // 基于上下文获取建议 async fetchSuggestions(): Promise<SuggestionItem[]> { const suggestions: SuggestionItem[] = []; // 模拟获取天气建议 const weatherSuggestion = await this.getWeatherSuggestion(); if (weatherSuggestion) suggestions.push(weatherSuggestion); // 获取日程建议 const calendarSuggestion = await this.getCalendarSuggestion(); if (calendarSuggestion) suggestions.push(calendarSuggestion); return suggestions; } private async getWeatherSuggestion(): Promise<SuggestionItem | null> { // 调用天气API或本地传感器 return { type: SuggestionType.WEATHER, title: '今日天气', content: '晴,20°C,适宜出行', icon: 'common/weather_sunny.png', actionUrl: 'weather://detail', time: new Date().toLocaleTimeString() }; } private async getCalendarSuggestion(): Promise<SuggestionItem | null> { // 访问日历数据 return { type: SuggestionType.CALENDAR, title: '下一个会议', content: '项目评审会 10:00-11:00', icon: 'common/calendar.png', actionUrl: 'calendar://meeting', time: '今天 10:00' }; }} export interface SuggestionItem { type: SuggestionType; title: string; content: string; icon: string; actionUrl: string; time: string;}步骤3:在EntryAbility中注册建议卡片与事件export default class EntryAbility extends Ability { private suggestionService: SuggestionService; onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void { this.suggestionService = new SuggestionService(this.context); this.initSuggestionCard(); } private initSuggestionCard(): void { // 注册建议卡片更新监听 // 可通过EventHub或Preferences实现数据同步 const preferences = globalThis.getPreferences('suggestion_prefs'); preferences.on('change', (key: string) => { if (key === 'suggestion_update') { this.updateAllSuggestions(); } }); } private async updateAllSuggestions(): Promise<void> { const suggestions = await this.suggestionService.fetchSuggestions(); // 更新UI或通知卡片刷新 AppStorage.setOrCreate('suggestionList', suggestions); }}步骤4:应用内调用与数据同步// 在应用页面中调用建议服务import { SuggestionService } from '../services/SuggestionService'; @Entry@Componentstruct HomePage { private suggestionService: SuggestionService = new SuggestionService(getContext(this)); onPageShow(): void { this.loadSuggestions(); } private async loadSuggestions(): Promise<void> { const suggestions = await this.suggestionService.fetchSuggestions(); AppStorage.setOrCreate('suggestionList', suggestions); } build() { Column() { // 展示建议列表 ForEach(AppStorage.get('suggestionList') || [], (item: SuggestionItem) => { SmartSuggestionCard({ suggestionType: item.type, title: item.title, content: item.content, icon: item.icon, actionUrl: item.actionUrl, time: item.time }) } ) } }} 1.5 总结问题与痛点:在ArkTs中实现智能建议功能缺乏统一组件与数据流支持,开发重复度高、交互体验不连贯技术总结:通过封装通用建议卡片组件、构建建议生成服务、建立标准化通信机制,实现了一套可复用的智能建议框架。 效果总结:开发者只需关注具体建议内容与业务逻辑,无需重复实现UI与通信层,显著提升开发效率与用户体验一致性。支持动态更新、多场景适配,易于扩展新的建议类型。
-
其实有指导,提交代码时录入信息的格式为“fix #工作项编号 本次提交的注释信息但是提交后工作项状态就变成了已解决请问,有没有既能关联工作项,但又不改变工作项的相关的提交录入信息的格式??
-
首次使用华为云CodeArts时,开发者们总会遇到一些问题,小编针对大家遇到的问题做了分类总结,比如标准页面的表格数据问题、标准页面的表格数据问题、如何在标准页面的事件里面通过JS代码,获得下拉框选择的值?、标准页面的表格数据问题。憋着急!下面小编就来为大家一一解答遇到这几类问题时该如何快速解决,一步解决大家的困扰。华为云CodeArts系列产品参考手册:1、CodeArts:软件开发平台(CodeArts)官方手册:https://support.huaweicloud.com/devcloud/index.html软件开发平台(CodeArts)相关文章:https://bbs.huaweicloud.com/forum/thread-59032-1-1.html产品官方页面:https://devcloud.cn-north-4.huaweicloud.com/home2、CodeArts项目管理:项目管理(ProjectMan)官方手册:https://support.huaweicloud.com/projectman/index.html项目管理(ProjectMan)更新预览:https://support.huaweicloud.com/wtsnew-projectman/index.html产品官方页面:https://www.huaweicloud.com/product/projectman.html3、低代码平台Astro:应用魔方官方手册:https://support.huaweicloud.com/qs-appcube/appcube_02_0110.html操作指导:https://support.huaweicloud.com/appcube_video/index.html产品官方页面:https://appcube.cn-north-4.huaweicloud.com/studio/index.html#/projects/零代码官方手册:https://support.huaweicloud.com/usermanual-appcube/appcube_05_1404.html问题汇总:(以↓问题都是由官方人员解答后的文章链接)1月:C /C++项目编译失败 cid:link_0[Bug]打开过卓易通就打不开CodeArts IDE的内置终端 cid:link_1鸿蒙PC 使用的CodeArts IDE内置Python 无法安装pillow 为什么?cid:link_2当前Node.js版本(22.7.0)低于Vite要求的最低兼容版本(22.12+)如何在鸿蒙PC的CodeArts IDE升级node.js版本cid:link_3鸿蒙PC的CodeArts无法安装aiohttp cid:link_4鸿蒙PC的CodeArts IDE无法安装sklearncid:link_5鸿蒙PC的CodeArts IDE使用matplotlib库无法显示图形cid:link_6什么时候能把鸿蒙版CodeArtsIDE的图标先美化一下,放在桌面上跟其它系统图标显得格格不入 cid:link_7codeArts1.0.10 pnpm安装 无rename权限?是需要等系统升级129吗?cid:link_8无法使用和运行python和jupyter notebook cid:link_9无法与PyCharm 下的Python环境集成 cid:link_10偶发性回答不出来cid:link_11
-
为什么添加工时不是添加到处理人或者开发人员,而是添加到我这个操作人员头上了,不能修改吗
-
首次使用华为云CodeArts时,开发者们总会遇到一些问题,小编针对大家遇到的问题做了分类总结,比如标准页面的表格数据问题、标准页面的表格数据问题、如何在标准页面的事件里面通过JS代码,获得下拉框选择的值?、标准页面的表格数据问题。憋着急!下面小编就来为大家一一解答遇到这几类问题时该如何快速解决,一步解决大家的困扰。华为云CodeArts系列产品参考手册:1、CodeArts:软件开发平台(CodeArts)官方手册:https://support.huaweicloud.com/devcloud/index.html软件开发平台(CodeArts)相关文章:https://bbs.huaweicloud.com/forum/thread-59032-1-1.html产品官方页面:https://devcloud.cn-north-4.huaweicloud.com/home2、CodeArts项目管理:项目管理(ProjectMan)官方手册:https://support.huaweicloud.com/projectman/index.html项目管理(ProjectMan)更新预览:https://support.huaweicloud.com/wtsnew-projectman/index.html产品官方页面:https://www.huaweicloud.com/product/projectman.html3、低代码平台Astro:应用魔方官方手册:https://support.huaweicloud.com/qs-appcube/appcube_02_0110.html操作指导:https://support.huaweicloud.com/appcube_video/index.html产品官方页面:https://appcube.cn-north-4.huaweicloud.com/studio/index.html#/projects/零代码官方手册:https://support.huaweicloud.com/usermanual-appcube/appcube_05_1404.html问题汇总:(以↓问题都是由官方人员解答后的文章链接)7月:如何修改codearts.smartassist-java-ls的位置_CodeArts IDE_华为云论坛操作暂不可用:工程正在建立索引中,请稍后再试_CodeArts IDE_华为云论坛CodeArts能否配置租户域名?_CodeArts_华为云论坛CodeArts IDE 什么时候支持svn_CodeArts IDE_华为云论坛git项目代码仓库迁移,pre-receive hook declined, 没有配置master分支保护_代码托管_华为云论坛鸿蒙系统笔记本安装CodeArts IDE目前不支持Python安装依赖吗_CodeArts IDE_华为云论坛不知CodeArts IDE的C++怎么用图形界面编写程序_CodeArts_华为云论坛maven构建时希望能参考一下idea的构建_CodeArts IDE_华为云论坛主机集群添加主机连通性测试失败,但 SSH 连接已经成功_部署_华为云论坛8月:CodeArts for cpp调试失败cid:link_17使用JavaScript工程时无法格式化,看控制台输出,提示Prettier Eslint报错cid:link_18使用JavaScript工程时无法格式化,看控制台输出报错cid:link_19鸿蒙操作系统笔记本 使用 code art ide 时,安装python包时报错,无法自动识别pip,使用python -m pip install --user 安装时报错cid:link_20 鸿蒙版如何安装vsix插件?cid:link_21java 项目打开 一直在 Reading **** pom.xml文件 不见任何动静cid:link_22建议新增Vue框架、React框架工程等,适用于前端开发人员cid:link_23 npm 全局安装 pnpm 如何解决??? cid:link_24Huawei Cloud EulerOs镜像要怎么样获取呢 cid:link_25应用介绍表述太不清晰了cid:link_26 9月:希望在文件目录里加一个将文件夹另存为工作区的选项, vscode就有这个选项, cid:link_27为什么必须基于测试计划,进行用例编写和执行?cid:link_28为啥没有测试方案的环节?使用测试设计替换了么 cid:link_29使用go get 拉取华为git仓库中的代码报401cid:link_5CodeArts可以免费试用现网拨测的功能吗? cid:link_30如何设置能看到平台的运行日志cid:link_3110月:鸿蒙系统中,使用 CodeArts 安装 npm 依赖失败cid:link_32CodeArts IDE是可以一直免费使用吗cid:link_6CodeArts怎么自己选择需要运行的函数cid:link_33【求助】Astro适合做一个简易的个人博客吗?https://bbs.huaweicloud.com/forum/thread-0237195379520607235-1-1.html11月:我发现一些CodeArts IDE for Java 的功能bug,请问在哪里提交issue?_CodeArts IDE_华为云论坛 如何安装SmartAssist Java 插件_CodeArts IDE_华为云论坛 CodeArtsIDE什么时候支持vue cli 以及其他 node modules 脚本?_CodeArts IDE_华为云论坛 鸿蒙版CodeArts多久能支持svn和maven_CodeArts IDE_华为云论坛 跑JAVA代码时候发现JFrame这个图形化的类没办法使用_CodeArts IDE_华为云论坛 关于IDE的Tomcat Server配置_CodeArts IDE_华为云论坛12月: 鸿蒙电脑版的软件,不能正常运行C和C++程序cid:link_37鸿蒙pc版codearts终端窗口启动失败cid:link_10构造任务-HarmonyOS构建 API版本过低 cid:link_38如何增加openJDK 21 环境cid:link_11鸿蒙6.0 codeArts 支持nodejs版本控制工具 cid:link_12
-
在数字化转型浪潮下,企业对软件交付速度与质量的要求日益严苛。传统“开发-测试-运维”割裂的模式已难以支撑敏捷迭代与快速响应市场的需求。如何构建一条稳定、高效、可追溯、安全合规的自动化交付流水线,成为企业提升研发效能的关键突破口。华为云 CodeArts Pipeline(原 CloudPipeline)作为一站式 DevOps 工具链的核心组件,正帮助众多企业实现从代码提交到生产上线的端到端自动化,真正践行“一次构建,随处部署”的现代软件工程理念。本文将结合真实场景,详解如何基于 华为云 CodeArts Pipeline 打造高可用、高安全的企业级 CI/CD 流水线,并释放其在降本增效、质量保障和合规治理方面的商业价值。一、痛点驱动:为什么企业需要现代化流水线?某金融客户在引入 CodeArts 前面临三大挑战:交付周期长:人工打包、部署耗时 2–3 天,无法满足日更需求;环境不一致:“在我机器上能跑”成为常态,测试通过率不足 70%;安全合规难:代码扫描、镜像漏洞检测依赖人工,存在审计风险。这些问题直接导致客户满意度下降、运维成本攀升、创新速度受阻。二、解决方案:CodeArts Pipeline 的核心能力华为云 CodeArts Pipeline 提供 可视化编排、多环境支持、安全内嵌、弹性资源 四大核心能力,为企业构建“智能、可信、高效”的交付引擎。✅ 1. 可视化流水线编排,降低使用门槛拖拽式界面定义构建、测试、部署阶段;内置 50+ 标准插件(Maven、Docker、K8s、OBS 等),开箱即用;支持 YAML 模式,满足高级用户定制需求。效果:非运维人员也可自主维护流水线,研发效率提升 40%。✅ 2. 多环境统一管理,确保一致性支持 开发 → 测试 → 预发 → 生产 多环境流水线;自动注入环境变量,避免配置硬编码;与 CCE(云容器引擎)、ECS 无缝集成,一键部署。效果:环境差异导致的故障下降 90%,上线成功率提升至 99.5%。✅ 3. 安全左移,内嵌质量门禁代码阶段:集成 CodeArts Check,自动扫描代码规范与安全漏洞;构建阶段:调用 SWR 镜像仓库,自动触发 CVE 漏洞检测;部署前:设置质量门禁(如单元测试覆盖率 ≥ 80%),不达标则阻断发布。效果:高危漏洞修复周期从 7 天缩短至 1 小时,满足等保 2.0 要求。✅ 4. 弹性资源调度,按需计费构建任务运行在 CodeArts Hosted Agent(托管节点),无需自建 Jenkins;支持私有化部署(Private Agent),满足数据不出域需求;按实际使用分钟计费,资源利用率提升 60%。三、实践案例:某银行核心系统 DevOps 落地场景:微服务应用每日自动化交付流水线设计:1stages:2 - name: 代码检查3 steps:4 - codearts-check: { quality-profile: "金融行业标准" }5 - name: 构建与单元测试6 steps:7 - maven-build8 - junit-test9 - name: 镜像构建与安全扫描10 steps:11 - docker-build → 推送至 SWR12 - swr-vuln-scan → 阻断高危镜像13 - name: 自动部署(测试环境)14 steps:15 - cce-deploy: { cluster: "test-cluster" }16 - name: 人工审批 + 生产部署17 steps:18 - manual-approval19 - cce-deploy: { cluster: "prod-cluster" }成果:交付周期从 3天 → 2小时;年度运维人力成本节省 200万元+;通过银保监会 IT 治理审计。四、为什么选择华为云 CodeArts?维度传统方案(如 Jenkins)华为云 CodeArts Pipeline部署复杂度需自建、维护、扩容全托管,开箱即用安全合规插件分散,策略难统一内置金融/政务合规模板国产化支持依赖社区插件,适配弱全栈信创兼容(鲲鹏、昇腾、欧拉)成本服务器+人力隐性成本高按需付费,无闲置浪费CodeArts 不仅是工具,更是华为 30 年研发经验的沉淀。五、结语:DevOps 是手段,业务价值才是目标在“软件定义一切”的时代,交付速度就是竞争力。华为云 CodeArts Pipeline 以工程化思维+平台化能力,帮助企业将 DevOps 从“技术理想”变为“商业现实”。无论是互联网企业追求极致敏捷,还是传统行业推进数字化转型,CodeArts 都能提供安全、可靠、高效的交付底座,让每一次代码提交,都离业务成功更近一步。
-
首次使用华为云CodeArts时,开发者们总会遇到一些问题,小编针对大家遇到的问题做了分类总结,比如标准页面的表格数据问题、标准页面的表格数据问题、如何在标准页面的事件里面通过JS代码,获得下拉框选择的值?、标准页面的表格数据问题。憋着急!下面小编就来为大家一一解答遇到这几类问题时该如何快速解决,一步解决大家的困扰。华为云CodeArts系列产品参考手册:1、CodeArts:软件开发平台(CodeArts)官方手册:https://support.huaweicloud.com/devcloud/index.html软件开发平台(CodeArts)相关文章:https://bbs.huaweicloud.com/forum/thread-59032-1-1.html产品官方页面:https://devcloud.cn-north-4.huaweicloud.com/home2、CodeArts项目管理:项目管理(ProjectMan)官方手册:https://support.huaweicloud.com/projectman/index.html项目管理(ProjectMan)更新预览:https://support.huaweicloud.com/wtsnew-projectman/index.html产品官方页面:https://www.huaweicloud.com/product/projectman.html3、低代码平台Astro:应用魔方官方手册:https://support.huaweicloud.com/qs-appcube/appcube_02_0110.html操作指导:https://support.huaweicloud.com/appcube_video/index.html产品官方页面:https://appcube.cn-north-4.huaweicloud.com/studio/index.html#/projects/零代码官方手册:https://support.huaweicloud.com/usermanual-appcube/appcube_05_1404.html问题汇总:(以↓问题都是由官方人员解答后的文章链接)7月:如何修改codearts.smartassist-java-ls的位置_CodeArts IDE_华为云论坛操作暂不可用:工程正在建立索引中,请稍后再试_CodeArts IDE_华为云论坛CodeArts能否配置租户域名?_CodeArts_华为云论坛CodeArts IDE 什么时候支持svn_CodeArts IDE_华为云论坛git项目代码仓库迁移,pre-receive hook declined, 没有配置master分支保护_代码托管_华为云论坛鸿蒙系统笔记本安装CodeArts IDE目前不支持Python安装依赖吗_CodeArts IDE_华为云论坛不知CodeArts IDE的C++怎么用图形界面编写程序_CodeArts_华为云论坛maven构建时希望能参考一下idea的构建_CodeArts IDE_华为云论坛主机集群添加主机连通性测试失败,但 SSH 连接已经成功_部署_华为云论坛8月:CodeArts for cpp调试失败cid:link_14使用JavaScript工程时无法格式化,看控制台输出,提示Prettier Eslint报错cid:link_15使用JavaScript工程时无法格式化,看控制台输出报错cid:link_16鸿蒙操作系统笔记本 使用 code art ide 时,安装python包时报错,无法自动识别pip,使用python -m pip install --user 安装时报错cid:link_17 鸿蒙版如何安装vsix插件?cid:link_18java 项目打开 一直在 Reading **** pom.xml文件 不见任何动静cid:link_19建议新增Vue框架、React框架工程等,适用于前端开发人员cid:link_20 npm 全局安装 pnpm 如何解决??? cid:link_21Huawei Cloud EulerOs镜像要怎么样获取呢 cid:link_22应用介绍表述太不清晰了cid:link_23 9月:希望在文件目录里加一个将文件夹另存为工作区的选项, vscode就有这个选项, cid:link_24为什么必须基于测试计划,进行用例编写和执行?cid:link_25为啥没有测试方案的环节?使用测试设计替换了么 cid:link_26使用go get 拉取华为git仓库中的代码报401cid:link_5CodeArts可以免费试用现网拨测的功能吗? cid:link_27如何设置能看到平台的运行日志cid:link_2810月:鸿蒙系统中,使用 CodeArts 安装 npm 依赖失败cid:link_29CodeArts IDE是可以一直免费使用吗cid:link_6CodeArts怎么自己选择需要运行的函数cid:link_30【求助】Astro适合做一个简易的个人博客吗?https://bbs.huaweicloud.com/forum/thread-0237195379520607235-1-1.html11月:我发现一些CodeArts IDE for Java 的功能bug,请问在哪里提交issue?_CodeArts IDE_华为云论坛 如何安装SmartAssist Java 插件_CodeArts IDE_华为云论坛 CodeArtsIDE什么时候支持vue cli 以及其他 node modules 脚本?_CodeArts IDE_华为云论坛 鸿蒙版CodeArts多久能支持svn和maven_CodeArts IDE_华为云论坛 跑JAVA代码时候发现JFrame这个图形化的类没办法使用_CodeArts IDE_华为云论坛 关于IDE的Tomcat Server配置_CodeArts IDE_华为云论坛
-
首次使用华为云CodeArts时,开发者们总会遇到一些问题,小编针对大家遇到的问题做了分类总结,比如标准页面的表格数据问题、标准页面的表格数据问题、如何在标准页面的事件里面通过JS代码,获得下拉框选择的值?、标准页面的表格数据问题。憋着急!下面小编就来为大家一一解答遇到这几类问题时该如何快速解决,一步解决大家的困扰。华为云CodeArts系列产品参考手册:1、CodeArts:软件开发平台(CodeArts)官方手册:https://support.huaweicloud.com/devcloud/index.html软件开发平台(CodeArts)相关文章:https://bbs.huaweicloud.com/forum/thread-59032-1-1.html产品官方页面:https://devcloud.cn-north-4.huaweicloud.com/home2、CodeArts项目管理:项目管理(ProjectMan)官方手册:https://support.huaweicloud.com/projectman/index.html项目管理(ProjectMan)更新预览:https://support.huaweicloud.com/wtsnew-projectman/index.html产品官方页面:https://www.huaweicloud.com/product/projectman.html3、低代码平台Astro:应用魔方官方手册:https://support.huaweicloud.com/qs-appcube/appcube_02_0110.html操作指导:https://support.huaweicloud.com/appcube_video/index.html产品官方页面:https://appcube.cn-north-4.huaweicloud.com/studio/index.html#/projects/零代码官方手册:https://support.huaweicloud.com/usermanual-appcube/appcube_05_1404.html问题汇总:(以↓问题都是由官方人员解答后的文章链接)7月:如何修改codearts.smartassist-java-ls的位置_CodeArts IDE_华为云论坛操作暂不可用:工程正在建立索引中,请稍后再试_CodeArts IDE_华为云论坛CodeArts能否配置租户域名?_CodeArts_华为云论坛CodeArts IDE 什么时候支持svn_CodeArts IDE_华为云论坛git项目代码仓库迁移,pre-receive hook declined, 没有配置master分支保护_代码托管_华为云论坛鸿蒙系统笔记本安装CodeArts IDE目前不支持Python安装依赖吗_CodeArts IDE_华为云论坛不知CodeArts IDE的C++怎么用图形界面编写程序_CodeArts_华为云论坛maven构建时希望能参考一下idea的构建_CodeArts IDE_华为云论坛主机集群添加主机连通性测试失败,但 SSH 连接已经成功_部署_华为云论坛8月:CodeArts for cpp调试失败cid:link_11使用JavaScript工程时无法格式化,看控制台输出,提示Prettier Eslint报错cid:link_12使用JavaScript工程时无法格式化,看控制台输出报错cid:link_13鸿蒙操作系统笔记本 使用 code art ide 时,安装python包时报错,无法自动识别pip,使用python -m pip install --user 安装时报错cid:link_14 鸿蒙版如何安装vsix插件?cid:link_15java 项目打开 一直在 Reading **** pom.xml文件 不见任何动静cid:link_16建议新增Vue框架、React框架工程等,适用于前端开发人员cid:link_17 npm 全局安装 pnpm 如何解决??? cid:link_18Huawei Cloud EulerOs镜像要怎么样获取呢 cid:link_19应用介绍表述太不清晰了cid:link_20 9月:希望在文件目录里加一个将文件夹另存为工作区的选项, vscode就有这个选项, cid:link_21为什么必须基于测试计划,进行用例编写和执行?cid:link_22为啥没有测试方案的环节?使用测试设计替换了么 cid:link_23使用go get 拉取华为git仓库中的代码报401cid:link_5CodeArts可以免费试用现网拨测的功能吗? cid:link_24如何设置能看到平台的运行日志cid:link_2510月:鸿蒙系统中,使用 CodeArts 安装 npm 依赖失败cid:link_26CodeArts IDE是可以一直免费使用吗cid:link_6CodeArts怎么自己选择需要运行的函数cid:link_27【求助】Astro适合做一个简易的个人博客吗?https://bbs.huaweicloud.com/forum/thread-0237195379520607235-1-1.html
-
首次使用华为云CodeArts时,开发者们总会遇到一些问题,小编针对大家遇到的问题做了分类总结,比如标准页面的表格数据问题、标准页面的表格数据问题、如何在标准页面的事件里面通过JS代码,获得下拉框选择的值?、标准页面的表格数据问题。憋着急!下面小编就来为大家一一解答遇到这几类问题时该如何快速解决,一步解决大家的困扰。华为云CodeArts系列产品参考手册:1、CodeArts:软件开发平台(CodeArts)官方手册:https://support.huaweicloud.com/devcloud/index.html软件开发平台(CodeArts)相关文章:https://bbs.huaweicloud.com/forum/thread-59032-1-1.html产品官方页面:https://devcloud.cn-north-4.huaweicloud.com/home2、CodeArts项目管理:项目管理(ProjectMan)官方手册:https://support.huaweicloud.com/projectman/index.html项目管理(ProjectMan)更新预览:https://support.huaweicloud.com/wtsnew-projectman/index.html产品官方页面:https://www.huaweicloud.com/product/projectman.html3、低代码平台Astro:应用魔方官方手册:https://support.huaweicloud.com/qs-appcube/appcube_02_0110.html操作指导:https://support.huaweicloud.com/appcube_video/index.html产品官方页面:https://appcube.cn-north-4.huaweicloud.com/studio/index.html#/projects/零代码官方手册:https://support.huaweicloud.com/usermanual-appcube/appcube_05_1404.html问题汇总:(以↓问题都是由官方人员解答后的文章链接)7月:如何修改codearts.smartassist-java-ls的位置_CodeArts IDE_华为云论坛操作暂不可用:工程正在建立索引中,请稍后再试_CodeArts IDE_华为云论坛CodeArts能否配置租户域名?_CodeArts_华为云论坛CodeArts IDE 什么时候支持svn_CodeArts IDE_华为云论坛git项目代码仓库迁移,pre-receive hook declined, 没有配置master分支保护_代码托管_华为云论坛鸿蒙系统笔记本安装CodeArts IDE目前不支持Python安装依赖吗_CodeArts IDE_华为云论坛不知CodeArts IDE的C++怎么用图形界面编写程序_CodeArts_华为云论坛maven构建时希望能参考一下idea的构建_CodeArts IDE_华为云论坛主机集群添加主机连通性测试失败,但 SSH 连接已经成功_部署_华为云论坛8月:CodeArts for cpp调试失败cid:link_9使用JavaScript工程时无法格式化,看控制台输出,提示Prettier Eslint报错cid:link_10使用JavaScript工程时无法格式化,看控制台输出报错cid:link_11鸿蒙操作系统笔记本 使用 code art ide 时,安装python包时报错,无法自动识别pip,使用python -m pip install --user 安装时报错cid:link_12 鸿蒙版如何安装vsix插件?cid:link_13java 项目打开 一直在 Reading **** pom.xml文件 不见任何动静cid:link_14建议新增Vue框架、React框架工程等,适用于前端开发人员cid:link_15 npm 全局安装 pnpm 如何解决??? cid:link_16Huawei Cloud EulerOs镜像要怎么样获取呢 cid:link_17应用介绍表述太不清晰了cid:link_18
上滑加载中
推荐直播
-
Skill 构建 × 智能创作:基于华为云码道的 AI 内容生产提效方案2026/03/25 周三 19:00-20:00
余伟,华为云软件研发工程师/万邵业(万少),华为云HCDE开发者专家
本次直播带来两大实战:华为云码道 Skill-Creator 手把手搭建专属知识库 Skill;如何用码道提效 OpenClaw 小说文本,打造从大纲到成稿的 AI 原创小说全链路。技术干货 + OPC创作思路,一次讲透!
回顾中 -
码道新技能,AI 新生产力——从自动视频生成到开源项目解析2026/04/08 周三 19:00-21:00
童得力-华为云开发者生态运营总监/何文强-无人机企业AI提效负责人
本次华为云码道 Skill 实战活动,聚焦两大 AI 开发场景:通过实战教学,带你打造 AI 编程自动生成视频 Skill,并实现对 GitHub 热门开源项目的智能知识抽取,手把手掌握 Skill 开发全流程,用 AI 提升研发效率与内容生产力。
回顾中 -
华为云码道:零代码股票智能决策平台全功能实战2026/04/18 周六 10:00-12:00
秦拳德-中软国际教育卓越研究院研究员、华为云金牌讲师、云原生技术专家
利用Tushare接口获取实时行情数据,采用Transformer算法进行时序预测与涨跌分析,并集成DeepSeek API提供智能解读。同时,项目深度结合华为云CodeArts(码道)的代码智能体能力,实现代码一键推送至云端代码仓库,建立起高效、可协作的团队开发新范式。开发者可快速上手,从零打造功能完整的个股筛选、智能分析与风险管控产品。
回顾中
热门标签