diff --git a/zh-cn/release-notes/changelog/v3.2-beta2/application-sandbox-adaptation-guide.md b/zh-cn/release-notes/changelog/v3.2-beta2/application-sandbox-adaptation-guide.md new file mode 100644 index 0000000000000000000000000000000000000000..f36d6fb6771768f124b4afe3c2d09f4ddd2295d0 --- /dev/null +++ b/zh-cn/release-notes/changelog/v3.2-beta2/application-sandbox-adaptation-guide.md @@ -0,0 +1,112 @@ +# 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/\\ | /data/storage/el1/bundle | 应用安装包目录 | +| /data/app/el1/\/base/\ | /data/storage/el1/base | 应用el1级别加密数据目录 | +| /data/app/el2/\/base/\ | /data/storage/el2/base | 应用el2级别加密数据目录 | +| /data/app/el1/\/database/\ | /data/storage/el1/database | 应用el1级别加密数据库目录 | +| /data/app/el2/\/database/\ | /data/storage/el2/database | 应用el2级别加密数据库目录 | +| /mnt/hmdfs/\/account/merge_view/data/\ | /data/storage/el2/distributedfiles | 应用el2加密级别有账号分布式数据融合目录 | +| /mnt/hmdfs/\/non_account/merge_view/data/ | /data/storage/el2/auth_groups | 应用el2加密级别无账号分布式数据融合目录 | +| /mnt/hmdfs/ | /mnt/hmdfs/ | 分布式文件系统目录 | + +> **说明:**
\代表当前的用户ID +> \代表当前的应用包名 + +更多物理路径沙箱路径的对应关系,请访问: +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 diff --git a/zh-cn/release-notes/changelog/v3.2-beta2/changelog-v3.2-beta2.md b/zh-cn/release-notes/changelog/v3.2-beta2/changelog-v3.2-beta2.md new file mode 100644 index 0000000000000000000000000000000000000000..1eb1557a8670a9aac9a4f5ba354b216c4d01ccb1 --- /dev/null +++ b/zh-cn/release-notes/changelog/v3.2-beta2/changelog-v3.2-beta2.md @@ -0,0 +1,58 @@ +# 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 diff --git a/zh-cn/release-notes/changelog/v3.2-beta2/figures/adaptation-process.png b/zh-cn/release-notes/changelog/v3.2-beta2/figures/adaptation-process.png new file mode 100644 index 0000000000000000000000000000000000000000..05b1892b5508c56ca029e930a6f0c1360f6a7967 Binary files /dev/null and b/zh-cn/release-notes/changelog/v3.2-beta2/figures/adaptation-process.png differ diff --git a/zh-cn/release-notes/changelog/v3.2-beta2/figures/compile-change1-1.png b/zh-cn/release-notes/changelog/v3.2-beta2/figures/compile-change1-1.png new file mode 100644 index 0000000000000000000000000000000000000000..01e3e90dd66f2aad624a5fbbf88600833442a3fc Binary files /dev/null and b/zh-cn/release-notes/changelog/v3.2-beta2/figures/compile-change1-1.png differ diff --git a/zh-cn/release-notes/changelog/v3.2-beta2/figures/compile-change1-2.png b/zh-cn/release-notes/changelog/v3.2-beta2/figures/compile-change1-2.png new file mode 100644 index 0000000000000000000000000000000000000000..3607345cc1b59633f8dc0c35ae99393525c15496 Binary files /dev/null and b/zh-cn/release-notes/changelog/v3.2-beta2/figures/compile-change1-2.png differ diff --git a/zh-cn/release-notes/changelog/v3.2-beta2/figures/compile-change2-1.png b/zh-cn/release-notes/changelog/v3.2-beta2/figures/compile-change2-1.png new file mode 100644 index 0000000000000000000000000000000000000000..22c62fb46ef2311b6ff4f040baf72938317b1ef2 Binary files /dev/null and b/zh-cn/release-notes/changelog/v3.2-beta2/figures/compile-change2-1.png differ diff --git a/zh-cn/release-notes/changelog/v3.2-beta2/figures/compile-change2-2.png b/zh-cn/release-notes/changelog/v3.2-beta2/figures/compile-change2-2.png new file mode 100644 index 0000000000000000000000000000000000000000..6ef778e4d6b361f43b5e7d8493236bda03cd9b24 Binary files /dev/null and b/zh-cn/release-notes/changelog/v3.2-beta2/figures/compile-change2-2.png differ diff --git a/zh-cn/release-notes/changelog/v3.2-beta2/figures/example1.png b/zh-cn/release-notes/changelog/v3.2-beta2/figures/example1.png new file mode 100644 index 0000000000000000000000000000000000000000..db7b455ef72cac51d6bea1be36283c1c1c269ec0 Binary files /dev/null and b/zh-cn/release-notes/changelog/v3.2-beta2/figures/example1.png differ diff --git a/zh-cn/release-notes/changelog/v3.2-beta2/figures/example2.png b/zh-cn/release-notes/changelog/v3.2-beta2/figures/example2.png new file mode 100644 index 0000000000000000000000000000000000000000..9bb60d4b1e05dcb152e15553611db0c1da4d2b33 Binary files /dev/null and b/zh-cn/release-notes/changelog/v3.2-beta2/figures/example2.png differ diff --git a/zh-cn/release-notes/changelog/v3.2-beta2/figures/example3.png b/zh-cn/release-notes/changelog/v3.2-beta2/figures/example3.png new file mode 100644 index 0000000000000000000000000000000000000000..b9923c8a00716601316b4129b143a3fad854beb7 Binary files /dev/null and b/zh-cn/release-notes/changelog/v3.2-beta2/figures/example3.png differ diff --git a/zh-cn/release-notes/changelog/v3.2-beta2/figures/verification-process.png b/zh-cn/release-notes/changelog/v3.2-beta2/figures/verification-process.png new file mode 100644 index 0000000000000000000000000000000000000000..97bb2b82243470253462271e1c7164d77d64b4dc Binary files /dev/null and b/zh-cn/release-notes/changelog/v3.2-beta2/figures/verification-process.png differ diff --git a/zh-cn/website.md b/zh-cn/website.md index 975255a04342b01bdc0fe7074f0f1972263f92f3..1edc4cf36f5c38ac154fac3af0336e2c89ab9a03 100644 --- a/zh-cn/website.md +++ b/zh-cn/website.md @@ -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)