• <ul id="cgeq2"></ul>
  • 歡迎您光臨深圳塔燈網絡科技有限公司!
    電話圖標 余先生:13699882642

    網站百科

    為您解碼網站建設的點點滴滴

    Flutter Plugin開發流程

    發表日期:2018-05 文章編輯:小燈 瀏覽次數:5122

    這篇文章主要介紹了Flutter Plugin開發流程,包括如何利用Android Studio開發以及發布等。

    今天這篇文章,給大家介紹如何開發Flutter Plugin中Android的部分。有關Flutter以及Flutter Plugin的概念,感興趣的可以從官網查看相關資料。

    簡介

    筆者的環境是Mac下Android Studio進行的開發,AS也是谷歌官推的,安裝flutter插件后,開發起來相對于其他IDE來說,方便很多,自帶了三種模板:

    • Flutter Application: Flutter應用
    • Flutter Plugin:Flutter插件
    • Flutter Package:純Dart組件

    Plugin其實就是一個特殊的Package。Flutter Plugin提供Android或者iOS的底層封裝,在Flutter層提供組件功能,使Flutter可以較方便的調取Native的模塊。很多平臺相關性或者對于Flutter實現起來比較復雜的部分,都可以封裝成Plugin。其原理如下

    flutter platform channels

    消息在client和host之間通過平臺通道(platform channels)來進行的,之間的通訊都是異步的。

    創建組件

    直接在Android Studio中新建一個Flutter Plugin的工程,當然也可以使用命令行來進行,例如創建一個flutter_text_plugin。

    flutter create --org com.example --plugin flutter_text_plugin

    如果想支持swift或者kotlin,可以用如下命令進行創建:

    flutter create --org com.example --plugin -i swift -a kotlin flutter_text_plugin

    更多的參數選項,大家可以 查看幫助文檔,當然還是比較推薦直接用AS進行創建,簡單直觀。用AS打開項目,可以看到項目的組織結構

    root android example ios lib ... 

    android以及ios文件夾是我們將要編寫插件的native層的地方,lib文件夾是編寫與native層映射的地方,native與flutter之間不能直接通信,必須通過MethodChannel來間接調用。example文件夾則是例子工程,編寫的插件可以直接在這個項目中進行驗證。在本文中,我們主要在android目錄下進行,也就是android部分。

    編寫Android部分

    用AS打開flutter_text_plugin/android項目,這樣子開發起來比較方便。但是打開過后,會發現出現了很多錯誤,提示找不到flutter相關的東西,我們仔細看這個項目,會發現跟我們平時用AS建的Android項目有所不同,少了很多部分,目錄也有所不同。這是因為這個android項目不需要能夠直接去運行,因此減少了很多東西。但是對于初次接觸的人來說,可能是一頭懵逼,例如該如何添加第三方庫,如何添加proguard rule等等。

    引入flutter庫

    android插件工程是沒有引入flutter庫的,所以才會出現錯誤提示,我們在項目根目錄建立一個libs文件夾,用來存放flutter庫。

    flutter庫就在我們的flutter sdk中,路徑如下

    <SDK Project>/bin/cache/artifacts/engine

    engine下面包含了各種平臺的flutter庫,我們隨便拷貝一個Android平臺的庫到libs文件夾下,右鍵flutter.jar,彈出菜單選擇Add As Library...

    經過這一步,項目中不會再報錯了,但是,由于整個flutter plugin包含了flutter庫,因此不能只是簡單的添加就了事了,點擊菜單Project Structure...,找到flutter_text_plugin的Dependencies中,將flutter庫的Scope從Implementation改成Compile Only。至此,引入flutter庫的工作完成了,可以進行插件的編寫操作了。

    添加第三方庫

    添加第三方庫有兩種,一種是jar包引入,另一種通過gradle的方式進行。由于進行了第一步flutter庫的引入,這一步就簡單多了。查看build.gradle文件,可以看到最下面出現了如下的信息。

    dependencies { compileOnly files('libs/flutter.jar') } 

    看到這個,是不是就明朗多了,添加靜態庫以及添加在線庫都可以在這個地方進行。例如我添加一個bugly靜態庫以及okhttp3庫:

    dependencies { compileOnly files('libs/flutter.jar') implementation 'com.squareup.okhttp3:okhttp:3.10.0' implementation files('libs/bugly_crash_release.jar') } 

    添加proguard rule

    由于了bugly以及okhttp3庫,因此需要添加progurad rule。我們發現項目中沒有proguard-rules.pro文件,因此這一步也需要我們自己去創建,在根目錄下,建立proguard-rules.pro文件,將混淆規則添加進去,然后修改build.gradle文件,添加如下信息,跟普通Android項目差不多:

    buildTypes { release { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } debug { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } 

    Android權限

    添加了bugly以及okhttp3庫,需要對應的權限申明,才能正常運行。直接在manifest文件下,添加對應的權限

    <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.READ_LOGS"/> 

    插件開發

    至此,準備工作都已就緒,你可以把這個項目當做一個獨立的Android項目,在上面進行各種封裝操作,然后在FlutterTestPlugin文件下,將接口暴露出來。通過platform channels與flutter層關聯起來。

    發布

    當插件開發完畢,可以將插件發布讓其他人使用,在發布之前,確保pubspec.yaml,、README.md以及CHANGELOG.md文件的內容都正確填寫完畢。可以通過dry-run命令來看準備是否就緒。

    flutter packages pub publish --dry-run

    檢查無誤后,可以執行下面的命令,發布到Pub上。

    flutter packages pub publish

    如何引用

    對插件的引用有兩種,已經發布的和未發布的。

    引用發布的庫

    flutter項目的很多資源管理都在根目錄的pubspec.yaml下面,類似于js中的一些包管理一樣,在dependencies加上我們需要引入的庫,例如引入url_launcher庫:

    dependencies: url_launcher: ^0.4.2 

    如果這個庫包含了一些平臺相關的東西,例如需要在native層進行使用的話,則需要在對應的native項目單獨做引用。

    Android

    修改android/build.gradle的dependencies處做引用:

    dependencies { provided rootProject.findProject(":url_launcher") } 

    iOS

    修改ios/hello.podspec文件

    Pod::Spec.new do |s| # lines skipped s.dependency 'url_launcher' 

    引用沖突

    引用不同的庫可能會導致一些沖突,例如A和B兩個插件,都包含了C插件,但是所需的版本不同。因此我們可以采取以下措施避免這種問題:

    • 盡量使用范圍版本而不是指定一個特定的版本。
    • 強制統一沖突的插件版本
    • 對于native層,android可以通過force命令強制指定版本,而iOS這邊,Cocoapods則不支持引用的override功能。

    引用未發布的庫

    引用未發布的庫有兩種方式,通過本地路徑和git地址的方式:

    基于Path的引用方式:

    這種方式主要針對本地的未發布的庫,引用的路徑可以是相對或者絕對路徑。

    dependencies: plugin1: path: ../plugin1/ 

    基于Git的引用方式:

    這種方式針對存放在git上的庫,其中path是可選的,可以定位到某個子目錄

    dependencies: package1: git: url: git://github.com/flutter/packages.git path: packages/package1

    后話

    筆者新建了一個flutter學習相關的項目,github地址,里面包含了筆者寫的關于flutter學習相關的一些文章,后期也會定期更新,也會上傳一些學習demo,歡迎大家關注。

    參考

    1. Flutter進階—平臺插件
    2. Flutter - Creating a Plugin
    3. Flutter for Android Developers
    4. Writing custom platform-specific code with platform channels
    5. Developing Packages & Plugins
    6. Using Packages

    本頁內容由塔燈網絡科技有限公司通過網絡收集編輯所得,所有資料僅供用戶學習參考,本站不擁有所有權,如您認為本網頁中由涉嫌抄襲的內容,請及時與我們聯系,并提供相關證據,工作人員會在5工作日內聯系您,一經查實,本站立刻刪除侵權內容。本文鏈接:http://www.juherenli.com/18398.html
    相關APP開發
     八年  行業經驗

    多一份參考,總有益處

    聯系深圳網站公司塔燈網絡,免費獲得網站建設方案及報價

    咨詢相關問題或預約面談,可以通過以下方式與我們聯系

    業務熱線:余經理:13699882642

    Copyright ? 2013-2018 Tadeng NetWork Technology Co., LTD. All Rights Reserved.    

    国产高清国产精品国产专区| 久久久久久国产精品美女| 国产精品电影一区| 国产A∨免费精品视频| 亚洲嫩草影院久久精品| 精品福利一区二区三区| 亚洲综合一区二区精品久久| 日本精品VIDEOSSE×少妇| 国产三级精品三级男人的天堂| 久久九九AV免费精品| 精品人妻系列无码人妻免费视频 | 国产在线国偷精品免费看| 日韩国产精品99久久久久久| 91久久精品国产91久久性色tv| 久热中文字幕在线精品首页| 国内揄拍国内精品| 久久青青草原精品国产软件| 国产高清国内精品福利| 99精品在线观看| 亚洲午夜福利精品久久 | 精品久久久久久蜜臂a∨| 日韩精品内射视频免费观看| 国产精品涩涩涩视频网站| 久久亚洲国产成人精品无码区| 伊人久久精品影院| 国产伦精品一区二区三区在线观看 | 一级香蕉精品视频在线播放| 久久最新精品国产| 国产精品毛片VA一区二区三区| 中文字幕久久精品无码| 久久久久久久久久久免费精品 | 在线精品亚洲一区二区小说 | 久久棈精品久久久久久噜噜| 精品女同一区二区三区免费播放| 精品国产高清久久久久久小说| 久久水蜜桃亚洲AV无码精品| 久久久一本精品99久久精品88| 久久九九99热这里只有精品| 色久综合网精品一区二区| 99热在线精品播放| 亚洲国产成人超福利久久精品|
    请您留言

    深圳塔灯网络科技有限公司0755-29185426

    提交