提交 0a418e8b 编写于 作者: M mamingshuai

update OpenHarmony 2.0 Canary

上级 120fcf73

要显示的变更太多。

To preserve performance only 1000 of 1000+ files are displayed.
*.tgz filter=lfs diff=lfs merge=lfs -text
*.trp filter=lfs diff=lfs merge=lfs -text
*.apk filter=lfs diff=lfs merge=lfs -text
*.jar filter=lfs diff=lfs merge=lfs -text
*.mp4 filter=lfs diff=lfs merge=lfs -text
*.zip filter=lfs diff=lfs merge=lfs -text
*.asm filter=lfs diff=lfs merge=lfs -text
*.8svn filter=lfs diff=lfs merge=lfs -text
*.9svn filter=lfs diff=lfs merge=lfs -text
*.dylib filter=lfs diff=lfs merge=lfs -text
*.exe filter=lfs diff=lfs merge=lfs -text
*.a filter=lfs diff=lfs merge=lfs -text
*.so filter=lfs diff=lfs merge=lfs -text
*.bin filter=lfs diff=lfs merge=lfs -text
*.dll filter=lfs diff=lfs merge=lfs -text
### 该问题是怎么引起的?
### 重现步骤
### 报错信息
### 相关的Issue
### 原因(目的、解决的问题等)
### 描述(做了什么,变更了什么)
### 测试用例(新增、改动、可能影响的功能)
Developer Certificate of Origin
开发者原创声明
Version 1.1
第1.1版
Copyright (C) 2004, 2006 The Linux Foundation and its contributors.
版权所有(C)2004,2006 Linux基金会及其贡献者。
1 Letterman Drive
莱特曼大道1号
Suite D4700
D4700室
San Francisco, CA, 94129
加利福尼亚州旧金山市94129
Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
任何人均可复制和分发本许可文件副本,但不得修改。
***************************************************
Developer's Certificate of Origin 1.1
开发者原创声明(第1.1版)
By making a contribution to this project, I certify that:
在向本项目提交贡献之时,本人声明:
(a) The contribution was created in whole or in part by me and I have the right to submit it under the open source license indicated in the file; or
(a) 该贡献全部或部分由本人创作,且本人有权根据当前文件中所示的开源许可证提交;或
(b) The contribution is based upon previous work that, to the best of my knowledge, is covered under an appropriate open source license and I have the right under that license to submit that work with modifications, whether created in whole or in part by me, under the same open source license (unless I am permitted to submit under a different license), as indicated in the file; or
(b) 尽本人所知,该贡献所基于的在先作品已经过适当的开源许可证授权,且根据该开源许可证,本人有权在相同开源许可证(如当前文件中所示)下提交该修改后的作品(除非本人被允许根据不同的许可证提交),不论其是否全部或部分由本人创作;或
(c) The contribution was provided directly to me by some other person who certified (a), (b) or (c) and I have not modified it.
(c) 该贡献是由作出(a)、(b) 或(c) 声明的其他人直接提供给本人,且本人未对其进行修改。
(d) I understand and agree that this project and the contribution are public and that a record of the contribution (including all personal information I submit with it, including my sign-off) is maintained indefinitely and may be redistributed consistent with this project or the open source license(s) involved.
(d) 本人理解并同意,本项目及贡献是公开的,且贡献(包括本人随附提交的全部个人信息,含本人签字)将被无限期存档,并可以与本项目或所涉开源许可证保持一致的情形下再被分发。
***************************************************
Above Chinese version of the Developer's Certificate of Origin is translated by the OpenAtom Foundation.
以上开发者原创声明中文版本由开放原子开源基金会翻译。
\ No newline at end of file
Developer Certificate of Origin
开发者原创声明
Version 1.1
第1.1版
Copyright (C) 2004, 2006 The Linux Foundation and its contributors.
版权所有(C)2004,2006 Linux基金会及其贡献者。
1 Letterman Drive
莱特曼大道1号
Suite D4700
D4700室
San Francisco, CA, 94129
加利福尼亚州旧金山市94129
Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
任何人均可复制和分发本许可文件副本,但不得修改。
***************************************************
Developer's Certificate of Origin 1.1
开发者原创声明(第1.1版)
By making a contribution to this project, I certify that:
在向本项目提交贡献之时,本人声明:
(a) The contribution was created in whole or in part by me and I have the right to submit it under the open source license indicated in the file; or
(a) 该贡献全部或部分由本人创作,且本人有权根据当前文件中所示的开源许可证提交;或
(b) The contribution is based upon previous work that, to the best of my knowledge, is covered under an appropriate open source license and I have the right under that license to submit that work with modifications, whether created in whole or in part by me, under the same open source license (unless I am permitted to submit under a different license), as indicated in the file; or
(b) 尽本人所知,该贡献所基于的在先作品已经过适当的开源许可证授权,且根据该开源许可证,本人有权在相同开源许可证(如当前文件中所示)下提交该修改后的作品(除非本人被允许根据不同的许可证提交),不论其是否全部或部分由本人创作;或
(c) The contribution was provided directly to me by some other person who certified (a), (b) or (c) and I have not modified it.
(c) 该贡献是由作出(a)、(b) 或(c) 声明的其他人直接提供给本人,且本人未对其进行修改。
(d) I understand and agree that this project and the contribution are public and that a record of the contribution (including all personal information I submit with it, including my sign-off) is maintained indefinitely and may be redistributed consistent with this project or the open source license(s) involved.
(d) 本人理解并同意,本项目及贡献是公开的,且贡献(包括本人随附提交的全部个人信息,含本人签字)将被无限期存档,并可以与本项目或所涉开源许可证保持一致的情形下再被分发。
***************************************************
Above Chinese version of the Developer's Certificate of Origin is translated by the OpenAtom Foundation.
以上开发者原创声明中文版本由开放原子开源基金会翻译。
文件模式从 100644 更改为 100755
此差异已折叠。
此差异已折叠。
# WELCOME TO OPENHARMONY
OpenHarmony is an open-source project launched by the OpenAtom Foundation and serves as an open-source, distributed operating system that is intended to address all conceivable usage scenarios. OpenHarmony is an open-source version of HarmonyOS.
HarmonyOS is a future-proof distributed operating system open to you as part of the initiatives for the all-scenario strategy. It is adaptable to mobile office, fitness and health, social communication, entertainment, and many other scenarios. Unlike any legacy operating system that runs on a standalone device, HarmonyOS is built on a distributed architecture designed based on a set of system capabilities. It is able to run on a wide range of device forms, including smartphones, wearables, tablets, PCs, smart TVs, AI speakers, head units, earphones, and AR/VR glasses.
## Motivation
Traditional OSs are limited to a specific type of device, while OpenHarmony provides distributed features that are compatible with a wide range of different devices. The first version supports devices with 128 KB to 128 MB of memory. Join us as we keep updating OpenHarmony versions.
For device developers, OpenHarmony utilizes a component-based design to tailor its features to better suit specific devices, based on each device's capabilities and service characteristics. OpenHarmony can run on devices with limited resources and wearables with hundreds of KB of memory, as well as more powerful devices, such as smart home cameras and dashcams with hundreds of MB of memory.
[中文版本](Readme-zh-cn.md)
## OpenHarmony Documentation
- [Getting Started](en/device-dev/quick-start/Readme-EN.md)
- [Source Code Acquisition/Tool Acquisition](en/device-dev/get-code/source-code-acquisition.md)
- [Kernel Usage Guidelines](en/device-dev/kernel/Readme-EN.md)
- [Driver Usage Guidelines](en/device-dev/driver/Readme-EN.md)
- [Subsystem Development Guidelines](en/device-dev/subsystems/Readme-EN.md)
- [Bundle Development Guidelines](en/device-dev/bundles/Readme-EN.md)
- [Device Development Guidelines](en/device-dev/guide/Readme-EN.md)
- [Third-Party Library Porting Guidelines](en/device-dev/porting/Readme-EN.md)
- [Privacy and Security](en/device-dev/security/Readme-EN.md)
- [Glossary](en/device-dev/glossary/glossary.md)
## Start Contributing
OpenHarmony is an open-source community and encourages everyone in the community to submit patches directly to the project. You can contribute either to the code or documentation.
- [Contributing to the Code](en/contribute/contributing-code.md)
- [Contributing to the Documentation](en/contribute/documentation-contribution.md)
For more details on how to contribute, see [Contributing Documents](en/contribute).
## Get Source Code and Tools
To download the source code and tools required for the project, click the following links:
- [Source Code Acquisition](en/device-dev/get-code/source-code-acquisition.md)
- [Tool Acquisition](en/device-dev/get-code/acquiring-tools.md)
## Where to Turn for Help
You can subscribe to the mailing list to get constant updates on new features, released road maps, and community activities. For how to subscribe to the mailing list or get any other support, see [Communication in Community](https://gitee.com/openharmony/docs/tree/master/en/contribute/communication-in-community.md).
## Code of Conduct
OpenHarmony is committed to providing a welcoming and inspiring community for all. In order to maintain a collaborative environment, we recommend you read and follow the community [Code of Conduct](https://gitee.com/openharmony/docs/blob/master/en/contribute/code-of-conduct.md).
## Contributors & Acknowledgements
A great open-source project wouldn't be possible without the hard work of many contributors. We'd like to invite anyone from around the world to participate in this exciting journey, and we're grateful for your time, passion, and efforts!
## Release
In order to provide new features and bug fixes, the community constantly updates code and provides new releases.
See [OpenHarmony Release Notes](en/release-notes/OpenHarmony-Release-Notes.md).
\ No newline at end of file
# OpenHarmony开发者文档<a name="ZH-CN_TOPIC_0000001054183022"></a>
此工程存放OpenHarmony提供的快速入门、开发指南、API参考等开发者文档,欢迎参与OpenHarmony开发者文档开源项目,与我们一起完善开发者文档。
[View English](https://gitee.com/openharmony/docs/blob/master/Readme-en.md)
## 文档目录结构<a name="section135134412620"></a>
- quick-start:[快速入门](zh-cn/device-dev/quick-start/Readme-CN.md)
- get-code:[获取源码/获取工具](zh-cn/device-dev/get-code/Readme-CN.md)
- docker:[Docker镜像构建](docker/README.md)
- kernel:[内核](zh-cn/device-dev/kernel/Readme-CN.md)
- driver:[驱动](zh-cn/device-dev/driver/Readme-CN.md)
- subsystems:[子系统](zh-cn/device-dev/subsystems/Readme-CN.md)
[编译构建](zh-cn/device-dev/subsystems/编译构建.md)
[分布式远程启动](zh-cn/device-dev/subsystems/分布式远程启动.md)
[图形图像](zh-cn/device-dev/subsystems/图形图像.md)
[媒体](zh-cn/device-dev/subsystems/媒体.md)
[公共基础](zh-cn/device-dev/subsystems/公共基础.md)
[AI框架](zh-cn/device-dev/subsystems/AI框架.md)
[Sensor服务](zh-cn/device-dev/subsystems/Sensor服务.md)
[用户程序框架](zh-cn/device-dev/subsystems/用户程序框架.md)
[OTA升级](zh-cn/device-dev/subsystems/OTA升级.md)
[安全](zh-cn/device-dev/subsystems/安全.md)
[启动恢复](zh-cn/device-dev/subsystems/启动恢复.md)
[测试](zh-cn/device-dev/subsystems/测试.md)
[DFX](zh-cn/device-dev/subsystems/DFX.md)
[XTS认证](zh-cn/device-dev/subsystems/XTS认证子系统开发指南.md)
- bundles:[组件开发](zh-cn/device-dev/bundles/Readme-CN.md)
- porting:[三方库移植/三方芯片移植](zh-cn/device-dev/porting/Readme-CN.md)
- guide:[设备开发](zh-cn/device-dev/guide/Readme-CN.md)
[WLAN连接类产品](zh-cn/device-dev/guide/WLAN连接类产品.md)
[无屏摄像头类产品](zh-cn/device-dev/guide/无屏摄像头类产品.md)
[带屏摄像头类产品](zh-cn/device-dev/guide/带屏摄像头类产品.md)
- security:[安全](zh-cn/device-dev/security/Readme-CN.md)
- contribute:[贡献](zh-cn/contribute/参与贡献.md)
- glossary:[术语](zh-cn/device-dev/glossary/术语.md)
- 3rd-Party-License:[第三方开源软件及许可证说明](zh-cn/contribute/第三方开源软件及许可证说明.md)
## 版本更新
参考[Release Notes](https://gitee.com/openharmony/docs/tree/master/zh-cn/release-notes)
## 贡献<a name="section897211181655"></a>
非常欢迎您贡献文档,我们鼓励开发者以各种方式参与文档反馈和贡献。
您可以对现有文档进行评价、简单更改、反馈文档质量问题、贡献您的原创内容,详细请参考[贡献文档](zh-cn/contribute/贡献文档.md)
卓越贡献者将会在开发者社区文档贡献专栏表彰公示。
文件模式从 100755 更改为 100644
## Standalone Docker Environment
The Docker image of OpenHarmony is hosted on [HUAWEI Cloud SWR](https://auth.huaweicloud.com/authui/login.html?service=https%3A%2F%2Fconsole.huaweicloud.com%2Fswr%2F%3Fregion%3Dcn-south-1%26cloud_route_state%3D%2Fapp%2Fwarehouse%2FwarehouseMangeDetail%2Fgoldensir%2Fopenharmony-docker%2Fopenharmony-docker%3Ftype%3DownImage&locale=en-us#/login). Using the Docker image will help simplify environment configurations needed for the building. After configuring the development environments, perform the steps below to access the Docker environment. The following steps use Ubuntu as an example (Windows is also supported).
### Setting Up the Docker Environment for Standard-System Devices (reference memory ≥ 128 MB)
##### **Method 1: Obtaining the Docker image from HuaweiCloud SWR**:
1. Obtain the Docker image.
```
docker pull swr.cn-south-1.myhuaweicloud.com/openharmony-docker/openharmony-docker-standard:0.0.1
```
2. Go to the root directory of OpenHarmony code and run the following command to access the Docker build environment:
```
docker run -it -v $(pwd):/home/openharmony swr.cn-south-1.myhuaweicloud.com/openharmony-docker/openharmony-docker-standard:0.0.1
```
##### **Method 2: Using the Dockerfile to Build a Local Docker Image**
1. Obtain the Dockerfile script for a local Docker image.
```
git clone https://gitee.com/openharmony/docs.git
```
2. Go to the directory of the Dockerfile code and run the following command to build the Docker image:
```
cd docs/docker/standard
./build.sh
```
3. Go to the root directory of OpenHarmony code and run the following command to access the Docker build environment:
```
docker run -it -v $(pwd):/home/openharmony openharmony-docker-standard:0.0.1
```
### Building for Standard-System Devices (reference memory ≥ 128 MB)
1. Run the preprocessing script in the root directory of the source code.
```
../scripts/prepare.sh
```
2. Run the following script to start building for Standard-System Devices (reference memory ≥ 128 MB)
```
./build.sh --product-name {product_name}
```
**{product_name}** indicates the platform supported by the current distribution, for example, Hi3516DV300.
Files generated during compilation are stored in the **out/ohos-arm-release/** directory, and the generated image is stored in the **out/ohos-arm-release/packages/phone/images/** directory.
**Note**
You can exit Docker by simply running the **exit** command.
\ No newline at end of file
## 独立Docker环境
OpenHarmony的Docker镜像托管在HuaweiCloud SWR上。开发者可以通过该镜像在很大程度上简化编译前的环境配置。开发者在配置好开发环境后,通过以下步骤来使用Docker环境。本Docker支持Ubuntu/Windows平台,下文将以Ubuntu系统为例进行使用介绍。
### 搭建Docker环境-标准系统类设备(参考内存≥128MB)
##### 方式一:从HuaweiCloud SWR上直接获取Docker镜像进行构建:
1. 获取Docker镜像。
```
docker pull swr.cn-south-1.myhuaweicloud.com/openharmony-docker/openharmony-docker-standard:0.0.1
```
2. 进入OpenHarmony代码根目录执行如下命令,从而进入Docker构建环境。
```
docker run -it -v $(pwd):/home/openharmony swr.cn-south-1.myhuaweicloud.com/openharmony-docker/openharmony-docker-standard:0.0.1
```
##### 方式二:通过Dockerfile 构建本地Docker镜像进行构建
1. 获取Dockerfile脚本文件,用来构建本地Docker镜像。
```
git clone https://gitee.com/openharmony/docs.git
```
2. 进入Dockerfile代码目录路径执行Docker镜像构建命令。
```
cd docs/docker/standard
./build.sh
```
3. 进入OpenHarmony代码根目录执行如下命令,从而进入Docker构建环境。
```
docker run -it -v $(pwd):/home/openharmony openharmony-docker-standard:0.0.1
```
### 编译源码-标准系统类设备(参考内存≥128MB)
1. 在源码的根目录执行预处理脚本。
```
../scripts/prepare.sh
```
2. 通过如下编译脚本启动标准系统类设备(参考内存≥128MB)的编译。
```
./build.sh --product-name {product_name}
```
{product_name}为当前版本支持的平台。比如:Hi3516DV300等。
编译所生成的文件都归档在out/ohos-arm-release/目录下,结果镜像输出在 out/ohos-arm-release/packages/phone/images/ 目录下。
**说明**
退出Docker执行exit命令即可。
\ No newline at end of file
# Copyright (c) 2020 Huawei Device Co., Ltd.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#!/bin/sh
docker build -t openharmony-docker-standard:0.0.1 .
FROM ubuntu:18.04
WORKDIR /home/openharmony
ARG DEBIAN_FRONTEND=noninteractive
ARG PREBUILTS_DIR=/home/prebuilts
ARG HOME_TOOLS=/home/tools
ARG HOME_SCRIPTS=/home/scripts
RUN mv /etc/apt/sources.list /etc/apt/sources.list.bak
COPY sources.list /etc/apt
COPY prebuilts_download.sh prepare.sh $HOME_SCRIPTS/
RUN apt-get update \
&& apt-get install -y \
apt-utils \
vim \
software-properties-common \
openssh-server \
iputils-ping \
curl \
net-tools \
bsdmainutils \
kmod \
bc \
rsync \
gawk \
ssh \
ccache \
zip \
python-dev \
make \
m4 \
gcc-multilib \
ca-certificates-java \
unzip \
python3-yaml \
perl \
openssl \
libssl1.1 \
gnupg \
xsltproc \
x11proto-core-dev \
tcl \
python3-crypto \
python-yaml \
python-crypto \
libxml2-utils \
libxml2-dev \
libx11-dev \
libssl-dev \
libgl1-mesa-dev \
lib32z1-dev \
lib32ncurses5-dev \
g++-multilib \
flex \
bison \
doxygen \
git \
subversion \
tofrodos \
pigz \
expect \
python3-xlrd \
python-xlrd \
wget \
git-core \
gperf \
build-essential \
zlib1g-dev \
libc6-dev-i386 \
lib32z-dev \
openjdk-8-jdk \
&& rm -rf /bin/sh \
&& ln -s /bin/bash /bin/sh \
&& mkdir -p $PREBUILTS_DIR/prebuilts $HOME_TOOLS $HOME_SCRIPTS
RUN wget -P $HOME_TOOLS https://mirrors.huaweicloud.com/nodejs/v12.18.4/node-v12.18.4-linux-x64.tar.gz \
&& wget -P $HOME_TOOLS https://mirrors.huaweicloud.com/nodejs/v12.18.4/node-v12.18.4-darwin-x64.tar.gz \
&& tar xvf $HOME_TOOLS/node-v12.18.4-linux-x64.tar.gz -C $PREBUILTS_DIR/prebuilts \
&& tar xvf $HOME_TOOLS/node-v12.18.4-darwin-x64.tar.gz -C $PREBUILTS_DIR/prebuilts \
&& sed -i '$aexport PATH='"$PREBUILTS_DIR"'/prebuilts/node-v12.18.4-linux-x64/bin:$PATH' /root/.bashrc \
&& sed -i '$aexport PATH='"$PREBUILTS_DIR"'/prebuilts/hc-gen:$PATH' /root/.bashrc \
&& export PATH=$PATH:$PREBUILTS_DIR/prebuilts/node-v12.18.4-linux-x64/bin \
&& export PATH=$PATH:$PREBUILTS_DIR/prebuilts/hc-gen \
&& rm -rf $HOME_TOOLS \
&& chmod -R 777 $HOME_SCRIPTS/*.sh \
&& $HOME_SCRIPTS/prebuilts_download.sh \
&& rm -rf /tmp/prebuilts \
&& npm install -g @ohos/hpm-cli --registry https://registry.npm.taobao.org
#!/bin/bash
# 代码下载目录
code_dir=/home/prebuilts
# 二进制所在目录,用于临时存放二进制,二进制整个大小约10G,请确保有足够的空间
bin_dir=/tmp/prebuilts
# 二进制关系
copy_config="""
prebuilts/cmake,https://repo.huaweicloud.com/harmonyos/compiler/cmake/3.16.5/darwin/cmake-darwin-x86-3.16.5.tar.gz
prebuilts/cmake,https://repo.huaweicloud.com/harmonyos/compiler/cmake/3.16.5/linux/cmake-linux-x86-3.16.5.tar.gz
prebuilts/cmake,https://repo.huaweicloud.com/harmonyos/compiler/cmake/3.16.5/windows/cmake-windows-x86-3.16.5.tar.gz
prebuilts/build-tools/darwin-x86/bin,https://repo.huaweicloud.com/harmonyos/compiler/gn/1717/darwin/gn-darwin-x86-1717.tar.gz
prebuilts/build-tools/linux-x86/bin,https://repo.huaweicloud.com/harmonyos/compiler/gn/1717/linux/gn-linux-x86-1717.tar.gz
prebuilts/build-tools/darwin-x86/bin,https://repo.huaweicloud.com/harmonyos/compiler/ninja/1.10.1/darwin/ninja-darwin-x86-1.10.1.tar.gz
prebuilts/build-tools/linux-x86/bin,https://repo.huaweicloud.com/harmonyos/compiler/ninja/1.10.1/linux/ninja-linux-x86-1.10.1.tar.gz
prebuilts/python,https://repo.huaweicloud.com/harmonyos/compiler/python/3.8.5/darwin/python-darwin-x86-3.8.5.tar.gz
prebuilts/python,https://repo.huaweicloud.com/harmonyos/compiler/python/3.8.5/linux/python-linux-x86-3.8.5.tar.gz
prebuilts/mingw-w64/ohos/linux-x86_64,https://repo.huaweicloud.com/harmonyos/compiler/mingw-w64/7.0.0/clang-mingw.tar.gz
prebuilts,https://repo.huaweicloud.com/harmonyos/compiler/hc-gen/0.65/linux/hc-gen-0.65-linux.tar
prebuilts/gcc/linux-x86/arm,https://repo.huaweicloud.com/harmonyos/compiler/prebuilts_gcc_linux-x86_arm_gcc-linaro-7.5.0-arm-linux-gnueabi/1.0/prebuilts_gcc_linux-x86_arm_gcc-linaro-7.5.0-arm-linux-gnueabi.tar.gz
prebuilts/clang/host,https://repo.huaweicloud.com/harmonyos/compiler/prebuilts_clang_aosp_linux-x86_64/1.0/prebuilts_clang_aosp_linux-x86_64.tar.gz
prebuilts/sdk/js-loader/build-tools,https://repo.huaweicloud.com/harmonyos/compiler/ace-loader/1.0/ace-loader.tar.gz
"""
if [ ! -d "${bin_dir}" ];then
mkdir -p "${bin_dir}"
fi
for i in `echo ${copy_config}`
do
unzip_dir=`echo $i|awk -F ',' '{print $1}'`
huaweicloud_url=`echo $i|awk -F ',' '{print $2}'`
md5_huaweicloud_url=`echo ${huaweicloud_url}|md5sum|awk '{print $1}'`
bin_file=`basename ${huaweicloud_url}`
bin_file_suffix=${bin_file#*.}
#huaweicloud_file_name=`echo ${huaweicloud_url}|awk -F '/' '{print $NF}'`
if [ ! -d "${code_dir}/${unzip_dir}" ];then
mkdir -p "${code_dir}/${unzip_dir}"
fi
if [ ! -f "${bin_dir}/${md5_huaweicloud_url}.${bin_file_suffix}" ];then
# 代理不需要鉴权: wget -P ${bin_dir} -e "https_proxy=http://domain.com:port" ${huaweicloud_url}
# 代理需要鉴权(账号密码特殊字符均需要URL转义): wget -P ${bin_dir} -e "https_proxy=http://username:password@domain.com:port" ${huaweicloud_url}
# 不需要代理
wget -O ${bin_dir}/${md5_huaweicloud_url}.${bin_file_suffix} ${huaweicloud_url}
fi
if [ "X${bin_file_suffix:0-3}" = "Xzip" ];then
unzip "${bin_dir}/${md5_huaweicloud_url}.${bin_file_suffix}" -d "${code_dir}/${unzip_dir}/"
elif [ "X${bin_file_suffix:0-6}" = "Xtar.gz" ];then
tar -xvzf "${bin_dir}/${md5_huaweicloud_url}.${bin_file_suffix}" -C "${code_dir}/${unzip_dir}"
else
tar -xvf "${bin_dir}/${md5_huaweicloud_url}.${bin_file_suffix}" -C "${code_dir}/${unzip_dir}"
fi
done
#!/bin/bash
WORKDIR=/home/openharmony
TOOLSDIR=/home/prebuilts/prebuilts
rm -rf /usr/bin/python
ln -s /usr/bin/python2.7 /usr/bin/python
if [[ -d $WORKDIR/third_party/jsframework ]]; then
echo copy jsframework node_modules
cd $WORKDIR/third_party/jsframework
npm install --registry https://registry.npm.taobao.org
fi
if [[ -d $TOOLSDIR/build-tools/common/js-framework ]]; then
rm -rf $TOOLSDIR/build-tools/common/js-framework
fi
mkdir -p $TOOLSDIR/build-tools/common/js-framework
cp -r $WORKDIR/third_party/jsframework/node_modules $TOOLSDIR/build-tools/common/js-framework
if [[ -d $TOOLSDIR/build-tools/common/nodejs ]]; then
rm -rf $TOOLSDIR/build-tools/common/nodejs
fi
mkdir -p $TOOLSDIR/build-tools/common/nodejs
cp -r $TOOLSDIR/node-v12.18.4-linux-x64 $TOOLSDIR/build-tools/common/nodejs
cp -r $TOOLSDIR/node-v12.18.4-darwin-x64 $TOOLSDIR/build-tools/common/nodejs
if [[ -h $WORKDIR/prebuilts/cmake ]]; then
rm $WORKDIR/prebuilts/cmake
fi
echo link cmake
ln -s $TOOLSDIR/cmake $WORKDIR/prebuilts/cmake
if [[ -h $WORKDIR/prebuilts/build-tools ]]; then
rm $WORKDIR/prebuilts/build-tools
fi
echo link build-tools
ln -s $TOOLSDIR/build-tools $WORKDIR/prebuilts/build-tools
if [[ -h $WORKDIR/prebuilts/python ]]; then
rm $WORKDIR/prebuilts/python
fi
echo link python
ln -s $TOOLSDIR/python $WORKDIR/prebuilts/python
if [[ -h $WORKDIR/prebuilts/mingw-w64 ]]; then
rm $WORKDIR/prebuilts/mingw-w64
fi
echo link mingw-w64
ln -s $TOOLSDIR/mingw-w64 $WORKDIR/prebuilts/mingw-w64
mv $TOOLSDIR/clang/host/prebuilts_clang_aosp_linux-x86_64 $TOOLSDIR/clang/host/linux-x86
if [[ -h $WORKDIR/prebuilts/clang ]]; then
rm $WORKDIR/prebuilts/clang
fi
echo link clang
ln -s $TOOLSDIR/clang $WORKDIR/prebuilts/clang
mv $TOOLSDIR/gcc/linux-x86/arm/prebuilts_gcc_linux-x86_arm_gcc-linaro-7.5.0-arm-linux-gnueabi $TOOLSDIR/gcc/linux-x86/arm/gcc-linaro-7.5.0-arm-linux-gnueabi
if [[ -h $WORKDIR/prebuilts/gcc ]]; then
rm $WORKDIR/prebuilts/gcc
fi
echo link gcc
ln -s $TOOLSDIR/gcc $WORKDIR/prebuilts/gcc
if [[ -h $WORKDIR/prebuilts/sdk ]]; then
rm $WORKDIR/prebuilts/sdk
fi
echo link sdk
ln -s $TOOLSDIR/sdk $WORKDIR/prebuilts/sdk
deb http://mirrors.ustc.edu.cn/ubuntu/ bionic main multiverse restricted universe
deb http://mirrors.ustc.edu.cn/ubuntu/ bionic-backports main multiverse restricted universe
deb http://mirrors.ustc.edu.cn/ubuntu/ bionic-proposed main multiverse restricted universe
deb http://mirrors.ustc.edu.cn/ubuntu/ bionic-security main multiverse restricted universe
deb http://mirrors.ustc.edu.cn/ubuntu/ bionic-updates main multiverse restricted universe
deb-src http://mirrors.ustc.edu.cn/ubuntu/ bionic main multiverse restricted universe
deb-src http://mirrors.ustc.edu.cn/ubuntu/ bionic-backports main multiverse restricted universe
deb-src http://mirrors.ustc.edu.cn/ubuntu/ bionic-proposed main multiverse restricted universe
deb-src http://mirrors.ustc.edu.cn/ubuntu/ bionic-security main multiverse restricted universe
deb-src http://mirrors.ustc.edu.cn/ubuntu/ bionic-updates main multiverse restricted universe
\ No newline at end of file
此差异已折叠。
# Connectivity
- [IPC & RPC](ipc-rpc.md)
- [IPC & RPC Overview](ipc-rpc-overview.md)
- [IPC & RPC Development Guidelines](ipc-rpc-development-guidelines.md)
- [Subscribing to State Changes of a Remote Object](subscribing-to-state-changes-of-a-remote-object.md)
# IPC & RPC Development Guidelines<a name="EN-US_TOPIC_0000001103710988"></a>
- [When to Use](#section18502174174019)
- [Available APIs](#section1633115419401)
- [How to Develop](#section4207112818418)
## When to Use<a name="section18502174174019"></a>
IPC/RPC enables a proxy and a stub that run on different processes to communicate with each other, regardless of whether they run on the same or different devices.
## Available APIs<a name="section1633115419401"></a>
**Table 1** Native IPC APIs
<a name="table178849240013"></a>
<table><thead align="left"><tr id="row6884924608"><th class="cellrowborder" valign="top" width="14.12141214121412%" id="mcps1.2.4.1.1"><p id="p98846241706"><a name="p98846241706"></a><a name="p98846241706"></a>Class/Interface</p>
</th>
<th class="cellrowborder" valign="top" width="52.54525452545254%" id="mcps1.2.4.1.2"><p id="p1488482414020"><a name="p1488482414020"></a><a name="p1488482414020"></a>Function</p>
</th>
<th class="cellrowborder" valign="top" width="33.33333333333333%" id="mcps1.2.4.1.3"><p id="p388516244016"><a name="p388516244016"></a><a name="p388516244016"></a>Description</p>
</th>
</tr>
</thead>
<tbody><tr id="row15885824402"><td class="cellrowborder" valign="top" width="14.12141214121412%" headers="mcps1.2.4.1.1 "><p id="p08859241008"><a name="p08859241008"></a><a name="p08859241008"></a>IRemoteBroker</p>
</td>
<td class="cellrowborder" valign="top" width="52.54525452545254%" headers="mcps1.2.4.1.2 "><p id="p388572412010"><a name="p388572412010"></a><a name="p388572412010"></a>sptr&lt;IRemoteObject&gt; AsObject()</p>
</td>
<td class="cellrowborder" valign="top" width="33.33333333333333%" headers="mcps1.2.4.1.3 "><p id="p13885724405"><a name="p13885724405"></a><a name="p13885724405"></a>Obtains the holder of a remote proxy object. This method must be implemented by the derived classes of <strong id="b18927631105113"><a name="b18927631105113"></a><a name="b18927631105113"></a>IRemoteBroker</strong>. If you call this method on the stub, the <strong id="b7932163110519"><a name="b7932163110519"></a><a name="b7932163110519"></a>RemoteObject</strong> is returned; if you call this method on the proxy, the proxy object is returned.</p>
</td>
</tr>
<tr id="row138859241808"><td class="cellrowborder" valign="top" width="14.12141214121412%" headers="mcps1.2.4.1.1 "><p id="p1888515245012"><a name="p1888515245012"></a><a name="p1888515245012"></a>IRemoteStub</p>
</td>
<td class="cellrowborder" valign="top" width="52.54525452545254%" headers="mcps1.2.4.1.2 "><p id="p1388516240011"><a name="p1388516240011"></a><a name="p1388516240011"></a>virtual int OnRemoteRequest(uint32_t code, MessageParcel &amp;data, MessageParcel &amp;reply, MessageOption &amp;option)</p>
</td>
<td class="cellrowborder" valign="top" width="33.33333333333333%" headers="mcps1.2.4.1.3 "><p id="p1188582414016"><a name="p1188582414016"></a><a name="p1188582414016"></a>Called to process a request from the proxy and return the result. Derived classes need to override this method.</p>
</td>
</tr>
<tr id="row108856241904"><td class="cellrowborder" valign="top" width="14.12141214121412%" headers="mcps1.2.4.1.1 "><p id="p6885924609"><a name="p6885924609"></a><a name="p6885924609"></a>IRemoteProxy</p>
</td>
<td class="cellrowborder" valign="top" width="52.54525452545254%" headers="mcps1.2.4.1.2 ">&nbsp;&nbsp;</td>
<td class="cellrowborder" valign="top" width="33.33333333333333%" headers="mcps1.2.4.1.3 "><p id="p688592413018"><a name="p688592413018"></a><a name="p688592413018"></a>Service proxy classes are derived from the <strong id="b169739356519"><a name="b169739356519"></a><a name="b169739356519"></a>IRemoteProxy</strong> class.</p>
</td>
</tr>
</tbody>
</table>
## How to Develop<a name="section4207112818418"></a>
**Using Native APIs**
1. Define the IPC interface **ITestAbility**.
**ITestAbility** inherits the IPC base class **IRemoteBroker** and defines descriptors, functions, and message code. The functions need to be implemented on both the proxy and stub.
```
class ITestAbility : public IRemoteBroker {
public:
// DECLARE_INTERFACE_DESCRIPTOR is mandatory, and the input parameter is std::u16string.
DECLARE_INTERFACE_DESCRIPTOR(u"test.ITestAbility");
int TRANS_ID_PING_ABILITY = 1; // Define the message code.
virtual int TestPingAbility(const std::u16string &dummy) = 0; // Define functions.
};
```
2. Define and implement service provider **TestAbilityStub**.
This class is related to the IPC framework and needs to inherit **IRemoteStub<ITestAbility\>**. You need to override **OnRemoteRequest** on the stub to receive requests from the proxy.
```
class TestAbilityStub : public IRemoteStub<ITestAbility> {
public:
virtual int OnRemoteRequest(uint32_t code, MessageParcel &data, MessageParcel &reply, MessageOption &option) override;
int TestPingAbility(const std::u16string &dummy) override;
};
int TestServiceStub::OnRemoteRequest(uint32_t code,
MessageParcel &data, MessageParcel &reply, MessageOption &option)
{
switch (code) {
case TRANS_ID_PING_ABILITY: {
std::u16string dummy = data.ReadString16();
int result = TestPingAbility(dummy);
reply.WriteInt32(result);
return 0;
}
default:
return IPCObjectStub::OnRemoteRequest(code, data, reply, option);
}
}
```
3. Define the **TestAbility** class that implements functions for the stub.
```
class TestAbility : public TestAbilityStub {
public:
int TestPingAbility(const std::u16string &dummy);
}
int TestAbility::TestPingAbility(const std::u16string &dummy) {
return 0;
}
```
4. Define and implement **TestAbilityProxy**.
This class is implemented on the proxy and inherits **IRemoteProxy<ITestAbility\>**. You can call **SendRequest** to send a request to the stub and expose the capabilities provided by the stub.
```
class TestAbilityProxy : public IRemoteProxy<ITestAbility> {
public:
explicit TestAbilityProxy(const sptr<IRemoteObject> &impl);
int TestPingService(const std::u16string &dummy) override;
private:
static inline BrokerDelegator<TestAbilityProxy> delegator_; // Use the iface_cast macro.
}
TestAbilityProxy::TestAbilityProxy(const sptr<IRemoteObject> &impl)
: IRemoteProxy<ITestAbility>(impl)
{
}
int TestAbilityProxy::TestPingService(const std::u16string &dummy) {
MessageOption option;
MessageParcel dataParcel, replyParcel;
dataParcel.WriteString16(dummy);
int error = Remote()->SendRequest(TRANS_ID_PING_ABILITY, dataParcel, replyParcel, option);
int result = (error == ERR_NONE) ? replyParcel.ReadInt32() : -1;
return result;
}
```
5. Register and start an SA.
Call **AddSystemAbility** to register the **TestAbilityStub** instance of the SA with **SystemAbilityManager**. The registration parameters vary depending on whether the **SystemAbilityManager** resides on the same device as the SA.
```
// Register the TestAbilityStub instance with the SystemAbilityManager on the same device as the SA.
auto samgr = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
samgr->AddSystemAbility(said, new TestAbility());
// Register the TestAbilityStub instance with the SystemAbilityManager on a different device.
auto samgr = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
ISystemAbilityManager::SAExtraProp saExtra;
saExtra.isDistributed = true; // Set a distributed SA.
int result = samgr->AddSystemAbility(said, new TestAbility(), saExtra);
```
6. Obtain the SA.
Call the **GetSystemAbility** function of the **SystemAbilityManager** class to obtain the **IRemoteObject** for the SA, and create a **TestAbilityProxy** instance.
```
// Obtain the proxy of the SA registered on the local device.
sptr<ISystemAbilityManager> samgr = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
sptr<IRemoteObject> remoteObject = samgr->GetSystemAbility(said);
sptr<ITestAbility> testAbility = iface_cast<ITestAbility>(remoteObject); // Use the iface_cast macro to convert the proxy to a specific type.
// Obtain the proxies of the SAs registered with other devices.
sptr<ISystemAbilityManager> samgr = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
sptr<IRemoteObject> remoteObject = samgr->GetSystemAbility(sdid, deviceId); // deviceId identifies a device.
sptr<TestAbilityProxy> proxy(new TestAbilityProxy(remoteObject)); // Construct a proxy.
```
# IPC & RPC Overview<a name="EN-US_TOPIC_0000001103870800"></a>
- [Basic Concepts](#section175012297491)
- [Limitations and Constraints](#section2029921310472)
- [Related Modules](#section1189019299446)
## Basic Concepts<a name="section175012297491"></a>
The inter-process communication \(IPC\) and remote procedure call \(RPC\) mechanisms are used to implement cross-process communication. The difference between them lies in that IPC uses the Binder driver to implement cross-process communication within a device, whereas RPC uses the Intelligent Soft Bus driver to implement cross-process communication across devices. IPC and RPC generally use a client-server model. The service requester \(client\) can obtain the proxy of the service provider \(server\) and use the proxy to read and write data, thus implementing data communication between processes. Generally, the server registers system abilities \(SAs\) with the system ability manager \(SAMgr\), which manages the SAs and provides APIs for the client. To communicate with a specific SA, the client must obtain the proxy of the SA from SAMgr. In this document, Proxy represents the service requester, and Stub represents the service provider.
## Limitations and Constraints<a name="section2029921310472"></a>
Currently, cross-device RPC communication is not supported.
## Related Modules<a name="section1189019299446"></a>
Distributed Scheduler subsystem
# IPC & RPC<a name="EN-US_TOPIC_0000001157385969"></a>
- **[IPC & RPC Overview](ipc-rpc-overview.md)**
- **[IPC & RPC Development Guidelines](ipc-rpc-development-guidelines.md)**
- **[Subscribing to State Changes of a Remote Object](subscribing-to-state-changes-of-a-remote-object.md)**
# Subscribing to State Changes of a Remote Object<a name="EN-US_TOPIC_0000001104030756"></a>
IPC/RPC allows you to subscribe to the state changes of a remote stub object. When the remote stub object dies, a death notification will be sent to your local proxy object. You can also unsubscribe from the state changes if they are no longer needed. Such subscription and unsubscription are controlled by APIs. To be specific, you need to implement the **IRemoteObject.DeathRecipient** interface and the **onRemoteDied** method to clear resources. This callback is invoked when the process accommodating the remote stub object dies, or the device accommodating the remote stub object leaves the network. It is worth noting that these APIs should be called in the following order: The proxy object must first subscribe to death notifications of the stub object. If the stub object does not die, the proxy object can cancel the subscription when it is no longer required. If the stub object dies, subsequent operations customized by the proxy object will be automatically triggered, and the subscription does not need to be manually canceled.
Currently, IPC supports death notifications for anonymous objects, but RPC does not. That is, you can only subscribe to death notifications of services that have been registered with SAMgr.
**Development Using Native APIs**
The following APIs are used to add a recipient for death notifications of a remote stub object, remove such a recipient, and perform subsequent operations upon receiving a death notification of the remote stub object:
```
bool AddDeathRecipient(const sptr<DeathRecipient> &recipient);
bool RemoveDeathRecipient(const sptr<DeathRecipient> &recipient);
void OnRemoteDied(const wptr<IRemoteObject> &object);
```
The sample code is as follows:
```
class TestDeathRecipient : public IRemoteObject::DeathRecipient {
public:
virtual void OnRemoteDied(const wptr<IRemoteObject>& remoteObject);
}
sptr<IRemoteObject::DeathRecipient> deathRecipient (new TestDeathRecipient()); // Construct a death notification recipient.
bool result = proxy->AddDeathRecipient(deathRecipient); // Add the recipient to the proxy.
result = proxy->RemoveDeathRecipient(deathRecipient); // Remove the recipient.
```
# JS Reference
- [Framework](framework.md)
- [File Organization](file-organization.md)
- ["js" Tag](js-tag.md)
- [app.js](app-js.md)
- [Syntax](syntax.md)
- [HML](hml.md)
- [CSS](css.md)
- [JavaScript](javascript.md)
- [Loading Images Based on DPI](loading-images-based-on-dpi.md)
- [Components](components.md)
- [Common](common.md)
- [Component Methods](component-methods.md)
- [Animation Styles](animation-styles.md)
- [Gradient Styles](gradient-styles.md)
- [Transition Styles](transition-styles.md)
- [Custom Font Styles](custom-font-styles.md)
- [Atomic Layout](atomic-layout.md)
- [Container Components](container-components.md)
- [badge](badge.md)
- [dialog](dialog.md)
- [div](div.md)
- [list](list.md)
- [list-item](list-item.md)
- [list-item-group](list-item-group.md)
- [panel](panel.md)
- [popup](popup.md)
- [refresh](refresh.md)
- [stack](stack.md)
- [stepper](stepper.md)
- [stepper-item](stepper-item.md)
- [swiper](swiper.md)
- [tabs](tabs.md)
- [tab-bar](tab-bar.md)
- [tab-content](tab-content.md)
- [Basic Components](basic-components.md)
- [button](button.md)
- [chart](chart.md)
- [divider](divider.md)
- [image](image.md)
- [image-animator](image-animator.md)
- [input](input.md)
- [label](label.md)
- [marquee](marquee.md)
- [menu](menu.md)
- [option](option.md)
- [picker](picker.md)
- [picker-view](picker-view.md)
- [piece](piece.md)
- [progress](progress.md)
- [qrcode](qrcode.md)
- [rating](rating.md)
- [search](search.md)
- [select](select.md)
- [slider](slider.md)
- [span](span.md)
- [switch](switch.md)
- [text](text.md)
- [textarea](textarea.md)
- [toolbar](toolbar.md)
- [toolbar-item](toolbar-item.md)
- [toggle](toggle.md)
- [Canvas Components](canvas-components.md)
- [canvas](canvas.md)
- [CanvasRenderingContext2D](canvasrenderingcontext2d.md)
- [Image](image-0.md)
- [CanvasGradient](canvasgradient.md)
- [ImageData](imagedata.md)
- [Grid Components](grid-components.md)
- [Basic Concepts](basic-concepts.md)
- [grid-container](grid-container.md)
- [grid-row](grid-row.md)
- [grid-col](grid-col.md)
- [Custom Components](custom-components.md)
- [Basic Usage](basic-usage.md)
- [Custom Events](custom-events.md)
- [Props](props.md)
- [Event Parameter](event-parameter.md)
- [Universal Description](universal-description.md)
- [Universal Events](universal-events.md)
- [Universal Attributes](universal-attributes.md)
- [Common Styles](common-styles.md)
- [APIs](apis.md)
- [Console Logs](console-logs.md)
- [HiAppEvent](hiappevent.md)
- [Page Routing](page-routing.md)
- [Pop-up Window](pop-up-window.md)
- [Timer](timer.md)
- [Audio Management](audio-management.md)
- [Audio Playback](audio-playback.md)
- [Device Information](device-information.md)
- [System Attribute](system-attribute.md)
- [Battery and Charging](battery-and-charging.md)
- [Screen Brightness](screen-brightness.md)
- [Globalization](globalization.md)
- [Resource Management](resource-management.md)
- [Updater](updater.md)
此差异已折叠。
# APIs<a name="EN-US_TOPIC_0000001162494631"></a>
- **[Console Logs](console-logs.md)**
- **[HiAppEvent](hiappevent.md)**
- **[Page Routing](page-routing.md)**
- **[Pop-up Window](pop-up-window.md)**
- **[Timer](timer.md)**
- **[Audio Management](audio-management.md)**
- **[Audio Playback](audio-playback.md)**
- **[Device Information](device-information.md)**
- **[System Attribute](system-attribute.md)**
- **[Battery and Charging](battery-and-charging.md)**
- **[Screen Brightness](screen-brightness.md)**
- **[Globalization](globalization.md)**
- **[Resource Management](resource-management.md)**
- **[Updater](updater.md)**
# app.js<a name="EN-US_TOPIC_0000001115814806"></a>
You can implement lifecycle logic specific to your application in the **app.js** file. Available application lifecycle functions are as follows:
- **onCreate\(\)**: called when an application is created
- **onDestory\(\)**: called when an application is destroyed
In the following example, logs are printed only in the lifecycle functions .
```
// app.js
export default {
onCreate() {
console.info('Application onCreate');
},
onDestroy() {
console.info('Application onDestroy');
},
}
```
# Atomic Layout<a name="EN-US_TOPIC_0000001115974728"></a>
- [Hiding Components](#en-us_topic_0000001062070665_section0441154013284)
- [Proportion](#en-us_topic_0000001062070665_section13725752194418)
- [Fixed Ratio](#en-us_topic_0000001062070665_section922215811557)
The atomic layout features adaptive change and layout capabilities for screens of different sizes and types. Designers can use the atomic layout to define adaptive rules for elements on UIs of different forms. Developers can use the atomic layout to implement the adaptive UI features matching the design effect for a variety of screens.
>![](public_sys-resources/icon-note.gif) **NOTE:**
>The atomic layout is supported since API version 5.
## Hiding Components<a name="en-us_topic_0000001062070665_section0441154013284"></a>
You can set priority flags for a flex layout that does not support cross-row display to define the display priorities for elements in the horizontal or vertical direction. The elements are hidden based on available space of the container.
<a name="en-us_topic_0000001062070665_table14323142291413"></a>
<table><thead align="left"><tr id="en-us_topic_0000001062070665_row232317223144"><th class="cellrowborder" valign="top" width="15.65%" id="mcps1.1.5.1.1"><p id="en-us_topic_0000001062070665_p85051811127"><a name="en-us_topic_0000001062070665_p85051811127"></a><a name="en-us_topic_0000001062070665_p85051811127"></a>Style</p>
</th>
<th class="cellrowborder" valign="top" width="13.270000000000001%" id="mcps1.1.5.1.2"><p id="en-us_topic_0000001062070665_p2505915217"><a name="en-us_topic_0000001062070665_p2505915217"></a><a name="en-us_topic_0000001062070665_p2505915217"></a>Value Type</p>
</th>
<th class="cellrowborder" valign="top" width="11.58%" id="mcps1.1.5.1.3"><p id="en-us_topic_0000001062070665_p8654516123719"><a name="en-us_topic_0000001062070665_p8654516123719"></a><a name="en-us_topic_0000001062070665_p8654516123719"></a>Default Value</p>
</th>
<th class="cellrowborder" valign="top" width="59.5%" id="mcps1.1.5.1.4"><p id="en-us_topic_0000001062070665_p75054112213"><a name="en-us_topic_0000001062070665_p75054112213"></a><a name="en-us_topic_0000001062070665_p75054112213"></a>Description</p>
</th>
</tr>
</thead>
<tbody><tr id="en-us_topic_0000001062070665_row23236222143"><td class="cellrowborder" valign="top" width="15.65%" headers="mcps1.1.5.1.1 "><p id="en-us_topic_0000001062070665_p1950519112213"><a name="en-us_topic_0000001062070665_p1950519112213"></a><a name="en-us_topic_0000001062070665_p1950519112213"></a>display-index</p>
</td>
<td class="cellrowborder" valign="top" width="13.270000000000001%" headers="mcps1.1.5.1.2 "><p id="en-us_topic_0000001062070665_p65059111213"><a name="en-us_topic_0000001062070665_p65059111213"></a><a name="en-us_topic_0000001062070665_p65059111213"></a>number</p>
</td>
<td class="cellrowborder" valign="top" width="11.58%" headers="mcps1.1.5.1.3 "><p id="en-us_topic_0000001062070665_p166547162374"><a name="en-us_topic_0000001062070665_p166547162374"></a><a name="en-us_topic_0000001062070665_p166547162374"></a>Infinity</p>
</td>
<td class="cellrowborder" valign="top" width="59.5%" headers="mcps1.1.5.1.4 "><p id="en-us_topic_0000001062070665_p75481189562"><a name="en-us_topic_0000001062070665_p75481189562"></a><a name="en-us_topic_0000001062070665_p75481189562"></a>Hide child components according to the ascending order of their <strong id="en-us_topic_0000001062070665_b9988192710556"><a name="en-us_topic_0000001062070665_b9988192710556"></a><a name="en-us_topic_0000001062070665_b9988192710556"></a>display-index</strong> values when the space on the flex main axis of the container is insufficient to display all content.</p>
<p id="en-us_topic_0000001062070665_p11989182765511"><a name="en-us_topic_0000001062070665_p11989182765511"></a><a name="en-us_topic_0000001062070665_p11989182765511"></a>Child components with the same <strong id="en-us_topic_0000001062070665_b189887271559"><a name="en-us_topic_0000001062070665_b189887271559"></a><a name="en-us_topic_0000001062070665_b189887271559"></a>display-index</strong> value are hidden at the same time.</p>
<p id="en-us_topic_0000001062070665_p1363375318"><a name="en-us_topic_0000001062070665_p1363375318"></a><a name="en-us_topic_0000001062070665_p1363375318"></a>You can use the default value (<strong id="en-us_topic_0000001062070665_b1163178316"><a name="en-us_topic_0000001062070665_b1163178316"></a><a name="en-us_topic_0000001062070665_b1163178316"></a>Infinity</strong>) for a child component, which means that it will not be hidden.</p>
<p id="en-us_topic_0000001062070665_p3505181129"><a name="en-us_topic_0000001062070665_p3505181129"></a><a name="en-us_topic_0000001062070665_p3505181129"></a>This style is applicable only to child components in a container that supports flex layout, such as <strong id="en-us_topic_0000001062070665_b16943743133013"><a name="en-us_topic_0000001062070665_b16943743133013"></a><a name="en-us_topic_0000001062070665_b16943743133013"></a>&lt;div&gt;</strong>.</p>
</td>
</tr>
</tbody>
</table>
## Proportion<a name="en-us_topic_0000001062070665_section13725752194418"></a>
In a flex layout that does not support cross-row display, elements with the proportion style configured are always arranged with the set proportions in the container.
<a name="en-us_topic_0000001062070665_table337121117522"></a>
<table><thead align="left"><tr id="en-us_topic_0000001062070665_row9371811155218"><th class="cellrowborder" valign="top" width="15.65%" id="mcps1.1.5.1.1"><p id="en-us_topic_0000001062070665_p173711311175216"><a name="en-us_topic_0000001062070665_p173711311175216"></a><a name="en-us_topic_0000001062070665_p173711311175216"></a>Style</p>
</th>
<th class="cellrowborder" valign="top" width="13.270000000000001%" id="mcps1.1.5.1.2"><p id="en-us_topic_0000001062070665_p6371111119529"><a name="en-us_topic_0000001062070665_p6371111119529"></a><a name="en-us_topic_0000001062070665_p6371111119529"></a>Value Type</p>
</th>
<th class="cellrowborder" valign="top" width="11.58%" id="mcps1.1.5.1.3"><p id="en-us_topic_0000001062070665_p337181145211"><a name="en-us_topic_0000001062070665_p337181145211"></a><a name="en-us_topic_0000001062070665_p337181145211"></a>Default Value</p>
</th>
<th class="cellrowborder" valign="top" width="59.5%" id="mcps1.1.5.1.4"><p id="en-us_topic_0000001062070665_p33711211145213"><a name="en-us_topic_0000001062070665_p33711211145213"></a><a name="en-us_topic_0000001062070665_p33711211145213"></a>Description</p>
</th>
</tr>
</thead>
<tbody><tr id="en-us_topic_0000001062070665_row1237118111527"><td class="cellrowborder" valign="top" width="15.65%" headers="mcps1.1.5.1.1 "><p id="en-us_topic_0000001062070665_p17371711195218"><a name="en-us_topic_0000001062070665_p17371711195218"></a><a name="en-us_topic_0000001062070665_p17371711195218"></a>flex-weight</p>
</td>
<td class="cellrowborder" valign="top" width="13.270000000000001%" headers="mcps1.1.5.1.2 "><p id="en-us_topic_0000001062070665_p737191112523"><a name="en-us_topic_0000001062070665_p737191112523"></a><a name="en-us_topic_0000001062070665_p737191112523"></a>number</p>
</td>
<td class="cellrowborder" valign="top" width="11.58%" headers="mcps1.1.5.1.3 "><p id="en-us_topic_0000001062070665_p83711511205218"><a name="en-us_topic_0000001062070665_p83711511205218"></a><a name="en-us_topic_0000001062070665_p83711511205218"></a>-</p>
</td>
<td class="cellrowborder" valign="top" width="59.5%" headers="mcps1.1.5.1.4 "><p id="en-us_topic_0000001062070665_p234101512916"><a name="en-us_topic_0000001062070665_p234101512916"></a><a name="en-us_topic_0000001062070665_p234101512916"></a>Size weight of an element on the flex main axis. </p>
<p id="en-us_topic_0000001062070665_p5749319913"><a name="en-us_topic_0000001062070665_p5749319913"></a><a name="en-us_topic_0000001062070665_p5749319913"></a>Element size = Container main axis size x <strong id="en-us_topic_0000001062070665_b37418311916"><a name="en-us_topic_0000001062070665_b37418311916"></a><a name="en-us_topic_0000001062070665_b37418311916"></a>flex-weight</strong> / Sum of all element size weights. </p>
<p id="en-us_topic_0000001062070665_p337111112521"><a name="en-us_topic_0000001062070665_p337111112521"></a><a name="en-us_topic_0000001062070665_p337111112521"></a>This style takes effect only when it is set for all elements in the container.</p>
</td>
</tr>
</tbody>
</table>
## Fixed Ratio<a name="en-us_topic_0000001062070665_section922215811557"></a>
A component with fixed ratio can be scaled up and down while retaining its aspect ratio.
<a name="en-us_topic_0000001062070665_table1077611191734"></a>
<table><thead align="left"><tr id="en-us_topic_0000001062070665_row377618191536"><th class="cellrowborder" valign="top" width="15.65%" id="mcps1.1.5.1.1"><p id="en-us_topic_0000001062070665_p1776101916316"><a name="en-us_topic_0000001062070665_p1776101916316"></a><a name="en-us_topic_0000001062070665_p1776101916316"></a>Style</p>
</th>
<th class="cellrowborder" valign="top" width="13.270000000000001%" id="mcps1.1.5.1.2"><p id="en-us_topic_0000001062070665_p277618191233"><a name="en-us_topic_0000001062070665_p277618191233"></a><a name="en-us_topic_0000001062070665_p277618191233"></a>Value Type</p>
</th>
<th class="cellrowborder" valign="top" width="11.58%" id="mcps1.1.5.1.3"><p id="en-us_topic_0000001062070665_p57762194318"><a name="en-us_topic_0000001062070665_p57762194318"></a><a name="en-us_topic_0000001062070665_p57762194318"></a>Default Value</p>
</th>
<th class="cellrowborder" valign="top" width="59.5%" id="mcps1.1.5.1.4"><p id="en-us_topic_0000001062070665_p2776151915313"><a name="en-us_topic_0000001062070665_p2776151915313"></a><a name="en-us_topic_0000001062070665_p2776151915313"></a>Description</p>
</th>
</tr>
</thead>
<tbody><tr id="en-us_topic_0000001062070665_row67761119233"><td class="cellrowborder" valign="top" width="15.65%" headers="mcps1.1.5.1.1 "><p id="en-us_topic_0000001062070665_p10776181914317"><a name="en-us_topic_0000001062070665_p10776181914317"></a><a name="en-us_topic_0000001062070665_p10776181914317"></a>aspect-ratio</p>
</td>
<td class="cellrowborder" valign="top" width="13.270000000000001%" headers="mcps1.1.5.1.2 "><p id="en-us_topic_0000001062070665_p57762019636"><a name="en-us_topic_0000001062070665_p57762019636"></a><a name="en-us_topic_0000001062070665_p57762019636"></a>number</p>
</td>
<td class="cellrowborder" valign="top" width="11.58%" headers="mcps1.1.5.1.3 "><p id="en-us_topic_0000001062070665_p1777613191935"><a name="en-us_topic_0000001062070665_p1777613191935"></a><a name="en-us_topic_0000001062070665_p1777613191935"></a>-</p>
</td>
<td class="cellrowborder" valign="top" width="59.5%" headers="mcps1.1.5.1.4 "><p id="en-us_topic_0000001062070665_p12776121918313"><a name="en-us_topic_0000001062070665_p12776121918313"></a><a name="en-us_topic_0000001062070665_p12776121918313"></a>Aspect ratio of the component. The value is a floating-point value greater than 0.</p>
<p id="en-us_topic_0000001062070665_p3793145491117"><a name="en-us_topic_0000001062070665_p3793145491117"></a><a name="en-us_topic_0000001062070665_p3793145491117"></a>The value is subjective to the upper and lower limits of the component size.</p>
<p id="en-us_topic_0000001062070665_p15216164731415"><a name="en-us_topic_0000001062070665_p15216164731415"></a><a name="en-us_topic_0000001062070665_p15216164731415"></a>In a flex layout, the main axis size is adjusted first, based on which the cross axis size is adjusted.</p>
</td>
</tr>
</tbody>
</table>
此差异已折叠。
此差异已折叠。
此差异已折叠。
# Basic Components<a name="EN-US_TOPIC_0000001115814822"></a>
- **[button](button.md)**
- **[chart](chart.md)**
- **[divider](divider.md)**
- **[image](image.md)**
- **[image-animator](image-animator.md)**
- **[input](input.md)**
- **[label](label.md)**
- **[marquee](marquee.md)**
- **[menu](menu.md)**
- **[option](option.md)**
- **[picker](picker.md)**
- **[picker-view](picker-view.md)**
- **[piece](piece.md)**
- **[progress](progress.md)**
- **[qrcode](qrcode.md)**
- **[rating](rating.md)**
- **[search](search.md)**
- **[select](select.md)**
- **[slider](slider.md)**
- **[span](span.md)**
- **[switch](switch.md)**
- **[text](text.md)**
- **[textarea](textarea.md)**
- **[toolbar](toolbar.md)**
- **[toolbar-item](toolbar-item.md)**
- **[toggle](toggle.md)**
# Basic Concepts<a name="EN-US_TOPIC_0000001115974754"></a>
- [Concepts](#en-us_topic_0000001124631123_section1429110563714)
Grid components layout elements in a grid system which is built based on **<grid-container\>**, **<grid-row\>**, and **<grid-col\>** containers.
As a layout-auxiliary positioning tool, the grid system plays an essential role in graphic design, website design, and the UI design of mobile devices. The grid system offers the following advantages for mobile devices:
1. Provides rules for layout design and resolves issues of dynamic layout across devices with different sizes.
2. Provides a unified positioning method for the system to ensure layout consistency among modules on different devices.
3. Provides a flexible spacing adjustment method for applications to keep up with layout in special scenarios.
>![](public_sys-resources/icon-note.gif) **NOTE:**
>Grid components are supported since API version 5.
## Concepts<a name="en-us_topic_0000001124631123_section1429110563714"></a>
A column system contains of three attributes: margins, gutters, and columns.
1. **Margin**
Margins are used to control the distances between elements and edges of a screen. You can define different margins based on the screen sizes to serve as the unified specifications for breakpoints.
2. **Gutter**
Gutters are used to control the distances between elements. You can define different gutter values based on the screen sizes to serve as the unified specifications for breakpoints. To achieve a good visual effect, set the values of gutters not greater than the margins values.
3. **Column**
Columns are used for positioning in the layout. The positioning for different screen sizes is determined by the numbers of columns. The column width is automatically calculated based on the actual device width and the number of columns when the margins and clutters meet the specifications. ![](figures/en-us_image_0000001079072496.png)
**Breakpoint System**
The grid system defines the mapping between the number of columns and the width of devices, which is known as the rules in the breakpoint system.
The grid system uses the horizontal virtual pixels \(vps\) to determine the breakpoints. Different devices display different numbers of columns based on their horizontal vps within different breakpoint ranges.
**xs**: 2 columns for 0 < horizontal vp < 320
**sm**: 4 columns for 320 ≤ horizontal vp < 600
**md**: 8 columns for 600 ≤ horizontal vp < 840
**lg**: 12 columns for 840 ≤ horizontal vp
# Basic Usage<a name="EN-US_TOPIC_0000001162494627"></a>
- [Object](#en-us_topic_0000001058988954_section7681164881014)
Custom components are existing components encapsulated based on service requirements. A custom component can be invoked multiple times in a project to improve the code readability. You can introduce a custom component to the host page through **element** as shown in the following code snippet:
```
<element name='comp' src='../../common/component/comp.hml'></element>
<div>
<comp prop1='xxxx' @child1="bindParentVmMethod"></comp>
</div>
```
- The **name** attribute indicates the custom component name \(optional\), which is case-insensitive and is in lowercase by default. The **src** attribute indicates the **.hml** file path \(mandatory\) of the custom component. If **name** is not set, the **.hml** file name is used as the component name by default.
- Event binding: Use **\(on|@\)**_child1_ in the custom component to bind a child component event. In the child component, use **this.$emit\('**_child1_**', \{params:'**_parameter to pass_**'\}\)** to trigger the bound event and pass the parameter value. In the parent component, call **bindParentVmMethod** and receive the parameter passed from the child component.
>![](public_sys-resources/icon-note.gif) **NOTE:**
>For child component events that are named in camel case, convert the names to kebab case when binding the events to the parent component. For example, use **@children-event** instead of **childrenEvent**: **@children-event="bindParentVmMethod"**.
## Object<a name="en-us_topic_0000001058988954_section7681164881014"></a>
<a name="en-us_topic_0000001058988954_table67211828124016"></a>
<table><thead align="left"><tr id="en-us_topic_0000001058988954_row108577289405"><th class="cellrowborder" valign="top" width="11.091109110911091%" id="mcps1.1.4.1.1"><p id="en-us_topic_0000001058988954_p385742814403"><a name="en-us_topic_0000001058988954_p385742814403"></a><a name="en-us_topic_0000001058988954_p385742814403"></a>Attribute</p>
</th>
<th class="cellrowborder" valign="top" width="12.96129612961296%" id="mcps1.1.4.1.2"><p id="en-us_topic_0000001058988954_p19857192816408"><a name="en-us_topic_0000001058988954_p19857192816408"></a><a name="en-us_topic_0000001058988954_p19857192816408"></a>Type</p>
</th>
<th class="cellrowborder" valign="top" width="75.94759475947595%" id="mcps1.1.4.1.3"><p id="en-us_topic_0000001058988954_p18573288402"><a name="en-us_topic_0000001058988954_p18573288402"></a><a name="en-us_topic_0000001058988954_p18573288402"></a>Description</p>
</th>
</tr>
</thead>
<tbody><tr id="en-us_topic_0000001058988954_row1085792824019"><td class="cellrowborder" valign="top" width="11.091109110911091%" headers="mcps1.1.4.1.1 "><p id="en-us_topic_0000001058988954_p115421323762"><a name="en-us_topic_0000001058988954_p115421323762"></a><a name="en-us_topic_0000001058988954_p115421323762"></a>data</p>
</td>
<td class="cellrowborder" valign="top" width="12.96129612961296%" headers="mcps1.1.4.1.2 "><p id="en-us_topic_0000001058988954_p05120283516"><a name="en-us_topic_0000001058988954_p05120283516"></a><a name="en-us_topic_0000001058988954_p05120283516"></a>Object/Function</p>
</td>
<td class="cellrowborder" valign="top" width="75.94759475947595%" headers="mcps1.1.4.1.3 "><p id="en-us_topic_0000001058988954_p105644412409"><a name="en-us_topic_0000001058988954_p105644412409"></a><a name="en-us_topic_0000001058988954_p105644412409"></a>Data model of the page. If the attribute is of the function type, the return value must be of the object type. The attribute name cannot start with the dollar sign ($) or underscore (_). Do not use reserved words (<strong id="en-us_topic_0000001058988954_b1663610842111"><a name="en-us_topic_0000001058988954_b1663610842111"></a><a name="en-us_topic_0000001058988954_b1663610842111"></a>for</strong>, <strong id="en-us_topic_0000001058988954_b18647087218"><a name="en-us_topic_0000001058988954_b18647087218"></a><a name="en-us_topic_0000001058988954_b18647087218"></a>if</strong>, <strong id="en-us_topic_0000001058988954_b565218842116"><a name="en-us_topic_0000001058988954_b565218842116"></a><a name="en-us_topic_0000001058988954_b565218842116"></a>show</strong>, and <strong id="en-us_topic_0000001058988954_b0657587218"><a name="en-us_topic_0000001058988954_b0657587218"></a><a name="en-us_topic_0000001058988954_b0657587218"></a>tid</strong>).</p>
<p id="en-us_topic_0000001058988954_p356184410403"><a name="en-us_topic_0000001058988954_p356184410403"></a><a name="en-us_topic_0000001058988954_p356184410403"></a> Do not use this attribute and <strong id="en-us_topic_0000001058988954_b15611312192115"><a name="en-us_topic_0000001058988954_b15611312192115"></a><a name="en-us_topic_0000001058988954_b15611312192115"></a>private</strong> or <strong id="en-us_topic_0000001058988954_b1571161272110"><a name="en-us_topic_0000001058988954_b1571161272110"></a><a name="en-us_topic_0000001058988954_b1571161272110"></a>public</strong> at the same time </p>
</td>
</tr>
<tr id="en-us_topic_0000001058988954_row3857132812406"><td class="cellrowborder" valign="top" width="11.091109110911091%" headers="mcps1.1.4.1.1 "><p id="en-us_topic_0000001058988954_p88572283404"><a name="en-us_topic_0000001058988954_p88572283404"></a><a name="en-us_topic_0000001058988954_p88572283404"></a>props</p>
</td>
<td class="cellrowborder" valign="top" width="12.96129612961296%" headers="mcps1.1.4.1.2 "><p id="en-us_topic_0000001058988954_p198571828114017"><a name="en-us_topic_0000001058988954_p198571828114017"></a><a name="en-us_topic_0000001058988954_p198571828114017"></a>Array/Object</p>
</td>
<td class="cellrowborder" valign="top" width="75.94759475947595%" headers="mcps1.1.4.1.3 "><p id="en-us_topic_0000001058988954_p3857192844012"><a name="en-us_topic_0000001058988954_p3857192844012"></a><a name="en-us_topic_0000001058988954_p3857192844012"></a>Used for communication between components. This attribute can be transferred to components via <strong id="en-us_topic_0000001058988954_b19615191652119"><a name="en-us_topic_0000001058988954_b19615191652119"></a><a name="en-us_topic_0000001058988954_b19615191652119"></a>&lt;tag xxxx='value'&gt;</strong>. A <strong id="en-us_topic_0000001058988954_b56261916152117"><a name="en-us_topic_0000001058988954_b56261916152117"></a><a name="en-us_topic_0000001058988954_b56261916152117"></a>props</strong> name must be in lowercase and cannot start with dollar sign ($) or underscore (_). Do not use reserved words (<strong id="en-us_topic_0000001058988954_b11631216152114"><a name="en-us_topic_0000001058988954_b11631216152114"></a><a name="en-us_topic_0000001058988954_b11631216152114"></a>for</strong>, <strong id="en-us_topic_0000001058988954_b86351216202115"><a name="en-us_topic_0000001058988954_b86351216202115"></a><a name="en-us_topic_0000001058988954_b86351216202115"></a>if</strong>, <strong id="en-us_topic_0000001058988954_b864018160215"><a name="en-us_topic_0000001058988954_b864018160215"></a><a name="en-us_topic_0000001058988954_b864018160215"></a>show</strong>, and <strong id="en-us_topic_0000001058988954_b364591612115"><a name="en-us_topic_0000001058988954_b364591612115"></a><a name="en-us_topic_0000001058988954_b364591612115"></a>tid</strong>). Currently, <strong id="en-us_topic_0000001058988954_b129739262211"><a name="en-us_topic_0000001058988954_b129739262211"></a><a name="en-us_topic_0000001058988954_b129739262211"></a>props</strong> does not support functions.</p>
</td>
</tr>
<tr id="en-us_topic_0000001058988954_row8842155461510"><td class="cellrowborder" valign="top" width="11.091109110911091%" headers="mcps1.1.4.1.1 "><p id="en-us_topic_0000001058988954_p17843155411153"><a name="en-us_topic_0000001058988954_p17843155411153"></a><a name="en-us_topic_0000001058988954_p17843155411153"></a>computed</p>
</td>
<td class="cellrowborder" valign="top" width="12.96129612961296%" headers="mcps1.1.4.1.2 "><p id="en-us_topic_0000001058988954_p1884365421515"><a name="en-us_topic_0000001058988954_p1884365421515"></a><a name="en-us_topic_0000001058988954_p1884365421515"></a>Object</p>
</td>
<td class="cellrowborder" valign="top" width="75.94759475947595%" headers="mcps1.1.4.1.3 "><p id="en-us_topic_0000001058988954_p6422712153413"><a name="en-us_topic_0000001058988954_p6422712153413"></a><a name="en-us_topic_0000001058988954_p6422712153413"></a>Used for pre-processing an expression for reading and setting. The result is cached. The name cannot start with a dollar sign ($) or underscore (_). Do not use reserved words.</p>
</td>
</tr>
</tbody>
</table>
此差异已折叠。
此差异已折叠。
# Canvas Components<a name="EN-US_TOPIC_0000001162494621"></a>
- **[canvas](canvas.md)**
- **[CanvasRenderingContext2D](canvasrenderingcontext2d.md)**
- **[Image](image-0.md)**
- **[CanvasGradient](canvasgradient.md)**
- **[ImageData](imagedata.md)**
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
# Common<a name="EN-US_TOPIC_0000001162494589"></a>
- **[Component Methods](component-methods.md)**
- **[Animation Styles](animation-styles.md)**
- **[Gradient Styles](gradient-styles.md)**
- **[Transition Styles](transition-styles.md)**
- **[Custom Font Styles](custom-font-styles.md)**
- **[Atomic Layout](atomic-layout.md)**
此差异已折叠。
# Components<a name="EN-US_TOPIC_0000001115974724"></a>
- **[Common](common.md)**
- **[Container Components](container-components.md)**
- **[Basic Components](basic-components.md)**
- **[Canvas Components](canvas-components.md)**
- **[Grid Components](grid-components.md)**
此差异已折叠。
# Container Components<a name="EN-US_TOPIC_0000001162494593"></a>
- **[badge](badge.md)**
- **[dialog](dialog.md)**
- **[div](div.md)**
- **[list](list.md)**
- **[list-item](list-item.md)**
- **[list-item-group](list-item-group.md)**
- **[panel](panel.md)**
- **[popup](popup.md)**
- **[refresh](refresh.md)**
- **[stack](stack.md)**
- **[stepper](stepper.md)**
- **[stepper-item](stepper-item.md)**
- **[swiper](swiper.md)**
- **[tabs](tabs.md)**
- **[tab-bar](tab-bar.md)**
- **[tab-content](tab-content.md)**
此差异已折叠。
# Custom Components<a name="EN-US_TOPIC_0000001115974756"></a>
- **[Basic Usage](basic-usage.md)**
- **[Custom Events](custom-events.md)**
- **[Props](props.md)**
- **[Event Parameter](event-parameter.md)**
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
文件模式从 100644 更改为 100755
文件模式从 100644 更改为 100755
此差异已折叠。
文件模式从 100644 更改为 100755
此差异已折叠。
文件模式从 100644 更改为 100755
文件模式从 100644 更改为 100755
文件模式从 100644 更改为 100755
此差异已折叠。
此差异已折叠。
此差异已折叠。
文件模式从 100644 更改为 100755
此差异已折叠。
文件模式从 100644 更改为 100755
文件模式从 100644 更改为 100755
文件模式从 100644 更改为 100755
文件模式从 100644 更改为 100755
文件模式从 100644 更改为 100755
文件模式从 100644 更改为 100755
文件模式从 100644 更改为 100755
文件模式从 100644 更改为 100755
文件模式从 100644 更改为 100755
文件模式从 100644 更改为 100755
文件模式从 100644 更改为 100755
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
文件模式从 100755 更改为 100644
文件模式从 100755 更改为 100644
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
文件模式从 100755 更改为 100644
文件模式从 100755 更改为 100644
文件模式从 100755 更改为 100644
文件模式从 100755 更改为 100644
文件模式从 100755 更改为 100644
文件模式从 100755 更改为 100644
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册