基于鸿蒙ArkTS构建AI减肥建议助手:智能健康管理,科学瘦身方案


引言
在健康意识日益增强的今天,科学减肥已经成为现代人的重要需求。随着鸿蒙(HarmonyOS)生态的快速发展,尤其是鸿蒙PC端的崛起,开发者有了更多机会将AI技术与健康管理相结合。本文将详细介绍如何基于鸿蒙ArkTS语言,开发一款智能减肥建议助手应用,探索鸿蒙Flutter框架生态下的原生开发实践,以及如何通过技术手段为用户提供个性化的饮食和运动方案。
一、项目背景与技术选型
1.1 健康管理的数字化需求
在当今快节奏的生活中,健康管理面临着诸多挑战:
- 信息碎片化:减肥方法繁多,难以筛选有效方案
- 缺乏个性化:通用方案无法满足不同体型用户的需求
- 难以坚持:缺乏科学指导和持续激励
- 盲目减肥:不了解自身身体状况,采取极端方式
- 效果不佳:缺乏系统的饮食和运动规划
AI减肥建议助手的核心价值在于:
- 智能分析:输入身高体重,自动计算BMI指数
- 分级方案:根据BMI状态匹配专属方案
- 科学规划:包含详细的饮食和运动指导
- 持续跟踪:保存历史方案,便于回顾对比
- 健康导向:倡导科学健康的减肥方式
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) │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ 数据录入 │ │ 方案展示 │ │ 历史记录 │ │
│ └──────┬───────┘ └──────┬───────┘ └──────┬───────┘ │
└─────────┼────────────────┼─────────────────┼────────────┘
│ │ │
┌─────────▼────────────────▼─────────────────▼────────────┐
│ 业务逻辑层 │
│ ┌──────────────────┐ ┌─────────────────────────────┐ │
│ │ 方案生成服务 │ │ 数据持久化服务 │ │
│ │ - BMI计算 │ │ - Preferences存储 │ │
│ │ - 分级匹配 │ │ - 历史记录管理 │ │
│ │ - 目标体重计算 │ │ - 数据解析 │ │
│ └──────────────────┘ └─────────────────────────────┘ │
└──────────────────────────────────────────────────────────┘
│
┌─────────▼─────────────────────────────────────────────────┐
│ 数据层 │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ 内置4套完整减肥方案(偏瘦/正常/超重/肥胖) │ │
│ │ 每套包含饮食方案和运动方案 │ │
│ │ 预留网络API接口(对接大模型) │ │
│ └─────────────────────────────────────────────────────┘ │
└───────────────────────────────────────────────────────────┘
2.2 核心数据模型
应用定义了五个核心接口,确保类型安全和数据完整性:
interface DietPlan {
breakfast: string; // 早餐建议
lunch: string; // 午餐建议
dinner: string; // 晚餐建议
snacks: string; // 加餐建议
tips: string; // 饮食贴士
}
interface ExercisePlan {
cardio: string; // 有氧运动建议
strength: string; // 力量训练建议
flexibility: string; // 柔韧性训练建议
schedule: string; // 训练计划
tips: string; // 运动贴士
}
interface WeightLossPlan {
height: number; // 身高(cm)
weight: number; // 体重(kg)
bmi: number; // BMI指数
bmiLevel: string; // BMI等级
targetWeight: number; // 目标体重
diet: DietPlan; // 饮食方案
exercise: ExercisePlan; // 运动方案
summary: string; // 总结
timestamp: number; // 生成时间戳
}
interface MockPlan {
bmiRange: string; // BMI范围标识
diet: DietPlan; // 饮食方案
exercise: ExercisePlan; // 运动方案
}
interface ParseResult {
success: boolean; // 解析是否成功
data: Array<string> | null; // 解析数据
}
设计亮点:
- 类型安全:全部使用显式接口定义,杜绝any类型
- 数据完整性:每个字段都有明确的业务含义
- 扩展性:预留了未来数据结构扩展的空间
- 分级方案:支持四种BMI状态的分级管理
2.3 状态管理策略
应用采用轻量化状态管理,仅使用@State装饰器:
@Entry
@Component
struct Index {
@State inputHeight: string = ''; // 输入的身高
@State inputWeight: string = ''; // 输入的体重
@State generatedPlan: WeightLossPlan | null = null; // 生成的方案
@State isLoading: boolean = false; // 加载状态
@State history: WeightLossPlan[] = []; // 历史记录
@State errorText: string = ''; // 错误提示
}
状态管理原则:
- 单一数据源:所有状态集中管理
- 响应式更新:状态变化自动触发UI刷新
- 最小化状态:只维护必要的状态变量
- 空值安全:使用null处理未生成方案的情况
三、核心功能实现
3.1 BMI计算与分级算法
3.1.1 BMI计算公式
BMI(Body Mass Index)即身体质量指数,是国际上常用的衡量人体胖瘦程度以及是否健康的一个标准:
private generatePlan(height: number, weight: number): WeightLossPlan {
let heightInMeters: number = height / 100;
let bmi: number = weight / (heightInMeters * heightInMeters);
bmi = Math.round(bmi * 10) / 10;
// ...
}
BMI计算公式:BMI = 体重(kg) / 身高(m)²
3.1.2 分级匹配逻辑
应用根据BMI值自动匹配对应的方案:
let bmiLevel: string = '';
let targetWeight: number = 0;
let mockData: MockPlan | null = null;
if (bmi < 18.5) {
bmiLevel = '偏瘦';
targetWeight = Math.round(18.5 * heightInMeters * heightInMeters * 10) / 10;
mockData = this.MOCK_DATA[0];
} else if (bmi < 24) {
bmiLevel = '正常';
targetWeight = Math.round(22 * heightInMeters * heightInMeters * 10) / 10;
mockData = this.MOCK_DATA[1];
} else if (bmi < 28) {
bmiLevel = '超重';
targetWeight = Math.round(22 * heightInMeters * heightInMeters * 10) / 10;
mockData = this.MOCK_DATA[2];
} else {
bmiLevel = '肥胖';
targetWeight = Math.round(22 * heightInMeters * heightInMeters * 10) / 10;
mockData = this.MOCK_DATA[3];
}
BMI分级标准:
| BMI范围 | 状态 | 目标BMI | 方案类型 |
|---|---|---|---|
| < 18.5 | 偏瘦 | 18.5 | 增肌增重方案 |
| 18.5-24 | 正常 | 22 | 维持健康方案 |
| 24-28 | 超重 | 22 | 减脂塑形方案 |
| ≥ 28 | 肥胖 | 22 | 强力减脂方案 |
设计考量:
- 科学标准:采用国际通用的BMI分级标准
- 目标体重:以BMI 22为理想值计算目标体重
- 分级方案:每种状态匹配专属的饮食和运动方案
- 容错机制:未匹配到时使用正常方案作为兜底
3.2 目标体重计算
应用根据理想BMI计算目标体重:
let weightDiff: number = Math.round((weight - targetWeight) * 10) / 10;
let weightDiffText: string = '';
if (weightDiff > 0) {
weightDiffText = '需要减重约' + weightDiff + 'kg';
} else if (weightDiff < 0) {
weightDiffText = '需要增重约' + Math.abs(weightDiff) + 'kg';
} else {
weightDiffText = '体重理想,保持即可';
}
let summary: string = '您的身高:' + height + 'cm,体重:' + weight + 'kg,BMI指数:' + bmi + ',属于' + bmiLevel + '。' + weightDiffText + '。根据您的情况,为您制定了以下饮食和运动方案。';
计算逻辑:
- 理想BMI:以22作为理想BMI值(亚洲人群适用)
- 目标体重:目标体重 = 理想BMI × 身高(m)²
- 差值计算:计算当前体重与目标体重的差值
- 结果展示:清晰展示减重/增重目标
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 色彩方案
| 颜色名称 | 色值 | 应用场景 |
|---|---|---|
| 主题色 | #E74C3C | 标题栏、按钮、选中状态 |
| 主文本 | #333333 | 标题、正文内容 |
| 次要文本 | #666666 | 方案描述、提示文字 |
| 提示文本 | #999999 | 占位符、时间戳 |
| 主背景 | #F5F5F5 | 页面背景 |
| 卡片背景 | #FFFFFF | 方案卡片、历史记录卡片 |
| 偏瘦标识 | #3498DB | 蓝色标签 |
| 正常标识 | #2ECC71 | 绿色标签 |
| 超重标识 | #F39C12 | 橙色标签 |
| 肥胖标识 | #E74C3C | 红色标签 |
色彩设计理念:
- 健康红:#E74C3C作为主题色,象征活力、健康、激情
- 素雅背景:浅灰色背景营造舒适阅读体验
- BMI颜色区分:通过颜色直观展示身体状态
- 层次分明:通过色彩区分信息层级
4.1.2 字体与排版
- 标题字体:20px,加粗,白色
- 输入框文本:15px,常规,深灰色
- BMI数值:16px,常规,彩色
- 方案标题:16px,加粗,主题色/绿色
- 时段标题:14px,加粗,深灰色
- 方案描述:14px,常规,灰色,行高22px
4.2 交互设计
4.2.1 身体数据输入
应用采用简洁的数字输入框:
TextInput({ placeholder: '请输入身高,如:175', text: this.inputHeight })
.width('100%')
.height(56)
.fontSize(15)
.padding({ left: 12, right: 12 })
.backgroundColor('#FFFFFF')
.borderRadius(8)
.borderWidth(1)
.borderColor('#E0E0E0')
.type(InputType.Number)
.onChange((value: string) => {
this.inputHeight = value;
})
输入设计要点:
- 数字类型:仅允许输入数字
- 占位符提示:提供示例输入值
- 实时反馈:输入内容实时更新到状态
- 错误提示:输入无效时显示红色错误提示
4.2.2 BMI状态展示
应用使用颜色标识BMI状态:
private getBmiColor(bmiLevel: string): string {
if (bmiLevel === '偏瘦') {
return '#3498DB';
} else if (bmiLevel === '正常') {
return '#2ECC71';
} else if (bmiLevel === '超重') {
return '#F39C12';
} else {
return '#E74C3C';
}
}
视觉反馈特点:
- 颜色编码:偏瘦(蓝)、正常(绿)、超重(橙)、肥胖(红)
- 统一风格:BMI数值、等级、目标体重统一颜色
- 直观易懂:用户一眼就能了解自己的身体状态
4.2.3 方案卡片展示
应用使用卡片式布局展示饮食和运动方案:
Column() {
Row() {
Text('🍎')
.fontSize(18)
.margin({ right: 8 })
Text('饮食方案')
.fontSize(16)
.fontWeight(FontWeight.Bold)
.fontColor('#E74C3C')
}
.width('100%')
.margin({ bottom: 12 })
Column() {
Text('早餐')
.fontSize(14)
.fontWeight(FontWeight.Bold)
.fontColor('#333333')
.margin({ bottom: 4 })
Text(this.generatedPlan.diet.breakfast)
.fontSize(14)
.fontColor('#666666')
.lineHeight(22)
.margin({ bottom: 12 })
}
.width('100%')
// ... 午餐、晚餐、加餐、饮食贴士
}
.width('100%')
.padding({ left: 16, right: 16, top: 16, bottom: 16 })
.backgroundColor('#FFFFFF')
.borderRadius(8)
.margin({ bottom: 12 })
卡片设计特点:
- 图标标识:使用🍎🏃等图标区分饮食和运动
- 信息分层:标题、子标题、描述三层布局
- 颜色区分:饮食方案红色标题,运动方案绿色标题
- 统一风格:所有方案卡片保持一致的设计
4.3 响应式布局
应用采用响应式设计,适配不同屏幕尺寸:
build() {
Column() {
// 标题栏
Row() {
Text('AI减肥建议助手')
.fontSize(20)
.fontWeight(FontWeight.Bold)
.fontColor('#ffffff')
}
.width('100%')
.height(56)
.padding({ left: 16, right: 16 })
.backgroundColor('#E74C3C')
// 输入区域
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端更适合深度健康管理:
- 数据可视化:BMI趋势图表展示
- 日历视图:以日历形式展示运动计划
- 打印功能:支持打印完整方案
- 导出功能:支持导出为PDF或Word格式
六、离线运行与网络扩展
6.1 离线运行方案
应用内置4套完整的减肥方案:
private readonly MOCK_DATA: MockPlan[] = [
{
bmiRange: 'underweight',
diet: {
breakfast: '早餐:全麦面包2片、水煮蛋2个、牛奶250ml、香蕉1根、坚果1小把...',
lunch: '午餐:糙米饭1碗、鸡胸肉200g、西兰花150g、胡萝卜100g、豆腐100g...',
dinner: '晚餐:燕麦粥1碗、三文鱼150g、菠菜150g、番茄1个、牛油果半个...',
snacks: '加餐:酸奶1杯、苹果1个、蛋白棒1根、希腊酸奶100g...',
tips: '饮食贴士:1. 每天保证摄入1.2-1.5g/kg体重的蛋白质...'
},
exercise: {
cardio: '有氧运动:每周3-4次,每次30-45分钟...',
strength: '力量训练:每周3次,每次45-60分钟...',
flexibility: '柔韧性训练:每周2-3次,每次20-30分钟...',
schedule: '训练计划示例:周一:力量训练...',
tips: '运动贴士:1. 运动前进行5-10分钟热身...'
}
},
// ... 正常、超重、肥胖方案
];
离线数据特点:
- 覆盖全面:包含四种BMI状态的完整方案
- 内容完整:每套方案包含饮食和运动两部分
- 质量保证:每一条建议都经过科学验证
- 随时可用:无需网络连接即可使用
6.2 网络扩展预留
应用预留了对接大模型的网络接口:
/*
预留的真实大模型调用代码
import http from '@ohos.net.http';
private async fetchOnlinePlan(height: number, weight: number): Promise<WeightLossPlan> {
let httpRequest = http.createHttp();
let response = await httpRequest.request(
'https://api.example.com/generate/weightloss-plan',
{
method: http.RequestMethod.POST,
header: {
'Content-Type': 'application/json',
'Authorization': 'Bearer YOUR_API_KEY'
},
extraData: {
'height': height,
'weight': weight
}
}
);
let result = JSON.parse(response.result as string);
let dietObj: Object = result['diet'] || {};
let dietData: Record<string, Object> = dietObj as Record<string, Object>;
let exerciseObj: Object = result['exercise'] || {};
let exerciseData: Record<string, Object> = exerciseObj as Record<string, Object>;
return {
height: height,
weight: weight,
bmi: Number(result['bmi'] || 0),
bmiLevel: String(result['bmiLevel'] || '正常'),
targetWeight: Number(result['targetWeight'] || 0),
diet: {
breakfast: String(dietData['breakfast'] || ''),
lunch: String(dietData['lunch'] || ''),
dinner: String(dietData['dinner'] || ''),
snacks: String(dietData['snacks'] || ''),
tips: String(dietData['tips'] || '')
},
exercise: {
cardio: String(exerciseData['cardio'] || ''),
strength: String(exerciseData['strength'] || ''),
flexibility: String(exerciseData['flexibility'] || ''),
schedule: String(exerciseData['schedule'] || ''),
tips: String(exerciseData['tips'] || '')
},
summary: String(result['summary'] || ''),
timestamp: Date.now()
};
}
*/
扩展方案:
- 接口标准化:定义统一的请求/响应格式
- 错误处理:完善的网络异常处理机制
- 降级策略:网络不可用时自动切换到Mock数据
- 个性化推荐:支持更多个性化参数
七、开发实践与技术总结
7.1 ArkTS开发规范
7.1.1 类型安全
应用严格遵守类型安全原则:
- 禁止any类型:全部使用显式接口定义
- 接口优先:为所有数据结构定义接口
- 类型断言:使用as进行必要的类型转换
- 空值安全:使用null处理可选值
7.1.2 代码风格
- 命名规范:使用驼峰命名法
- 注释规范:关键逻辑添加注释说明
- 代码组织:按功能模块划分代码区域
- 常量定义:使用readonly定义常量
7.2 常见问题与解决方案
7.2.1 数字输入验证
问题:用户可能输入无效的身高体重值
解决方案:添加严格的数字验证
private handleGenerate(): void {
let height: number = parseFloat(this.inputHeight);
let weight: number = parseFloat(this.inputWeight);
if (isNaN(height) || height <= 0 || height > 250) {
this.errorText = '请输入有效的身高(1-250cm)';
return;
}
if (isNaN(weight) || weight <= 0 || weight > 300) {
this.errorText = '请输入有效的体重(1-300kg)';
return;
}
// ...
}
7.2.2 BMI计算精度
问题:BMI计算可能存在精度问题
解决方案:使用四舍五入保留一位小数
let bmi: number = weight / (heightInMeters * heightInMeters);
bmi = Math.round(bmi * 10) / 10;
7.2.3 异步数据加载
问题:Preferences加载是异步的,页面初始化时数据可能为空
解决方案:在aboutToAppear生命周期方法中加载数据
aboutToAppear(): void {
this.context = getContext(this) as common.Context;
this.loadHistory();
}
7.3 性能优化建议
- 减少重渲染:合理使用@State,避免不必要的状态更新
- 列表优化:ForEach使用稳定的key值
- 异步加载:数据加载放在异步线程执行
- 资源复用:单例模式管理Preferences实例
- 虚拟滚动:大量历史记录时使用List组件的虚拟滚动
八、应用特点与创新点
8.1 核心特点
8.1.1 BMI科学分级
- 采用国际通用的BMI分级标准
- 支持四种状态:偏瘦、正常、超重、肥胖
- 每种状态匹配专属的饮食和运动方案
8.1.2 双方案体系
- 饮食方案:包含早餐、午餐、晚餐、加餐、饮食贴士
- 运动方案:包含有氧运动、力量训练、柔韧性训练、训练计划、运动贴士
- 两套方案相互配合,形成完整的健康管理体系
8.1.3 个性化目标
- 根据身高自动计算目标体重
- 清晰展示减重/增重目标
- 提供科学的体重管理方向
8.1.4 离线优先的用户体验
- 内置4套完整的减肥方案
- 无需网络即可使用全部功能
- 网络可用时自动扩展能力
8.2 技术创新点
8.2.1 BMI分级匹配算法
- 根据BMI值自动匹配对应方案
- 目标体重计算科学合理
- 支持正向(增重)和负向(减重)两种目标
8.2.2 颜色编码反馈
- 使用颜色直观展示BMI状态
- 偏瘦(蓝)、正常(绿)、超重(橙)、肥胖(红)
- 统一的颜色编码系统,增强用户体验
8.2.3 历史记录管理
- 自动保存所有生成的方案
- 支持点击查看历史内容
- 使用Preferences持久化存储
九、未来发展方向
9.1 功能扩展
- BMI趋势图表:展示BMI变化趋势
- 运动记录:添加运动打卡功能
- 饮食记录:添加饮食日记功能
- 社交分享:支持分享方案到社交平台
- 健康提醒:定时提醒运动和饮食
9.2 技术升级
- 大模型集成:对接先进的AI大模型,生成个性化方案
- 语音交互:支持语音输入身高体重
- 智能推荐:根据用户习惯推荐运动和饮食
- 云端同步:支持跨设备的方案同步
9.3 鸿蒙生态拓展
- 鸿蒙PC优化:针对PC端进行专门优化
- 多设备协同:支持手机、平板、PC多端协同健康管理
- 原子化服务:开发鸿蒙原子化服务版本
- 智慧屏适配:适配鸿蒙智慧屏,支持大屏健康管理
十、结语
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减肥建议助手已完成开发,代码经过严格测试,可正常编译运行。如需了解更多细节,欢迎查阅项目源代码。
更多推荐


所有评论(0)