Files
kitchen/packages/ohos平台适配flutter三方库指导.md

321 lines
8.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ohos平台适配flutter三方库指导
## 1. 准备工作
flutter开发环境已配置[参考](https://gitcode.com/openharmony-sig/flutter_flutter/blob/master/README.md)
下载待适配的三方插件:[官方插件库](https://pub.dev/)
本指导书,
以适配 [path_provider 2.1.0](https://pub-web.flutter-io.cn/packages/path_provider/versions/2.1.0) 为例
## 2. 插件目录
![image-20240410105254011](../media/07_1/01_Plugin_Directory.png)
lib是对接dart端代码的入口由此文件接收到参数后通过channel将数据发送到原生端
android安卓端代码实现目录
iosios原生端实现目录
example一个依赖于该插件的Flutter应用程序来说明如何使用它
README.md介绍包的文件
CHANGELOG.md记录每个版本中的更改
LICENSE包含软件包许可条款的文件。
## 3. 创建插件的ohos模块
命令:`flutter create --platforms ohos,android,ios --org <org> <appName>`
步骤:
1. 用Android Studio打开刚刚下载好的插件。
2. 打开Terminalcd到插件目录下。
3. 执行命令`flutter create --platforms ohos path_provider_ohos` 创建一个ohos平台的flutter模块。
执行创建命令前:
![image-20240410105254011](../media/07_1/02_Flutter_plugin_structure.png)
执行创建命令后可以将path_provider_ohos目录下的.dart_tool和.ldea文件删除。
![image-20240410105254011](../media/07_1/03_OpenHarmony_plugin_structure.png)
## 4. 编写ohos插件的dart接口和pubspec.yaml文件
可直接复制path_provider_android目录下lib的dart代码和pubspec.yaml文件进行修改。
dart代码基本不需要修改只需要将android字样改为ohos。
lib目录dart代码
![image-20240410105254011](../media/07_1/04_ohos_plugin_dart_side_structure.png)
pubspec.yaml文件
```
# 仅做参考
name: path_provider_ohos
description: Ohos implementation of the path_provider plugin.
repository: https://gitcode.com/openharmony-tpc/flutter_packages/tree/master/packages/path_provider/path_provider_ohos
issue_tracker: https://gitcode.com/openharmony-tpc/flutter_packages/issues
version: 2.2.1
environment:
sdk: ">=2.18.0 <4.0.0"
flutter: ">=3.3.0"
flutter:
plugin:
implements: path_provider
platforms:
ohos:
package: io.flutter.plugins.pathprovider
pluginClass: PathProviderPlugin
dartPluginClass: PathProviderOhos
dependencies:
flutter:
sdk: flutter
path_provider_platform_interface: ^2.0.1
dev_dependencies:
flutter_test:
sdk: flutter
integration_test:
sdk: flutter
pigeon: ^9.2.4
test: ^1.16.0
```
## 5. 编写ohos插件的原生ets模块
### 5.1 创建ohos的插件模块
由于是写ohos平台的flutter插件而不是写一个应用,需要将原来的entry模块删除新建一个path_provider插件的静态模块用来写ets原生代码逻辑。
步骤:
1. 用DevEco Studio打开path_provider_ohos下的ohos项目
![image-20240410105254011](../media/07_1/05_The_ohos_project_in_the_OpenHarmony_plugin.png)
2. 新建一个名称为path_provider的静态模块
在DevEco Studio左上角点击`Flie > New > Module > Static Library > Next`module name填写为`path_provider`,其他选项为默认点击Finish完成创建。
![image-20240410105254011](../media/07_1/06_Create_new_path_provider_module.png)
3. 删除entry以及其他多余目录
entry目录entry是用来写应用的现在是要写插件此处已不需要应该删除`path_provider > src > main > ets`目录下的文件全部删除(此处是一些模板代码可删除)。
![image-20240410105254011](../media/07_1/07_Delete_entry_and_other_redundant_directories.png)
### 5.2 修改相关配置文件
1. 在path_provider目录内的oh-package.json5添加libs/flutter.har 依赖:
```
{
"name": "path_provider",
"version": "1.0.0",
"description": "Please describe the basic information.",
"main": "Index.ets",
"author": "",
"license": "Apache-2.0",
"dependencies": {
"@ohos/flutter_ohos": "file:libs/flutter.har" //此处为添加的依赖
}
}
```
2. 将path_provider目录外侧的oh-package.json5的dependencies中的flutter.har依赖删除
```
{
"name": "path_provider_ohos",
"version": "1.0.0",
"description": "Please describe the basic information.",
"main": "",
"author": "",
"license": "",
"dependencies": {
},
"devDependencies": {
"@ohos/hypium": "1.0.6"
},
}
```
3. 在path_provider目录下添加flutter.har
![image-20240410105254011](../media/07_1/08_Add_flutter.har_file.png)
### 5.3 编写ets代码
文件结构和代码逻辑可参考安卓或ioshttps://gitcode.com/openharmony-tpc/flutter_packages/tree/master/packages/path_provider/path_provider_android
ohos的api可以参考https://gitcode.com/openharmony/docs
![image-20240410105254011](../media/07_1/09_Write_ets_code.png)
### 5.4 修改index文件
```
# 仅作参考
import PathProviderPlugin from './src/main/ets/io/flutter/plugins/pathprovider/PathProviderPlugin'
export default PathProviderPlugin
```
### 5.5 打har
写完代码改完配置文件后即可打har包。
打包工具DevEco Studio。
打包步骤:
1. 鼠标定位到path_provider目录。
2. 点击DevEco Studio中的Build。
3. 点击Make Module 'pathprovider'选项。
4. 等待打包完成。
![image-20240410105254011](../media/07_1/10_Steps_for_creating_har_packages_for_the_project.png)
预期结果:
在`path_provider > build > default > outputs `中有path_provider.har生成即为打har包成功。
![image-20240410105254011](../media/07_1/11_Successfully_converted_to_har_package.png)
## 6. 编写example
### 6.1 创建一个ohos平台的flutter example应用,用来验证刚刚适配的插件功能
cd 到path_provider_ohos目录下
命令:`flutter create --platforms ohos example`
工具Android Studio
![image-20240410105254011](../media/07_1/12_Create_example_command.png)
![image-20240410105254011](../media/07_1/13_example.png)
### 6.2 修改dart代码
复制`path_provider_android\example\lib`下的main.dart代码替换`path_provider_ohos\example\lib`下的main.dart代码。
### 6.3 修改example pubspec.yaml文件
```
#仅作参考
name: path_provider_example
description: Demonstrates how to use the path_provider plugin.
publish_to: none
environment:
sdk: ">=2.18.0 <4.0.0"
flutter: ">=3.3.0"
dependencies:
flutter:
sdk: flutter
path_provider:
path: ../../path_provider
path_provider_platform_interface: ^2.0.0
dev_dependencies:
flutter_test:
sdk: flutter
integration_test:
sdk: flutter
flutter:
uses-material-design: true
```
## 7. 修改path_provider的pubspec.yaml文件
flutter: plugin:platforms添加ohos。
dependencies:添加path_provider_ohos依赖。
```
name: path_provider
description: Flutter plugin for getting commonly used locations on host platform file systems, such as the temp and app data directories.
repository: https://github.com/flutter/packages/tree/main/packages/path_provider/path_provider
issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+path_provider%22
version: 2.1.0
environment:
sdk: ">=2.18.0 <4.0.0"
flutter: ">=3.3.0"
flutter:
plugin:
platforms:
android:
default_package: path_provider_android
ios:
default_package: path_provider_foundation
linux:
default_package: path_provider_linux
macos:
default_package: path_provider_foundation
windows:
default_package: path_provider_windows
ohos:
default_package: path_provider_ohos #此处为添加
dependencies:
flutter:
sdk: flutter
path_provider_android: ^2.1.0
path_provider_foundation: ^2.3.0
path_provider_linux: ^2.2.0
path_provider_platform_interface: ^2.1.0
path_provider_windows: ^2.2.0
path_provider_ohos:
path: ../path_provider_ohos #此处为添加
dev_dependencies:
flutter_test:
sdk: flutter
integration_test:
sdk: flutter
plugin_platform_interface: ^2.0.0
test: ^1.16.0
```
## 8. 运行example
### 8.1 签名
用 `Deveco Studio` 打开三方库的 `example > ohos` 目录。
单击 `File > Project Structure > Project > Signing Configs` 界面勾选 `Automatically generate signature`,等待自动签名完成即可,单击 `OK`。
![image-20240410105254011](../media/07_1/14_Signature.png)
### 8.2 运行
cd到`path_provider_ohos\example > ohos`目录,使用下列指令运行:
```
flutter pub get
flutter run -d <device-id>
```
**运行成功效果如下:**
![image-20240410105254011](../media/07_1/15_Successful_effect.png)