鴻蒙Flutter三方庫適配指南:插件開發

歡迎繼續學習鴻蒙Flutter三方庫適配指南系列教程。在上一節中,我們學習了插件適配的基本原理,今天我們將進入實踐環節,詳細介紹如何在鴻蒙平台上開發一個Flutter插件。這部分內容將為視頻教程和PPT展示提供素材。

引言

大家好,歡迎來到鴻蒙Flutter插件開發實戰教程。在這一節中,我們將通過一個具體的示例,演示如何從零開始開發一個鴻蒙平台的Flutter插件。我們實現一個三方庫 DeviceIMEI 的適配。

在開始之前,請確保您已經安裝了鴻蒙開發環境,包括DevEco Studio和Flutter SDK。

第一部分:項目結構介紹

首先,讓我們瞭解一下Flutter插件項目的標準結構:

my_plugin/
├── lib/                    # Dart代碼目錄
├── android/                # Android平台實現
├── ios/                    # iOS平台實現
├── ohos/                # 鴻蒙平台實現(我們重點關注)
├── example/                # 示例項目
└── pubspec.yaml            # 插件配置文件

對於鴻蒙平台,我們需要特別關注 ohos,這是存放鴻蒙平台特定代碼的地方。

分析原插件功能

1.插件地址:https://pub.dev/packages/device_imei

2.插件提供了獲取設備IMEI的API,該API在Android和iOS上有不同的實現,如果在鴻蒙平台,則可以使用 OAID實現類似功能。
3. ArkTS 獲取 OAID 時,需要申請權限 ohos.permission.APP_TRACKING_CONSENT,並集成 @kit.AdsKit

第二部分:創建插件項目

讓我們通過Flutter CLI 添加鴻蒙平台實現支持:

flutter create . --template=plugin --platforms=ohos --org nl.u2312.app_set_id

創建後,我們根據提示,編輯 pubspec.yaml 文件:

ohos:
        package: nl.u2312.app_set_id
        pluginClass: AppSetIdPlugin

接下來運行 flutter pub get

配置權限

修改 ohos/src/main/module.json5 文件,添加如下內容

"requestPermissions": [
      {
        "name": "ohos.permission.APP_TRACKING_CONSENT",
        "reason": "$string:app_tracking_permission_reason",
        "usedScene": {
          "abilities": [
            "EntryAbility"
          ],
          "when": "inuse"
        }
      }
    ]

添加文件 ohos/src/main/resources/base/element/string.json

{
  "string": [
    {
      "name": "app_tracking_permission_reason",
      "value": "獲取 OAID 設備標識符"
    }
  ]
}

實現ArkTS端接口

import { abilityAccessCtrl, common, PermissionRequestResult } from '@kit.AbilityKit';
import hilog from '@ohos.hilog';
import { advertising, identifier } from '@kit.AdsKit';
async onMethodCall(call: MethodCall, result: MethodResult): Promise<void> {
    if (call.method == "getIdentifier") {
      const oaid = await this.requestOAID(getContext());
      result.success(oaid)
    } else {
      result.notImplemented()
    }
  }
async requestOAID(context: Context): Promise<string | undefined> {
    let isPermissionGranted: boolean = false;
    try {
      const atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager();
      const result: PermissionRequestResult =
        await atManager.requestPermissionsFromUser(context, ['ohos.permission.APP_TRACKING_CONSENT']);
      isPermissionGranted = result.authResults[0] === abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED;
    } catch (err) {
      hilog.error(0x0000, TAG, `Failed to request permission. Code is ${err.code}, message is ${err.message}`);
    }
    if (isPermissionGranted) {
      hilog.info(0x0000, TAG, 'Succeeded in requesting permission');
      try {
        const oaid = await identifier.getOAID();
        hilog.info(0x0000, TAG, 'Succeeded in getting OAID');
        return oaid;
      } catch (err) {
        hilog.error(0x0000, TAG, `Failed to get OAID. Code is ${err.code}, message is ${err.message}`);
      }
    } else {
      hilog.error(0x0000, TAG, 'Failed to request permission. User rejected');
    }
    return undefined;
  }

實戰總結與關鍵要點

在完成上述開發步驟後,我們可以總結出一些關鍵的技術要點和最佳實踐:

插件開發核心概念

Flutter插件是連接Dart代碼與各平台原生功能的橋樑。通過MethodChannel進行方法調用,可以實現跨平台的功能擴展。針對鴻蒙平台開發插件,能夠充分利用HarmonyOS特有的系統能力。

項目結構最佳實踐

合理的項目結構是插件可維護性的基礎。除了標準的libandroidios目錄外,為鴻蒙平台單獨設立harmony目錄,有助於代碼的組織和未來的平台擴展。

開發流程標準化

雖然當前Flutter CLI尚未原生支持鴻蒙平台,但通過手動創建harmony目錄並添加必要的配置文件(如module.json5package.json),我們可以建立一套標準化的開發流程。

Dart端設計原則

Dart端應提供簡潔、類型安全的API接口。使用assert進行參數校驗,通過try-catch處理平台異常,向調用者提供清晰的錯誤信息,這些都是良好的編程實踐。

鴻蒙原生實現要點

使用ArkTS實現時,需正確初始化MethodChannel並設置方法調用處理器。每個方法調用都應返回Promise以支持異步操作,並妥善處理未知方法調用的情況。

插件生命週期管理

插件應在應用啓動時正確初始化。通過在鴻蒙應用的Ability或Extension入口處實例化插件處理器,確保其在整個應用生命週期內可用。

總結

通過本節的學習,我們掌握了在鴻蒙平台上開發Flutter插件的基本流程:

  1. 創建標準Flutter插件項目結構
  2. 手動添加鴻蒙平台支持文件
  3. 實現Dart端接口
  4. 使用ArkTS開發鴻蒙原生功能
  5. 正確註冊和初始化插件

雖然目前Flutter對鴻蒙平台的支持還在不斷完善中,但我們可以通過手動添加的方式來實現插件開發。隨着生態的發展,相信未來會有更加便捷的工具和更好的支持。