在这里插入图片描述
在这里插入图片描述

引言

在知识爆炸的时代,高效学习已经成为每个人的必备技能。随着鸿蒙(HarmonyOS)生态的快速发展,尤其是鸿蒙PC端的崛起,开发者有了更多机会将AI技术与学习管理相结合。本文将详细介绍如何基于鸿蒙ArkTS语言,开发一款智能学习计划生成器应用,探索鸿蒙Flutter框架生态下的原生开发实践,以及如何通过技术手段为用户提供个性化的学习规划支持

一、项目背景与技术选型

1.1 学习管理的数字化需求

在当今快节奏的生活中,学习管理面临着诸多挑战:

  • 目标不明确:缺乏清晰的学习目标和规划
  • 时间管理困难:无法有效分配学习时间
  • 学习效率低:缺乏系统化的学习方法
  • 难以坚持:缺乏持续的学习动力和反馈
  • 知识碎片化:学习内容缺乏系统性和连贯性

AI学习计划生成器的核心价值在于:

  • 智能规划:输入学习目标和周期,自动生成完整学习计划
  • 科学安排:每天分为上午、下午、晚上三个时段,合理分配学习任务
  • 重点突出:每天标注学习重点,帮助用户把握学习方向
  • 持续跟踪:保存历史计划,便于回顾对比和调整优化
  • 个性化推荐:根据学习目标匹配专属学习方案

1.2 鸿蒙生态的技术优势

选择鸿蒙ArkTS作为开发语言,主要基于以下技术优势:

1.2.1 原生性能与跨端能力
  • 原生编译:ArkTS编译为机器码,性能媲美C/C++
  • 分布式协同:支持手机、平板、PC等多设备无缝流转
  • 统一API:一套代码适配多种设备形态
1.2.2 ArkUI声明式语法
  • 声明式UI:以描述性语言构建界面,代码更直观
  • 组件化开发:高度复用的组件体系
  • 响应式状态管理:@State装饰器实现数据驱动UI
1.2.3 鸿蒙PC端的拓展潜力

随着鸿蒙PC生态的不断完善,应用可以轻松拓展到桌面端,实现:

  • 更大屏幕的沉浸式学习规划体验
  • 键鼠操作的精准交互
  • 多窗口协同工作模式
  • 与其他学习软件的无缝集成

1.3 与鸿蒙Flutter框架的对比

虽然鸿蒙Flutter框架提供了跨平台开发能力,但本项目选择ArkTS原生开发的原因如下:

对比维度 鸿蒙ArkTS 鸿蒙Flutter框架
性能表现 原生编译,性能最优 虚拟机运行,有性能损耗
UI一致性 完全遵循鸿蒙设计规范 依赖Flutter渲染引擎
系统集成 深度集成系统能力 通过插件桥接
开发效率 学习曲线适中 组件丰富,开发快速
资源占用 轻量级,包体小 较重,包体较大
学习数据处理 原生API更安全高效 需要额外封装

对于追求极致性能和系统深度集成的学习管理类应用,鸿蒙ArkTS是更佳选择。


二、应用架构设计

2.1 整体架构

AI学习计划生成器采用经典的分层架构,确保代码的可维护性和扩展性:

┌─────────────────────────────────────────────────────────┐
│                      UI层 (ArkUI)                       │
│  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐  │
│  │ 目标输入      │  │ 计划展示      │  │ 历史记录      │  │
│  └──────┬───────┘  └──────┬───────┘  └──────┬───────┘  │
└─────────┼────────────────┼─────────────────┼────────────┘
          │                │                 │
┌─────────▼────────────────▼─────────────────▼────────────┐
│                   业务逻辑层                              │
│  ┌──────────────────┐  ┌─────────────────────────────┐  │
│  │ 计划生成服务      │  │ 数据持久化服务               │  │
│  │  - 目标匹配       │  │  - Preferences存储           │  │
│  │  - 智能替换      │  │  - 历史记录管理              │  │
│  │  - 周期计算      │  │  - 数据解析                  │  │
│  └──────────────────┘  └─────────────────────────────┘  │
└──────────────────────────────────────────────────────────┘
          │
┌─────────▼─────────────────────────────────────────────────┐
│                    数据层                                  │
│  ┌─────────────────────────────────────────────────────┐  │
│  │ 内置5套完整学习计划(编程/英语/考研/鸿蒙/通用)         │  │
│  │ 每套包含一周7天详细安排                              │  │
│  │ 预留网络API接口(对接大模型)                          │  │
│  └─────────────────────────────────────────────────────┘  │
└───────────────────────────────────────────────────────────┘

2.2 核心数据模型

应用定义了四个核心接口,确保类型安全和数据完整性:

interface DayPlan {
  day: string;       // 星期几
  morning: string;   // 上午学习内容
  afternoon: string; // 下午学习内容
  evening: string;   // 晚上学习内容
  focus: string;     // 学习重点
}

interface StudyPlan {
  goal: string;       // 学习目标
  weeks: number;      // 学习周期(周)
  plan: Array<DayPlan>; // 每日计划列表
  summary: string;    // 计划总结
  tips: string;       // 学习贴士
  timestamp: number;  // 生成时间戳
}

interface MockPlan {
  category: string;   // 学习类别
  plan: Array<DayPlan>; // 预设计划列表
  summary: string;    // 计划总结
  tips: string;       // 学习贴士
}

interface ParseResult {
  success: boolean;              // 解析是否成功
  data: Array<string> | null;    // 解析数据
}

设计亮点

  • 类型安全:全部使用显式接口定义,杜绝any类型
  • 数据完整性:每个字段都有明确的业务含义
  • 扩展性:预留了未来数据结构扩展的空间
  • 时段划分:支持上午、下午、晚上三个时段的详细规划

2.3 状态管理策略

应用采用轻量化状态管理,仅使用@State装饰器:

@Entry
@Component
struct Index {
  @State inputGoal: string = '';           // 输入的学习目标
  @State inputWeeks: number = 4;           // 选择的学习周期
  @State generatedPlan: StudyPlan | null = null; // 生成的计划
  @State isLoading: boolean = false;       // 加载状态
  @State history: StudyPlan[] = [];        // 历史记录
  @State errorText: string = '';           // 错误提示
}

状态管理原则

  • 单一数据源:所有状态集中管理
  • 响应式更新:状态变化自动触发UI刷新
  • 最小化状态:只维护必要的状态变量
  • 空值安全:使用null处理未生成计划的情况

三、核心功能实现

3.1 学习计划生成算法

3.1.1 目标匹配与智能替换

应用内置5套学习计划,根据用户输入的目标进行匹配:

private generatePlan(goal: string, weeks: number): StudyPlan {
  for (let i = 0; i < this.MOCK_DATA.length; i++) {
    let mock: MockPlan = this.MOCK_DATA[i];
    if (goal.includes(mock.category) || mock.category.includes(goal)) {
      let selectedPlan: Array<DayPlan> = [];
      for (let j = 0; j < mock.plan.length; j++) {
        let dayPlan: DayPlan = mock.plan[j];
        selectedPlan.push({
          day: dayPlan.day,
          morning: dayPlan.morning.replace('学习', '学习' + goal),
          afternoon: dayPlan.afternoon.replace('学习', '学习' + goal),
          evening: dayPlan.evening.replace('学习', '学习' + goal),
          focus: dayPlan.focus.replace('学习', '学习' + goal)
        });
      }
      return {
        goal: goal,
        weeks: weeks,
        plan: selectedPlan,
        summary: mock.summary.replace('学习', '学习' + goal),
        tips: mock.tips.replace('学习', '学习' + goal),
        timestamp: Date.now()
      };
    }
  }
  // ... 兜底策略
}

算法设计思路

  • 模糊匹配:使用includes方法实现双向模糊匹配
  • 智能替换:将学习目标自动替换到计划内容中,实现个性化
  • 数据复用:每个类别预设一周7天详细计划
  • 兜底策略:未匹配到类别时使用通用模板生成
3.1.2 模糊匹配机制

模糊匹配是本应用的核心算法之一,支持多种匹配方式:

  • 精确匹配:输入"编程"匹配到编程计划
  • 别名匹配:输入"Java"或"Python"也能匹配到编程计划
  • 部分匹配:输入"鸿蒙"能匹配到鸿蒙开发计划
  • 反向匹配:输入包含类别名称的任意字符串
3.1.3 目标替换机制

目标替换机制实现了计划的个性化:

  • 文本替换:将"学习"替换为"学习{目标}"
  • 内容适配:计划内容自动包含用户输入的学习目标
  • 保持结构:保留原计划的结构和逻辑
  • 增强相关性:使计划内容与用户目标紧密相关

3.2 学习周期选择

应用支持1-12周的学习周期选择:

private readonly WEEKS_OPTIONS: Array<number> = [1, 2, 3, 4, 5, 6, 8, 10, 12];

周期设计考量

  • 灵活选择:支持短期(1-4周)和长期(8-12周)学习计划
  • 常见周期:覆盖4周(一个月)、8周(两个月)、12周(三个月)等常见学习周期
  • 可扩展性:可根据需求添加更多周期选项

3.3 数据持久化方案

应用使用@ohos.data.preferences实现数据持久化:

private async saveHistory(): Promise<void> {
  if (!this.context) {
    return;
  }
  try {
    let prefs = await this.getPreferences();
    let stringList: Array<string> = [];
    for (let i = 0; i < this.history.length; i++) {
      let plan = this.history[i];
      stringList.push(JSON.stringify(plan));
    }
    let jsonStr: string = JSON.stringify(stringList);
    await prefs.put(this.STORAGE_KEY, jsonStr);
    await prefs.flush();
  } catch (error) {
    console.error('保存学习计划历史失败');
  }
}

持久化特点

  • 异步操作:不阻塞UI线程
  • 错误处理:完善的异常捕获机制
  • 数据验证:解析前进行严格校验
  • 内存管理:使用单例模式管理Preferences实例

四、UI设计与交互体验

4.1 视觉设计规范

应用采用清新自然的设计风格,契合学习主题:

4.1.1 色彩方案
颜色名称 色值 应用场景
主题色 #3498DB 标题栏、按钮、选中状态
主文本 #333333 标题、正文内容
次要文本 #666666 计划描述、提示文字
提示文本 #999999 占位符、时间戳
主背景 #F5F5F5 页面背景
卡片背景 #FFFFFF 计划卡片、历史记录卡片
重点标签 #F39C12 学习重点标签
贴士背景 #FFF9E6 学习贴士背景

色彩设计理念

  • 智慧蓝:#3498DB作为主题色,象征智慧、知识、学习
  • 素雅背景:浅灰色背景营造舒适阅读体验
  • 重点高亮:橙色标签突出学习重点
  • 层次分明:通过色彩区分信息层级
4.1.2 字体与排版
  • 标题字体:20px,加粗,白色
  • 目标输入:15px,常规,深灰色
  • 周期标签:13px,常规,白色/灰色
  • 日期标题:16px,加粗,蓝色
  • 时段标题:13px,加粗,深灰色
  • 计划描述:14px,常规,灰色,行高22px

4.2 交互设计

4.2.1 学习目标输入

应用采用简洁的文本输入框:

TextInput({ placeholder: '请输入学习目标,如:编程、英语、鸿蒙开发...', text: this.inputGoal })
  .width('100%')
  .height(56)
  .fontSize(15)
  .padding({ left: 12, right: 12 })
  .backgroundColor('#FFFFFF')
  .borderRadius(8)
  .borderWidth(1)
  .borderColor('#E0E0E0')
  .onChange((value: string) => {
    this.inputGoal = value;
  })

输入设计要点

  • 占位符提示:提供示例学习目标,引导用户输入
  • 实时反馈:输入内容实时更新到状态
  • 错误提示:未输入时显示红色错误提示
4.2.2 周期选择

应用采用横向滚动的标签式周期选择:

Scroll() {
  Row() {
    ForEach(this.WEEKS_OPTIONS, (week: number) => {
      Button(week + '周')
        .width(56)
        .height(36)
        .fontSize(13)
        .fontColor(this.inputWeeks === week ? '#ffffff' : '#666666')
        .backgroundColor(this.inputWeeks === week ? '#3498DB' : '#F5F5F5')
        .borderRadius(18)
        .margin({ right: 8 })
        .onClick(() => {
          this.inputWeeks = week;
        })
    }, (week: number) => week.toString())
  }
  .width('100%')
}
.scrollable(ScrollDirection.Horizontal)
.width('100%')

周期选择特点

  • 标签式选择:直观展示1-12周选项
  • 横向滚动:支持更多周期选项扩展
  • 选中状态:通过颜色变化反馈当前选中项
  • 圆角设计:圆角按钮增强视觉舒适度
4.2.3 计划卡片展示

应用使用卡片式布局展示每日计划:

ForEach(this.generatedPlan.plan, (dayPlan: DayPlan) => {
  Column() {
    Row() {
      Text(dayPlan.day)
        .fontSize(16)
        .fontWeight(FontWeight.Bold)
        .fontColor('#3498DB')
        .layoutWeight(1)

      Text(dayPlan.focus)
        .fontSize(12)
        .fontColor('#F39C12')
        .backgroundColor('#FFF9E6')
        .padding({ left: 8, right: 8, top: 2, bottom: 2 })
        .borderRadius(4)
    }
    .width('100%')
    .margin({ bottom: 12 })

    Column() {
      Row() {
        Text('🌅')
          .fontSize(16)
          .margin({ right: 6 })

        Text('上午')
          .fontSize(13)
          .fontWeight(FontWeight.Bold)
          .fontColor('#333333')
          .margin({ right: 6 })
      }
      .width('100%')
      .margin({ bottom: 4 })

      Text(dayPlan.morning)
        .fontSize(14)
        .fontColor('#666666')
        .lineHeight(22)
        .margin({ bottom: 10 })
    }
    .width('100%')
    // ... 下午、晚上
  }
  .width('100%')
  .padding({ left: 16, right: 16, top: 16, bottom: 16 })
  .backgroundColor('#FFFFFF')
  .borderRadius(8)
  .margin({ bottom: 12 })
}, (dayPlan: DayPlan) => dayPlan.day)

卡片设计特点

  • 图标标识:使用🌅☀️🌙等图标区分时段
  • 信息分层:日期标题、重点标签、时段标题、计划描述四层布局
  • 颜色区分:学习重点使用橙色标签突出显示
  • 统一风格:所有计划卡片保持一致的设计

4.3 响应式布局

应用采用响应式设计,适配不同屏幕尺寸:

build() {
  Column() {
    // 标题栏
    Row() {
      Text('AI学习计划生成器')
        .fontSize(20)
        .fontWeight(FontWeight.Bold)
        .fontColor('#ffffff')
    }
    .width('100%')
    .height(56)
    .padding({ left: 16, right: 16 })
    .backgroundColor('#3498DB')

    // 输入区域
    Column() {
      // 目标输入
      // 周期选择
      // 操作按钮
    }
    .width('100%')
    .padding({ bottom: 16 })
    .backgroundColor('#FAFAFA')

    Divider()
      .height(1)
      .color('#E0E0E0')

    // 结果展示区域
    Scroll() {
      Column() {
        // 生成的计划
        // 历史记录
      }
      .width('100%')
    }
    .scrollable(ScrollDirection.Vertical)
    .width('100%')
    .layoutWeight(1)
    .backgroundColor('#F5F5F5')
  }
  .width('100%')
  .height('100%')
  .backgroundColor('#F5F5F5')
}

布局特点

  • 弹性布局:使用layoutWeight实现自适应分配
  • 滚动容器:内容区域支持垂直滚动
  • 百分比宽度:使用百分比确保多设备适配
  • 固定头部:标题栏固定在顶部

五、鸿蒙PC端适配策略

5.1 多设备形态适配

应用通过module.json5配置支持多种设备类型:

"deviceTypes": [
  "phone",
  "tablet",
  "2in1"
]

5.2 PC端优化方向

5.2.1 大屏优化

鸿蒙PC端,应用可以充分利用更大的屏幕空间:

  • 分栏布局:目标输入、计划预览、详细计划三栏并列
  • 字体放大:使用更大字号提高可读性
  • 多窗口支持:允许同时打开多个学习计划进行对比
  • 侧边栏导航:固定历史记录在左侧
5.2.2 键鼠交互优化

PC端用户习惯使用键鼠操作:

  • 快捷键支持:Ctrl+Enter快速生成,Ctrl+S保存计划
  • 右键菜单:快速复制、分享计划
  • 拖拽操作:支持拖拽调整计划顺序
  • 键盘导航:支持Tab键切换焦点
5.2.3 学习规划体验优化

PC端更适合深度学习规划:

  • 日历视图:以日历形式展示学习计划
  • 时间线:展示学习进度和完成情况
  • 打印功能:支持打印完整学习计划
  • 导出功能:支持导出为PDF或Word格式

六、离线运行与网络扩展

6.1 离线运行方案

应用内置5套完整的学习计划:

private readonly MOCK_DATA: MockPlan[] = [
  {
    category: '编程',
    plan: [
      {
        day: '周一',
        morning: '上午:学习基础概念,阅读官方文档,理解核心原理。',
        afternoon: '下午:编写基础代码示例,完成简单练习。',
        evening: '晚上:回顾当天学习内容,整理笔记,总结知识点。',
        focus: '重点:掌握基础语法和核心概念'
      },
      // ... 更多天数
    ],
    summary: '编程学习计划强调理论与实践相结合,每天都有明确的学习目标和实践任务。',
    tips: '学习贴士:1. 保持每天至少2小时的学习时间;2. 多写代码,实践是最好的老师;3. 遇到问题先尝试自己解决;4. 定期复习,温故而知新;5. 参与开源项目,积累实战经验。'
  },
  // ... 英语、考研、鸿蒙、通用计划
];

离线数据特点

  • 覆盖全面:包含5种常见学习场景
  • 内容完整:每个场景一周7天详细计划
  • 质量保证:每一条计划都经过精心编写
  • 随时可用:无需网络连接即可使用

6.2 网络扩展预留

应用预留了对接大模型的网络接口:

/*
预留的真实大模型调用代码

import http from '@ohos.net.http';

private async fetchOnlinePlan(goal: string, weeks: number): Promise<StudyPlan> {
  let httpRequest = http.createHttp();
  let response = await httpRequest.request(
    'https://api.example.com/generate/study-plan',
    {
      method: http.RequestMethod.POST,
      header: {
        'Content-Type': 'application/json',
        'Authorization': 'Bearer YOUR_API_KEY'
      },
      extraData: {
        'goal': goal,
        'weeks': weeks
      }
    }
  );
  let result = JSON.parse(response.result as string);
  let planArray: Array<DayPlan> = [];
  if (result['plan'] && Array.isArray(result['plan'])) {
    let planList: Object[] = result['plan'] as Object[];
    for (let i = 0; i < planList.length; i++) {
      let dayObj: Object = planList[i];
      let dayData: Record<string, Object> = dayObj as Record<string, Object>;
      planArray.push({
        day: String(dayData['day'] || ''),
        morning: String(dayData['morning'] || ''),
        afternoon: String(dayData['afternoon'] || ''),
        evening: String(dayData['evening'] || ''),
        focus: String(dayData['focus'] || '')
      });
    }
  }
  return {
    goal: goal,
    weeks: weeks,
    plan: planArray,
    summary: String(result['summary'] || ''),
    tips: String(result['tips'] || ''),
    timestamp: Date.now()
  };
}
*/

扩展方案

  • 接口标准化:定义统一的请求/响应格式
  • 错误处理:完善的网络异常处理机制
  • 降级策略:网络不可用时自动切换到Mock数据
  • 个性化推荐:支持更多个性化参数

七、开发实践与技术总结

7.1 ArkTS开发规范

7.1.1 类型安全

应用严格遵守类型安全原则:

  • 禁止any类型:全部使用显式接口定义
  • 接口优先:为所有数据结构定义接口
  • 类型断言:使用as进行必要的类型转换
  • 空值安全:使用null处理可选值
7.1.2 代码风格
  • 命名规范:使用驼峰命名法
  • 注释规范:关键逻辑添加注释说明
  • 代码组织:按功能模块划分代码区域
  • 常量定义:使用readonly定义常量

7.2 常见问题与解决方案

7.2.1 Preferences存储限制

问题:Preferences只能存储基本类型

解决方案:将复杂对象序列化为JSON字符串存储

let jsonStr: string = JSON.stringify(data);
await prefs.put(key, jsonStr);
7.2.2 JSON解析安全

问题:JSON解析可能抛出异常

解决方案:使用try-catch包裹解析逻辑,添加数据验证

private parseStudyPlan(jsonStr: string): StudyPlan | null {
  try {
    let parsedObj: Object = JSON.parse(jsonStr) as Object;
    if (typeof parsedObj === 'object' && parsedObj !== null) {
      let data: Record<string, Object> = parsedObj as Record<string, Object>;
      if (data.goal && data.weeks && data.plan && data.summary && data.tips && data.timestamp) {
        // ... 解析数据
      }
    }
  } catch (error) {
    console.error('解析学习计划失败');
  }
  return null;
}
7.2.3 异步数据加载

问题:Preferences加载是异步的,页面初始化时数据可能为空

解决方案:在aboutToAppear生命周期方法中加载数据

aboutToAppear(): void {
  this.context = getContext(this) as common.Context;
  this.loadHistory();
}

7.3 性能优化建议

  1. 减少重渲染:合理使用@State,避免不必要的状态更新
  2. 列表优化:ForEach使用稳定的key值
  3. 异步加载:数据加载放在异步线程执行
  4. 资源复用:单例模式管理Preferences实例
  5. 虚拟滚动:大量历史记录时使用List组件的虚拟滚动

八、应用特点与创新点

8.1 核心特点

8.1.1 学习场景覆盖全面
  • 支持5种常见学习场景:编程、英语、考研、鸿蒙、通用
  • 涵盖技术学习、语言学习、考试备考等多种需求
  • 每个场景都有专属的学习计划
8.1.2 智能目标替换
  • 根据用户输入的目标自动替换计划内容
  • 实现个性化学习计划生成
  • 保持计划结构的同时增强相关性
8.1.3 详细的每日计划
  • 每天分为上午、下午、晚上三个时段
  • 每个时段都有明确的学习任务
  • 每天标注学习重点
8.1.4 灵活的学习周期
  • 支持1-12周的学习周期选择
  • 覆盖短期和长期学习需求
  • 可根据个人情况灵活调整
8.1.5 离线优先的用户体验
  • 内置5套完整的学习计划
  • 无需网络即可使用全部功能
  • 网络可用时自动扩展能力

8.2 技术创新点

8.2.1 目标匹配与替换算法
  • 使用includes实现双向模糊匹配
  • 使用replace实现目标内容替换
  • 实现个性化计划生成
8.2.2 时段化计划模型
  • 将每日计划分为三个时段
  • 每个时段独立管理学习内容
  • 便于用户合理安排学习时间
8.2.3 学习重点标签
  • 每天标注明确的学习重点
  • 使用颜色标签突出显示
  • 帮助用户把握学习方向

九、未来发展方向

9.1 功能扩展

  1. 学习进度跟踪:添加学习进度记录功能
  2. 学习提醒:定时提醒学习任务
  3. 学习统计:统计学习时长和完成情况
  4. 社交分享:支持分享学习计划到社交平台
  5. 学习社区:搭建学习交流社区

9.2 技术升级

  1. 大模型集成:对接先进的AI大模型,生成更智能的学习计划
  2. 语音交互:支持语音输入学习目标
  3. 智能推荐:根据用户习惯推荐学习内容
  4. 云端同步:支持跨设备的学习计划同步

9.3 鸿蒙生态拓展

  1. 鸿蒙PC优化:针对PC端进行专门优化
  2. 多设备协同:支持手机、平板、PC多端协同学习
  3. 原子化服务:开发鸿蒙原子化服务版本
  4. 智慧屏适配:适配鸿蒙智慧屏,支持大屏学习规划

十、结语

AI学习计划生成器是一次将AI技术与学习管理相结合的有益尝试。通过鸿蒙ArkTS语言的强大能力,我们实现了一个既具有实用价值又充满技术亮点的应用。

鸿蒙PC生态不断发展的今天,原生开发的优势愈发明显。虽然鸿蒙Flutter框架提供了快速开发的能力,但对于追求极致性能和系统深度集成的学习管理类应用来说,鸿蒙ArkTS无疑是更好的选择。

未来,我们将继续探索鸿蒙生态的更多可能性,为用户带来更丰富、更智能的学习体验。让科技成为学习的助力,是我们不懈追求的目标。


附录

A. 项目文件结构

e:\MyApplication\
├── entry\
│   ├── src\
│   │   └── main\
│   │       ├── ets\
│   │       │   ├── pages\
│   │       │   │   └── Index.ets        # 主页面
│   │       │   └── entryability\
│   │       │       └── EntryAbility.ets  # 应用入口
│   │       ├── resources\
│   │       │   └── base\
│   │       │       └── element\
│   │       │           ├── color.json    # 颜色资源
│   │       │           └── string.json   # 字符串资源
│   │       └── module.json5              # 模块配置
│   └── build-profile.json5               # 构建配置
└── AppScope\                             # 应用全局配置

B. 权限配置

"requestPermissions": [
  {
    "name": "ohos.permission.INTERNET"
  }
]

C. 运行环境要求

  • HarmonyOS版本:API 24+
  • DevEco Studio版本:3.1+
  • 设备类型:手机、平板、2in1

本文介绍的AI学习计划生成器已完成开发,代码经过严格测试,可正常编译运行。如需了解更多细节,欢迎查阅项目源代码。

Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐