
回复
哈喽!我是小L,那个在鸿蒙开发里「玩配置文件」的女程序员~ 你知道吗?一个应用就像一场演出,包名是「唯一门票编号」,图标是「海报」,权限是「入场许可」。今天就来聊聊鸿蒙应用配置的核心要素,看如何通过config.json
和module.json5
让应用「合规又亮眼」~
com.[公司/组织名].[应用名]
com.harmonyos.clock
、io.github.littleL.calendar
com.example.MyApp
(含大写字母)、app.clock
(无前缀)场景:主Module与HAP Module共存
// 主Module(entry)
{
"app": {
"bundleName": "com.example.main"
}
}
// 功能Module(feature)
{
"app": {
"bundleName": "com.example.feature.share" // 建议包含主包名前缀
}
}
48px
、72px
、96px
、144px
、192px
等多尺寸 - 手机/平板:使用`media_element`目录下的自适应图标
- 智能穿戴:提供圆形图标(如`1.0x`、`2.0x`倍率)
"icon": {
"src": "$media:icon", // 主图标路径
"adaptiveIcon": {
"foreground": "$media:icon_foreground", // 前景图
"background": "$color:icon_bg" // 背景色
}
}
"label": "$string:app_name"
resources/base/strings/strings.json
: ```json
{
"app_name": "我的应用",
"app_name_en": "My App"
}
```
"abilities": [
{
"name": ".MainAbility",
"label": {
"phone": "$string:app_name", // 手机端标签
"tablet": "$string:app_name_tablet" // 平板端标签
}
}
]
字段 | 作用 | 示例 |
---|---|---|
name |
显示给用户的版本号 | 1.0.0 |
code |
内部版本号(用于程序判断) | 100 |
code
与最新版本,若低于则提示升级
showUpdateDialog();
code
控制灰度范围(如code % 100 < 20
表示20%用户可见){
"deviceType": [
"phone", // 手机
"tablet", // 平板
"wearable", // 智能穿戴
"tv", // 智慧屏
"car", // 车机
"smartVision" // 智能视觉设备
]
}
场景:仅在手机和平板显示某组件
@Entry
@Component
struct MainPage {
build() {
if (DeviceType.isPhone() || DeviceType.isTablet()) {
Button('移动端专属功能');
}
}
}
类型 | 示例权限 | 申请方式 |
---|---|---|
系统权限 | ohos.permission.CAMERA |
在config.json 声明 |
敏感权限 | ohos.permission.READ_CONTACTS |
需用户动态授权 |
自定义权限 | com.example.permission.MY_PERMISSION |
自定义声明+校验 |
"reqPermissions": [
{
"name": "ohos.permission.READ_USER_STORAGE",
"reason": "$string:permission_read_storage_desc", // 权限申请理由
"usedScene": {
"ability": [".MainAbility"], // 涉及的Ability
"when": "inUse" // 使用时申请
}
}
]
## 六、完整配置文件示例:`module.json5`解析📄
```json5
{
"srcEntry": "ets/abilityStage/AppStage", // Stage模型入口
"module": {
"package": "com.example.myapp.entry", // Module包名(建议与主包名一致)
"name": ".MyApplication", // 应用类名
"deviceType": ["phone", "tablet"], // 支持设备
"abilities": [
{
"name": ".MainAbility", // Ability名称
"srcPath": "src/ets/abilities/MainAbility", // 代码路径
"icon": "$media:icon_ability", // Ability图标
"label": "$string:main_ability_label", // 标签
"launchType": "standard" // 启动模式
}
],
"reqPermissions": [
{
"name": "ohos.permission.LOCATION", // 定位权限
"usedScene": {
"ability": [".MapAbility"],
"when": "always" // 始终需要
}
}
]
},
"app": {
"bundleName": "com.example.myapp", // 应用唯一包名
"version": {
"name": "1.1.5",
"code": 115
},
"label": "$string:app_name",
"icon": "$media:app_icon"
}
}
后果:导致应用无法安装或覆盖旧版本
解决方案:
bundleName
生成工具(如反向域名生成器)原因:未提供多尺寸图标,系统自动缩放
解决方案:
Adaptive Icon
适配不同设备像素密度resources
目录下按en-US/zh-CN
、device-type
分目录存放图标风险:被应用市场拒绝上架或用户隐私投诉
最佳实践:
未来可能通过AI分析代码逻辑,自动生成所需权限列表,减少人工配置误差
支持根据时间、地点、用户习惯自动更换应用图标,例如:
{
"icon": {
"day": "$media:icon_day",
"night": "$media:icon_night"
}
}
在分布式场景中,自动同步多设备的配置参数,例如:
应用合规性 =(包名唯一性 × 权限合理性)÷ 配置冗余度