未验证 提交 c731bd37 编写于 作者: O openharmony_ci 提交者: Gitee

!7600 新增3.2beta2 changelog,需要翻译

Merge pull request !7600 from zengyawen/master
# OpenHarmony启用应用沙箱机制-适配指导
## 验证流程
![](figures\verification-process.png)
1. 取发布版本自验证功能,如果功能正常,则适配流程结束。
2. 取版本验证发现自身应用功能异常,则进行问题定位,通过分析代码识别到问题点,通过[适配流程](#适配流程)中的方法来进行文件访问模型的适配。
3. 适配完毕之后,重新验证功能,功能正常则适配流程结束。功能依旧存在问题则重新回到第二步继续定位,直到问题解决为止。
## 适配流程
![](figures\adaptation-process.png)
1. 定位出app异常的问题点之后,识别该问题是否是app源代码访问路径出错导致的,是否是访问有效文件可以通过下一章节的[沙箱文件访问规格清单](#沙箱文件访问规格清单)自查。
2. 如果是app源码访问无效路径,则可以通过调整访问路径的策略,将原来访问/data目录从绝对路径访问方式调整为使用context接口进行访问,具体请见context接口使用说明:
https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/ability/context-userguide.md
https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis/js-apis-ability-context.md
https://gitee.com/OpenHarmony/docs/blob/master/zh-cn/application-dev/reference/apis/js-apis-Context.md
3. 如果是app调用三方模块,异常调用栈出现在三方模块中,而app源码没有使用绝对路径去访问文件,则适配过程如下:
- 通知三方模块,让其访问文件路径通过context接口进行访问而非使用绝对路径的方式。
- 如果三方模块是个公共模块,除了给appspawn孵化的进程使用之外还给native进程使用,则可以将三方模块抽象成一个服务,应用通过ipc的方式去访问服务。
## 沙箱文件访问规格清单
**应用根目录访问路径清单**
| 路径名 | 备注 |
| --------------------- | ------------------------------------------ |
| bin | 存放着各种二进制文件 |
| config | 配置目录 |
| data | 应用数据目录 |
| dev | 设备节点 |
| etc | /system/etc的软连接 |
| init | /system/bin/init的软连接 |
| lib | /system/lib的软连接 |
| mnt | 挂载目录 |
| proc | proc文件系统目录 |
| sys | sys文件系统目录 |
| sys_prod | 此目录不同设备上存在差异,部分设备无此目录 |
| system/app | 系统目录资源 |
| system/fonts | 系统文字资源 |
| system/lib | 系统库 |
| system/data | 系统目录资源 |
| system/usr | 系统目录资源 |
| system/profile | 系统目录资源 |
| system/bin | 系统程序 |
| system/etc | 系统配置 |
| vendor/lib/chipsetsdk | 芯片组件目录,目前仅挂载chipsetsdk |
**应用数据目录访问路径清单**
| 路径名 | 备注 |
| ---------------------------------- | ------------------------------------------------------------ |
| /data | 应用数据目录 |
| /data/storage | 应用数据 |
| /data/bundles | 所有应用安装目录,仅应用apl权限为BASIC及以上权限的应用可访问 |
| /data/storage/el1 | 应用el1加密级别数据目录 |
| /data/storage/el2 | 应用el2加密级别数据目录 |
| /data/storage/el1/base | 应用el1加密级别数据目录 |
| /data/storage/el1/bundles | 应用el1加密级别应用安装包目录 |
| /data/storage/el1/database | 应用el1加密级别数据库存储目录 |
| /data/storage/el2/base | 应用el2加密级别数据目录 |
| /data/storage/el2/database | 应用el2加密级别数据库存储目录 |
| /data/storage/el2/auth_groups | 应用el2加密级别无账号分布式数据融合目录 |
| /data/storage/el2/distributedfiles | 应用el2加密级别有账号分布式数据融合目录 |
启用应用沙箱之后,应用命名空间内无法再访问物理路径下数据目录的访问方式,而是只能通过context接口来访问应用的数据目录,具体访问应用数据目录的方式可以通过context接口进行访问,参考[适配流程](#适配流程)中的context接口访问链接了解更多细节。
应用的物理数据目录跟沙箱数据目录存储的是同一份应用的数据,通过bind mount技术进行关联,改动任意一处会影响另一处的数据。应用在命名空间下访问数据,只能通过沙箱路径来访问,下面列出应用的数据目录在物理路径跟沙箱路径下的对应关系。
**应用的数据目录在物理路径跟沙箱路径下的对应关系**
| 物理路径 | 沙箱路径 | 备注 |
| ------------------------------------------------------------ | ---------------------------------- | --------------------------------------- |
| /data/app/el1/bundle/public/\<PackageName>\ | /data/storage/el1/bundle | 应用安装包目录 |
| /data/app/el1/\<USERID\>/base/\<PACKAGENAME\> | /data/storage/el1/base | 应用el1级别加密数据目录 |
| /data/app/el2/\<USERID\>/base/\<PACKAGENAME\> | /data/storage/el2/base | 应用el2级别加密数据目录 |
| /data/app/el1/\<USERID\>/database/\<PACKAGENAME\> | /data/storage/el1/database | 应用el1级别加密数据库目录 |
| /data/app/el2/\<USERID\>/database/\<PACKAGENAME\> | /data/storage/el2/database | 应用el2级别加密数据库目录 |
| /mnt/hmdfs/\<USERID\>/account/merge_view/data/\<PACKAGENAME\> | /data/storage/el2/distributedfiles | 应用el2加密级别有账号分布式数据融合目录 |
| /mnt/hmdfs/\<USERID\>/non_account/merge_view/data/ | /data/storage/el2/auth_groups | 应用el2加密级别无账号分布式数据融合目录 |
| /mnt/hmdfs/ | /mnt/hmdfs/ | 分布式文件系统目录 |
> **说明:**<br>\<USERID\>代表当前的用户ID
> \<PACKAGENAME\>代表当前的应用包名
更多物理路径沙箱路径的对应关系,请访问:
https://gitee.com/OpenHarmony/startup_appspawn/blob/master/appdata-sandbox64.json
## 案例:Contacts.hap拨号场景无法触发音频问题
联系人应用沙箱整改前访问资源文件的方式如下,可以看到访问的路径是绝对路径硬编码,为/data/app/el1此类目录,而此类目录在应用沙箱中是访问受限的,所以会造成访问异常。
![](figures\example1.png)
此代码的核心是想通过fileIO接口open固定路径得到fdNumber,使用fdNumber去做接下来的文件访问。FileIO是通过路径得到fdNumber的,而现在路径访问已经被限制了,因此考虑用其他的接口去获取fdNumber即可,
查阅OpenHarmony相关开发手册得知,使用resourceManager可以获取fdNumber。
更改后的代码如下:
![](figures\example2.png)
## 规避方案
如果发现应用异常且定位没有结论,可以使用关闭进程沙箱的方式来规避问题,规避方式如下:
1. 打开OpenHarmony startup_appspawn仓的源码,找到应用沙箱配置文件,根据自己编译类型修改对应的配置代码文件。
32位修改:https://gitee.com/OpenHarmony/startup_appspawn/blob/master/appdata-sandbox.json
64位修改:https://gitee.com/OpenHarmony/startup_appspawn/blob/master/appdata-sandbox.json
2. 在json中文件找到camera的配置,在下方参照camera的配置新建一条自身应用的配置,将包名改为自身应用报名,其他项保持跟camera一致即可,OFF字段代表关闭进程沙箱。
![](figures\example3.png)
\ No newline at end of file
# 3.2 beta2相对3.2 beta1变更详细说明
## 启用应用沙箱机制
基于namespace机制强化OpenHarmony应用数据安全,建立应用沙盒机制,增加目录可见性数据访问防线,减少了应用数据和用户隐私信息泄露,建立了更加严格安全的应用沙盒隔离能力。
同时也解决了目录混乱、文件访问方式多途径造成的文件管理的垃圾文件、文件混乱等体验问题和并发稳定性问题。
**变更影响**
OpenHarmony启用应用沙箱机制后,所有被appspawn进程孵化的应用访问资源会受到应用沙箱的限制。
如果应用没有适配应用沙箱的文件访问模型,则会导致应用功能异常。
应用对于/data目录下文件的访问,需要将所有硬编码路径访问的方式调整为使用context接口访问,具体请见[适配流程](application-sandbox-adaptation-guide.md#适配流程)
**关键的接口/组件变更**
OpenHarmony应用沙箱组件
**适配指导**
请参考[适配指导](application-sandbox-adaptation-guide.md)
## 增加对于自定义组件Struct的编译校验
**变更1**:自定义组件Struct的生命周期函数(比如aboutToAppear)不能使用private修饰。
**变更影响**
旧版本只有编辑器做了校验,新版本编译也加了校验报错。
**关键的接口/组件变更**
**适配指导**
当出现以下情况时,将private修饰去掉,即可通过编译。
![](figures\compile-change1-1.png)
![](figures\compile-change1-2.png)
**变更2:**自定义组件Struct的成员属性不能和内置属性方法名重名。
**变更影响**
与内置属性方法名重名的Struct的成员属性无法通过校验。
**关键的接口/组件变更**
**适配指导**
当出现以下情况时,修改属性名,使其与内置属性方法名不重名。
![](figures\compile-change2-1.png)
![](figures\compile-change2-2.png)
\ No newline at end of file
......@@ -125,7 +125,10 @@
- [资源调度](release-notes/api-change/v3.1-Release/js-apidiff-resource-scheduler_api-9-canary.md)
- [窗口管理](release-notes/api-change/v3.1-Release/js-apidiff-window_api-9-canary.md)
- [Native API差异报告](release-notes/api-change/v3.1-Release/native-apidiff-v3.1-release.md)
- 变更说明
- OpenHamrony 3.2 Beta2
- [3.2 beta2相对3.2 beta1变更详细说明](release-notes\changelog\v3.2-beta2\changelog-v3.2-beta2.md)
- [OpenHarmony启用应用沙箱机制-适配指导](release-notes\changelog\v3.2-beta2\application-sandbox-adaptation-guide.md)
- OpenHarmony三方组件
- [OpenHarmony三方组件简介](third-party-components/third-party-components-introduction.md)
- [OpenHarmony JS/TS三方组件使用指导](third-party-components/npm-third-party-guide.md)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册