使用 Flutter 加速應用開發

作者 / Larry McKenzie

本文由 eBay 技術負責人 Larry Mckenzie 和 Corey Sprague 撰寫。您可以收聽他們在 Google Apps, Games & Insights 播客中的討論,詳細瞭解如何使用 Flutter 構建應用。

構建原生應用本來就不輕鬆,如果需要在不到一年的時間內構建出一款應用,同時還要滿足目標受衆的嚴格要求,就更加困難了。我們在構建 eBay Motors 應用時,就遇到了這樣的挑戰。但在 Google 的界面工具包 Flutter 的幫助下,我們得以快速針對 Android 和 iOS 平臺提供優質且一致的體驗。

eBay Motors

目標受衆

eBay Motors 的目標受衆是廣大汽車愛好者。儘管愛好者們每天都會關注汽車,但可能幾年纔會買一次車。因此,打造一款能夠讓他們願意定期使用的應用並不容易。開發團隊着重研究了這些人的使用動機,以及他們希望與其他汽車愛好者互動的方式。

買家可能正在物色下一輛車,或者只是隨便看看或尋找靈感。在考慮購買車輛時,買家希望在決定購買之前充分獲取相關信息。他們希望能夠從各個角度查看車輛 - 內飾、外觀、發動機、傳動系統。他們想了解車況,也想了解賣家。當前車主的用車情況怎樣?他們每天都開車嗎?車輛是否在修理廠維修拋光過?車輛是每年行駛一次,只在車展上展出嗎?我們想構建一種可以充分滿足這些需求的體驗。

開發團隊在與賣家談論出售車輛方面的問題時,發現賣家明顯格外關心買家是誰,而並非總是關心價格。一些賣家表示,如果他們覺得買家真的會悉心呵護他們的愛車,那麼降價出售並非不可接受。這種態度與傳統汽車市場大相徑庭,在傳統汽車市場中,賣家總是希望能夠以最高價格出售車輛。

在調查中,人們認爲買賣雙方的關係並沒有在交易達成後就結束。賣家希望能夠跟蹤愛車情況,並繼續與他們的買家交流。買家同樣希望保持聯繫,以便詢問: "嗨,我想改裝這裏,但我發現你之前改裝過其他部位。可以給我講講具體情況嗎?" 因此,我們希望構建一些功能,使買賣雙方形成一個不僅僅只是討論交易的社區。

選擇 Flutter

在開發這款應用時,eBay Motors 的領導層爲開發團隊提供了很大的自主權。唯一的要求是: 這款應用必須在一年內完成開發。根據我們的調查,顯然這款應用必須包含 eBay 用戶所期望的全部功能: 鉅細無遺的商品詳情頁、拍賣、消息功能、搜索等。開發團隊還積極地添加了有助於培養活躍社區的功能。這意味着我們的工作範圍十分龐雜,我們認爲,如果依然沿用兩支獨立平臺開發團隊的模式,將無法在截止日期前完成任務。

但在這個項目開始時,Flutter 1.0 發佈了。Flutter 是 Google 的界面工具包,可基於單個代碼庫爲移動、網絡和桌面端構建富有吸引力的原生編譯應用。這看起來很有前景,所以我們的開發團隊開始了更加詳細的調查。

對 Flutter 進行徹底的評估後,開發團隊對其相當滿意。短短几周內,開發團隊便確信 Flutter 是開發這款應用的最佳選擇。

eBay Motors 之前組建了兩支開發團隊,分別採用不同的工作方式、工作安排和編程風格。在決定使用 Flutter 時,必須弄清楚應該如何協調兩支開發團隊。由於時間緊迫,因此開發團隊在如何構建應用方面必須達成一致。所有人都秉持着相同的目標 - 打造高品質的產品、快速交付並超越預期。

兩支團隊開會討論了所有分歧,儘管雙方各有讓步,但最終結果非常協調,這也爲順利發佈產品做好了充分準備。

兩支團隊都缺乏 Flutter 和 Dart 的使用經驗,但官方提供的指引非常詳盡,學習起來非常簡單。

首個版本

我們在 2019 年 3 月收到了第一份產品需求——我們需要在三個月內向我們的 CEO 交付包含可用交易體驗的 Beta 版應用。

第一個版本需求因爲時間緊張,迫使團隊大幅削減應用的功能。我們知道,即便在 Flutter 的幫助下,我們也不可能一次性解決所有問題——無法構建出包含所有買賣功能的完整社區和完善的消息功能。我們必須制定合理的開發策略,確定需要優先開發的重點功能,而非同時開發所有功能。團隊通過討論削減哪些功能,總結出了大量關注重點。這樣我們就確定了研究重點,以及隨之而來的開發重點。每個微小變化都會解鎖下一個變化,使我們共同朝着里程碑一步步邁進。我們積極地關注問題,專注地解決用戶希望我們處理的細節。這一過程困難且常常凌亂不堪,但在 Flutter 的強力助推下,我們以意想不到的方式加速追趕上了一個個任務節點。每到達一個節點,團隊都會爲之振奮。

實現首個里程碑之後,我們還要攻克多個後續里程碑,而 Flutter 使得我們能夠一次性解決問題,並繼續向前邁進。我們的產品從交付給 CEO 的 Beta 版發展爲 eBay 內測 Beta 版,供數千名 eBay 用戶使用。一個月後,我們的產品進入了公開 Beta 版測試階段。終於,我們於 2019 年 12 月底正式發佈了 iOS 和 Android 版應用。

對於 eBay Motors 而言,每個時刻都意義非凡。開發團隊也通過這些時刻一步步地建立了信心。將產品交付給新用戶、獲得反饋,並進行更正和調整,我們可謂 "邊做邊學"。朝着目標快速地交付小規模迭代,也有助於我們的產品團隊取得成功。即使應用的功能和複雜程度不斷提高,Flutter 也讓我們能夠持續快速地交付產品。

由於在發佈時大幅削減了應用功能,導致此時我們並沒有聊天和社區功能。因此,在 2020 年 1 月,開發團隊着手從零開始構建我們的社區,並在發佈後的幾個月內增加了 50% 的應用功能。

Flutter 的影響

在剛開始採用 Flutter 時,我們只是將其視爲一種支持共享代碼並節省時間的工程工具。但 Flutter 幫助開發團隊解決了許多我們並未期待它能解決的問題。在某些情況下,它甚至解決了我們未知的問題。

在產品需求方面,我們希望平臺之間不存在差異。由於每項需求只需實現一次,所以減輕了我們不少的負擔。我們開會的次數減少了,事半功倍。

隨着開發團隊對 Flutter 的瞭解日益加深,我們意識到,代碼共享可謂意義非凡。在我們的代碼庫中,我們在 Android 和 iOS 之間共享了 98.6% 的代碼。只有大約 0.5% 的代碼爲平臺特定的原生代碼。其餘部分包括我們的持續集成流水線、自動化工具和開發者支持。

在開發過程中,通過共享代碼可以節省大量資金,而在測試方面也同樣如此。在開發團隊曾使用過的所有平臺當中,Flutter 在測試方面是佼佼者之一。它的測試功能幫助我們加快了進度,並讓我們在發佈產品時信心十足。我們從一開始就採取了強制執行 100% 代碼覆蓋率的策略,Flutter 讓我們能夠輕鬆實現這一目標。

Flutter 入門技巧

如果是初上手 Flutter,在解決移動應用中的某些問題的時候,必須擺脫先入爲主的觀念,因爲 Flutter 所使用的範式與傳統 iOS 和 Android 截然不同。當您理解了 Flutter 所用的應用構建方式後,一切都將水到渠成。最好的學習方法是花些時間研究 Flutter 代碼庫。

Flutter 的一大優點就是開源。您可以查看 Flutter 團隊是如何構建每個組件的,從中可以收穫很多有價值的信息。

Flutter 社區也非常活躍。如果您需要 Flutter 框架尚未提供的解決方案,那麼很可能已經有人構建瞭解決這個問題的 package。我們鼓勵您的團隊探索並查找所需信息,也歡迎您貢獻自己的專業知識並積極擁抱開源文化。

Flutter 的前景

在 eBay Motors 剛開始使用 Flutter 時,還鮮有大型公司公開使用該框架: 它當時僅是一款小衆工具包,似乎還缺乏實戰檢驗。時至今日,這個框架勢頭愈發強勁,很多公司向其敞開了懷抱。令人興奮的是,Flutter 提供了最爲現代且最爲優秀的應用開發體驗。而最棒的一點是,它仍在不斷地發展與改進。

隨着 Flutter 的發展,Dart 得到了大量的資源投入。Swift 和 Kotlin 中諸如空安全等一些必不可少的特性得到了積極的引入。看到 Flutter 的持續發展,以及這種發展爲構建 Flutter 應用所帶來的改進,我們感到十分喜悅。無論公司體量大小,當大家逐漸意識到 Flutter 可以幫助他們基於單個代碼庫開發桌面、web 和移動端應用,自然也會有更多團隊採用 Flutter。

結語

雖然 eBay Motors 開發團隊的所有成員都擁有原生 iOS 或原生 Android 開發背景,但在用過 Flutter 之後,所有人都不約而同地喜歡上了它。Flutter 的開發者體驗明顯好於以往: 它可以利用熱重載功能讓開發者在進行編碼時就獲得快速反饋,而且由於開發流程的順暢,使得問題能夠快速得到解決,這些都是非常有價值的優勢。在兩年的使用過程中,驚喜無處不在。我們常能聽到同事大喊: "我愛 Flutter!我剛發現了一個新的妙招!"

對於我們這樣規模的團隊,如果沒有選擇 Flutter,就沒辦法完成 eBay Motors 應用的開發。它讓我們能夠將資源集中到一起,這是分別構建兩個平臺應用的模式所無法實現的。Flutter 是幫助我們加快開發進程的加速器。

更多 Google Play 開發者播客節目,請移步《Apps, Games & Insights 播客節目合輯》,瞭解不同領域的開發者通過多種視角與主題,探討海外市場開發與發行的經驗心得。

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/QVe_Y7wN4wFTKduIOEx8Yw