Android與Flutter橋接指南

Flutter官方文檔(英文版)

這篇指南是針對Android開發(fā)者的层亿,目的是讓一個沒有接觸過Flutter的Android程序員快速開發(fā)出Flutter插件烟号, 所以筆者默認(rèn)各位讀者已經(jīng)有了JDK、SDK盾似、Android Studio等開發(fā)環(huán)境和IDE。

Flutter環(huán)境搭建

起步

1.下載Flutter SDK

Flutter SDK Archive

2.解壓下載到的壓縮包

解壓路徑如D:\env\flutter雪标,不要解壓到Program Files目錄下零院,因?yàn)椴僮髟撃夸浶枰叩臋?quán)限。

3.安裝Flutter

進(jìn)入flutter根目錄村刨,雙擊flutter_console.bat告抄,等待flutter安裝完成。

tips:

如果想要在一般的cmd中直接使用flutter commands嵌牺,需要配置環(huán)境變量:
將你的flutter\bin路徑添加到環(huán)境變量path
然后重新打開cmd打洼,運(yùn)行flutter help確認(rèn)結(jié)果

4.確認(rèn)Flutter環(huán)境

運(yùn)行以下命令:


flutter doctor

一般輸出如下:


C:\Users\wxj>flutter doctor

Doctor summary (to see all details, run flutter doctor -v):

[a??] Flutter (Channel stable, v1.2.1, on Microsoft Windows [Version 6.1.7601],

locale zh-CN)

[!] Android toolchain - develop for Android devices (Android SDK version 28.0.3)

! Some Android licenses not accepted. To resolve this, run: flutter doctor

--android-licenses

[!] Android Studio (version 2.3)

X Flutter plugin not installed; this adds Flutter specific functionality.

X Dart plugin not installed; this adds Dart specific functionality.

[!] Android Studio (version 3.2)

X Flutter plugin not installed; this adds Flutter specific functionality.

X Dart plugin not installed; this adds Dart specific functionality.

[!] Connected device

! No devices available

! Doctor found issues in 4 categories.

C:\Users\wxj>

可見檢查出了4個問題,除了Android Studio沒有安裝flutter插件的提示外逆粹,其他沒什么需要注意的募疮。

5.Android Studio安裝Flutter插件

  • 啟動AS

  • 進(jìn)入插件頁面 (Preferences > Plugins on macOS, File > Settings > Plugins on Windows & Linux).

  • 選擇Browse repositories, 搜索flutter,安裝Flutter plugin

  • 安裝完成后重啟AS

測試Flutter開發(fā)環(huán)境

創(chuàng)建一個test工程僻弹,測試flutter開發(fā)環(huán)境阿浓。

  • 選擇File > New Flutter Project

  • 選擇Flutter application作為應(yīng)用類型

  • Flutter SDK Path一欄指定你的flutter SDK安裝路徑

  • 輸入項目名稱,點(diǎn)擊下一步

  • 等待AS創(chuàng)建工程

  • 運(yùn)行main.dart(第一次運(yùn)行需要較長時間的編譯)

運(yùn)行成功后設(shè)備上會看到如下頁面

說明flutter開發(fā)環(huán)境已就緒蹋绽。接下來就可以開發(fā)你的flutter插件了芭毙。

開發(fā)你的Flutter項目

開發(fā)Packages和插件

在開始前,首先要確定你是要開發(fā)一個dart package還是一個plugin package卸耘,我們是要為既存的sdk開發(fā)一個flutter插件退敦,所以是plugin package。

創(chuàng)建項目有兩種方式:命令行 和 Android Studio/create flutter project鹊奖,下面是命令行創(chuàng)建苛聘,你也可以通過Android Studio的UI創(chuàng)建,注意在創(chuàng)建時選對你要創(chuàng)建Dart package還是plugin package即可忠聚。

dart package

Dart package是通過 --template=package 創(chuàng)建的:


flutter create --template=package hello

該命令會創(chuàng)建一個 hello/ 目錄设哗,其中包括:

  • lib/hello.dart:

該包的Dart代碼.

  • test/hello_test.dart:

該包的單元測試代碼.

plugin package

創(chuàng)建package

plugin package是通過 --template=plugin 創(chuàng)建的。


flutter create --org com.example --template=plugin hello

上述命令會創(chuàng)建一個 hello/ 文件夾两蟀,其內(nèi)容如下:

  • lib/hello.dart:

你要實(shí)現(xiàn)的插件的dart api

  • android/src/main/java/com/example/?hello/HelloPlugin.java:

插件api的安卓平臺實(shí)現(xiàn)

  • ios/Classes/HelloPlugin.m:

插件api的ios平臺實(shí)現(xiàn)

  • example/:

flutter的示例應(yīng)用

默認(rèn)使用OC和java网梢,如果想使用swift或者kotlin,那么可以指定赂毯,ios用-i战虏,android用-a:


flutter create --template=plugin -i swift -a kotlin hello

接下來就可以開發(fā)你的flutter plugin了拣宰,最后你可能會想要寫一些文檔,可以參考:

Adding documentation

發(fā)布到pub.dartlang.org

Publishing packages

開發(fā)完成后你可以將你的插件發(fā)布到Pub site烦感,方便用戶使用巡社。

在發(fā)布之前,先確認(rèn)一下pubspec.yaml文件中關(guān)于plugin的設(shè)置是否正確:


# The following section is specific to Flutter.

flutter:

# This section identifies this Flutter project as a plugin project.

# The androidPackage and pluginClass identifiers should not ordinarily

# be modified. They are used by the tooling to maintain consistency when

# adding or updating assets for this project.

plugin:

androidPackage: cn.smssdk.flutter

pluginClass: MobsmsPlugin

這里要指定正確的plugin的包名和類名手趣,androidPackage只有android用得到晌该,而pluginClass則是iOS和Android都要用到的,所以類名需要統(tǒng)一绿渣。這里的設(shè)置會上傳到flutter服務(wù)器朝群,當(dāng)用戶在線集成你的plugin時,flutter會根據(jù)這個設(shè)置自動幫用戶生成下面這個類:


package io.flutter.plugins;

import io.flutter.plugin.common.PluginRegistry;

import cn.smssdk.flutter.MobsmsPlugin;

/**

* Generated file. Do not edit.

*/

public final class GeneratedPluginRegistrant {

public static void registerWith(PluginRegistry registry) {

if (alreadyRegisteredWith(registry)) {

return;

}

MobsmsPlugin.registerWith(registry.registrarFor("cn.smssdk.flutter.MobsmsPlugin"));

}

private static boolean alreadyRegisteredWith(PluginRegistry registry) {

final String key = GeneratedPluginRegistrant.class.getCanonicalName();

if (registry.hasPlugin(key)) {

return true;

}

registry.registrarFor(key);

return false;

}

}

所以中符,如果之前沒有指定正確的plugin包名和類名姜胖, 就會導(dǎo)致自動生成的代碼中出現(xiàn)錯誤。

如果是在flutter項目下直接查看java代碼淀散,可能會提示import cn.smssdk.flutter.MobsmsPlugin找不到右莱,無法使用相關(guān)類,不用在意档插,你可以"右鍵flutter項目 → Flutter → Open Android Module in Android Studio"隧出,直接打開flutter的安卓項目,AS會自動下載相關(guān)依賴(包括插件中的module)阀捅,在該視圖下編譯就不會有報錯了胀瞪,并且這兩邊會自動同步,任意一邊運(yùn)行項目都會產(chǎn)生同一個flutter apk饲鄙。

1. 通過以下命令凄诞,驗(yàn)證項目沒有問題:


flutter packages pub publish --dry-run

2. 通過以下命令發(fā)布:


flutter packages pub publish

用戶如何使用你的插件

以mobsms插件的集成為例。

1. dart代碼集成

在 hello/pubspec.yaml 中添加以下代碼:


dependencies:

mobsms: ^0.0.3 #指定最低版本忍级,不填也可

在你項目的Dart中添加以下代碼:


import 'package:mobsms/mobsms.dart'

這樣帆谍,就可以在你的main.dart中使用mobsms plugin中定義的dart api了。

2. 平臺相關(guān)(android/ios)代碼集成

Android

在 hello/android/build.gradle中添加:


android {

// lines skipped

dependencies {

provided rootProject.findProject(":mobsms")

}

}

這樣就可以在你的hello/android/src下的類中import cn.smssdk.flutter.MobsmsPlugin并使用MobsmsPlugin中的api了轴咱。

Java代碼仍然建議在Android視圖下查看汛蝙,不要在Flutter視圖下查看。

iOS

hello/ios/hello.podspec中:


Pod::Spec.new do |s|

# lines skipped

s.dependency 'mob_smssdk'

這樣就可以在你的hello/ios/Classes下的類中#import "MobsmsPlugin.h"并使用MobsmsPlugin中的api了朴肺。

更多信息可參考 Handling package interdependencies

Demo

如果你是要開發(fā)一個Plugin Package窖剑,可以參考 mobsms

SMSSDK-for-Flutter

如果你要開發(fā)一個Dart Package,需要集成第三方Plugin Package戈稿,可以參考:

sms_flutter_tester

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末西土,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子鞍盗,更是在濱河造成了極大的恐慌需了,老刑警劉巖跳昼,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異肋乍,居然都是意外死亡鹅颊,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進(jìn)店門墓造,熙熙樓的掌柜王于貴愁眉苦臉地迎上來挪略,“玉大人,你說我怎么就攤上這事滔岳。” “怎么了挽牢?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵谱煤,是天一觀的道長。 經(jīng)常有香客問我禽拔,道長刘离,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任睹栖,我火速辦了婚禮硫惕,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘野来。我一直安慰自己恼除,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布曼氛。 她就那樣靜靜地躺著豁辉,像睡著了一般。 火紅的嫁衣襯著肌膚如雪舀患。 梳的紋絲不亂的頭發(fā)上徽级,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天,我揣著相機(jī)與錄音聊浅,去河邊找鬼餐抢。 笑死,一個胖子當(dāng)著我的面吹牛低匙,可吹牛的內(nèi)容都是我干的旷痕。 我是一名探鬼主播,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼顽冶,長吁一口氣:“原來是場噩夢啊……” “哼苦蒿!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起渗稍,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤佩迟,失蹤者是張志新(化名)和其女友劉穎团滥,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體报强,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡灸姊,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了秉溉。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片力惯。...
    茶點(diǎn)故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖召嘶,靈堂內(nèi)的尸體忽然破棺而出父晶,到底是詐尸還是另有隱情,我是刑警寧澤弄跌,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布甲喝,位于F島的核電站,受9級特大地震影響铛只,放射性物質(zhì)發(fā)生泄漏埠胖。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一淳玩、第九天 我趴在偏房一處隱蔽的房頂上張望直撤。 院中可真熱鬧,春花似錦蜕着、人聲如沸谋竖。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽圈盔。三九已至,卻和暖如春悄雅,著一層夾襖步出監(jiān)牢的瞬間驱敲,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工宽闲, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留众眨,地道東北人。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓容诬,卻偏偏與公主長得像娩梨,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子览徒,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評論 2 354