前言
用flutter開發時間也不短了,在開發過程當中不可避免的會用到插件包package,之前也進行過把第三方的插件下載下來然后修改發布到自己倉庫上的操作,但由于這一次沒有找到相應的插件,于是自己根據需求在https://pub.dartlang.org/上發布了自己的第一款插件,僅做記錄,供大家參考。
過程
先說需求,需求很簡單。我們想通過ping和traceroute的原理,對指定域名進行網絡診斷,并收集診斷日志。
關于這塊已經有很成熟的框架供我們使用,在這里感謝網易電商團隊的開源框架https://github.com/Lede-Inc/LDNetDiagnoService_IOS,分別有iOS和安卓的實現。
所以我們要做的就是開發一個能夠實現flutter與原生端交互的插件,原生端的代碼實現就是借助LDNetDiagnoService框架來實現
1.創建 package
自己創建一個文件夾,在終端cd到指定文件夾。
執行命令
flutter create --org com.example --template=plugin hello
- --org 您組織的標識,用反向域名表示法。該值用于生成的Android和iOS代碼中的各種包和包標識符。
- plugin xxxx 是您插件的名字 我這里用了leleping
- 默認情況下,插件項目針對iOS代碼使用Objective-C,Android代碼使用Java。如果您更喜歡Swift或Kotlin,則可以使用-i 或 -a 為iOS或Android指定語言。例如:
flutter create --template=plugin -i swift -a kotlin hello
命令執行完后會在hello/文件夾下創建一個具有以下專用內容的插件工程(區別于新建的flutter工程):
- lib/hello.dart:
插件包的Dart API. - android/src/main/java/com/yourcompany/?hello/HelloPlugin.java:
插件包API的Android實現. - ios/Classes/HelloPlugin.m:
插件包API的ios實現. - example/:
一個依賴于該插件的Flutter應用程序,來說明如何使用它(寫代碼調試是在這個文件夾下操作的)
2.0實現包 package
由于插件包中包含用多種編程語言編寫的多個平臺的代碼,因此需要一些特定的步驟來確保順暢的體驗。
- 定義包API(.dart)
插件包的API在Dart代碼中定義。打開主文件夾hello/ 。找到lib/hello.dart。在里面定義我們想要暴露出來的api。 - 添加Android平臺代碼(.java / .kt)
在Android Studio中編輯Android平臺代碼之前,首先確保代碼至少已經構建過一次(用AS在安卓模擬器或者真機上run一次)然后:
1.啟動Android Studio
2.在’Welcome to Android Studio’對話框選擇 ‘Import project’, 或者在菜單欄 ‘File > New > Import Project…‘,然后選擇hello/example/android/build.gradle文件.
3.在’Gradle Sync’ 對話框, 選擇 ‘OK’.
4.在’Android Gradle Plugin Update’ 對話框, 選擇 ‘Don’t remind me again for this project’.
您插件的Android平臺代碼位于 hello/java/com.yourcompany.hello/?HelloPlugin.
您可以通過按下 ? 按鈕從Android Studio運行示例應用程序.
- 添加iOS平臺代碼 (.h+.m/.swift)
在編輯Xcode中的iOS平臺代碼之前,首先確保代碼至少已經構建過一次(例如,從Xcode中運行示例應用程序或終端執行cd hello/example; flutter build ios --no-codesign)。然后:
1.啟動 Xcode
2.選擇 ‘File > Open’, 然后選擇 hello/example/ios/Runner.xcworkspace 文件.
您插件的iOS平臺代碼位于Pods/DevelopmentPods/hello/Classes/中。
調試可以執行運行xcode來打斷點調試。
tip:一般的插件只需要在.m文件中添加原生代碼即刻。這次我因為需要集成網易的ping框架,用法和正常iOS項目一樣,直接用pod集成即可。 - 連接API和平臺代碼
最后,您需要將用Dart代碼編寫的API與平臺特定的實現連接起來。這是通過platform channels完成的。這篇文章主要講插件,platform相關內容還請自行查閱。
3.0發布 packages
到了這里我們我們基本上就可以發布我們自己寫的插件到官方平臺Pub了。里面的一些文檔設置我會在文章底部貼出來鏈接,這里講主要流程。
在發布之前,檢查pubspec.yaml
、README.md
以及CHANGELOG.md
文件,以確保其內容的完整性和正確性。
首先運行 dry-run 命令以查看是否都準備OK了:
flutter packages pub publish --dry-run
如果遇見什么問題,照著錯誤提示去修改即可
當提示都ok的時候,我們就可以完成最后一步的發布了。執行
flutter packages pub publish
他會檢查你的文件結構,終端會提示:
Looks great! Are you ready to upload your package (y/n)?
當你輸入y的時候會讓你進行google賬號的授權認證
Pub needs your authorization to upload packages on your behalf.
In a web browser, go to https://accounts.google.com/o/oauth2/auth?access_type=offline&approval_prompt=force&response_type=code&client_id=818368855108-8grd2eg9tj9f38os6f1urbcvsq399u8n.apps.googleusercontent.com&redirect_uri=http%3A%2F%2Flocalhost%3A55274&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email
Then click "Allow access".
帶上梯子,按照提示完成認證后既可以等著終端上傳即可。
Waiting for your authorization...
Authorization received, processing...
Successfully authorized.
Uploading...
Successfully uploaded package.
到此全部過程已經完成,就闊以去官網去搜索你剛剛的插件啦。Pub
最后的最后提示leleping插件的地址,需要的小伙伴自行引用。