Netflix 技術博客:更換移動 App 引擎的探索

2020-12-27 36kr

神譯局是36氪旗下編譯團隊,關注科技、商業、職場、生活等領域,重點介紹國外的新技術、新觀點、新風向。

編者按:移動app開發最煩人的地方在於,針對不同的平臺(Android/iOs),開發者需要開發不同的版本,能不能像Java那樣一次編寫,到處運行呢?Netflix的移動app開發團隊利用Kotlin Multiplatform進行了這方面的探索,這次他們首先實驗的是將業務邏輯抽離出來,讓兩種app共享。原文發表在其官方技術博客上,標題是:Netflix Android and iOS Studio Apps — now powered by Kotlin Multiplatform


過去幾年的時間裡,Netflix一直在開發著一款移動app,名字叫做Prodicle,我們希望能夠對電視節目和電影的實際拍攝進行創新。實際拍攝的世界節奏很快,在不同的國家、地區之間,甚至從一種拍攝到另一種拍攝之間,需求都會有很大的不同。這項工作的性質意味著我們要在分布式的環境下,在不到1/3的用戶設備擁有非常可靠的連接,且誤差容許量有限的情況下,開發需要大量寫操作的軟體。出於這些原因,作為一個小型工程團隊,我們發現,為了可靠性和產品交付速度而進行優化,是我們成功滿足不斷提高的客戶需求所必需的。

網絡連接不可靠的可能性很高,這使得我們被迫要依靠移動解決方案來獲得健壯的客戶端持久性和離線支持。快速交付產品的需求讓我們開始嘗試多平臺架構。現在,通過利用Kotlin Multiplatform,用Kotlin一次性編寫與平臺無關的業務邏輯,然後針對Android編譯成Kotlin庫,針對iOS通過Kotlin/Native編譯成原生的Universal Framework,我們又更進了一步。

Kotlin Multiplatform

Kotlin Multiplatform可以讓你將單一的業務邏輯代碼庫應用到iOS和Android app上面。你只需要在必要的是編寫平臺相關代碼,比方說,實現原生UI,或者要利用平臺相關API時。

Kotlin Multiplatform的跨平臺移動開發方案跟這個領域的一些知名技術不一樣。別的技術都是把平臺相關的app開發抽象化或者完全取代掉,Kotlin Multiplatform卻是對現有平臺相關技術的補充,致力於替代與平臺無關的業務邏輯。這算是給現有工具箱增加一個新工具,而不是要把工具箱替換掉。

這種做法對我們來說效果很好,原因有這麼幾個:

  1. 我們的Android和iOS Studio app有著共同的體系結構,兩個平臺都寫有類似或者在某些情況下相同的業務邏輯。

  2. 我們的Android和iOS app裡面幾乎50%的生產代碼都是跟底層平臺分離的。

  3. 我們對探索各自平臺提供的最新技術(Android Jetpack Compose,Swift UI等)的渴望絲毫沒有受到任何阻礙。

那麼,我們用它來幹什麼呢?

體驗管理

如前所述,我們的用戶需求在不同產品之間的差異很大。這種差異會轉化為大量的app配置,對功能可用性進行切換,要優化每個產品的應用內體驗。把管理這些配置的代碼跟app本身去耦合,可以有助於降低app的複雜性。我們對代碼共享的首次探索包括我們的內部體驗管理工具Hendrix的移動SDK實現。

Hendrix的核心是一種用來表示應該如何計算配置值的簡單解釋性語言。這些表達式是在當前app會話的上下文中計算的,而且可以訪問類似A / B測試作業、位置、設備屬性等數據。我們的用例是配置產品的可用性,版本,以及特定區域的應用功能集。

糟糕的網絡連接再加上為了響應用戶活動而頻繁變更配置值,意味著在設備側進行規則計算要比在伺服器端進行計算更好。

於是我們就開發了輕量級的Hendrix移動SDK——而這是應用Kotlin Multiplatform的理想選擇,因為它需要大量的業務邏輯,並且完全與平臺無關。

實現

為簡便起見,Hendrix的具體細節我們就跳過不談了,這裡就講講用Kotlin Multiplatform來替代Kotlin / Swift會涉及到的一些差異。

Build

對於Android來說,一切照舊。就像其他任何的依賴項一樣,Hendrix Multiplatform SDK會被當成Android庫項目依賴項,通過gradle導入進來。至於iOS,原生二進位文件作為通用框架已包含在Xcode項目裡面。

開發人員工效學

Kotlin Multiplatform的源碼可以進行編輯,重新編譯,並且可以給Android Studio和Xcode附上帶有斷點的調試器(包括lldb支持)。Android Studio開箱即用,還可以通過TouchLabs的xcode-kotlin插件實現對Xcode的支持。

通過Xcode調試Kotlin源碼。

網絡

Hendrix會對規則集——已下載到設備本地的遠程可配置文件,做出解釋。我們用Ktor的Multiplatform HttpClient來把我們的網絡代碼嵌入到SDK裡面。

磁碟緩存

當然,網絡連接未必總能在線,所以需要把下載的規則集緩存到磁碟上。為了實現Multiplatform的持久性,我們用了SQLDelight以及它的Android與Native Database驅動程序。

最後的思考

在過去幾年的時間裡,我們一直在密切關注Kotlin Multiplatform的發展,現在我們認為這項技術已經達到拐點。Xcode的工具和構建系統集成已經得到了顯著改善,相較而言,不必編寫和維護多個平臺相關的實現所帶來的好處,已經大大超過了集成和維護所牽涉到的複雜性。

我們的Android和iOS Studioapp之間還有很多其他的代碼共享的機會。考慮到JavaScript transpilation(一種從源碼到另一種源碼的編譯)也有可能性時,這項技術的潛在未來應用會變得更加有趣。

我們的studio移動app有可能會演進為瘦UI層+共享業務邏輯,我們對這種可能性感到興奮,我們會繼續將在這條道路上學到的東西分享給大家的。

譯者:boxi。


相關焦點

  • NEXON旗下17年老端遊《黑暗傳說》更換引擎
    通過此次更新,《黑暗傳說》更換了遊戲引擎,為將來的新內容添加和系統改善準備了基礎,並提供更加暢快的服務。其中,更換全新遊戲引擎後,新添加852X480和1024X576兩個解析度,方便玩家用更寬廣的視野進行遊戲。同時,還改善了角色的轉向和移動等感覺。
  • Django搭建個人博客:創建APP功能模塊
    創建Appapp代表一個功能模塊。可以將不同功能的模塊放在不同的app中, 方便管理以及調用。app就是項目的基石,因此開發博客的第一步就是創建新的app,用來實現跟文章相關的功能模塊。現在我們已經通過path將根路徑為article的訪問都分發給article這個app去處理。但是app通常有多個頁面地址,因此還需要app自己也有一個路由分發,也就是article.urls了。
  • 《warframe》將更換引擎 加入光追DLSS
    《星際戰甲》開發商Digital Extremes近日在論壇中表示,本作即將更換全新的渲染引擎,其目的是更好的為遊戲提供更好的畫面及光線。而外媒wccftech則認為,此次的升級畫面似乎是為了應對英偉達的全新DLSS技術。
  • 技術人員為什麼要寫博客?
    一、我心中的博客我所以指的寫博客,不單只是寫一篇文章出來這一結果。而應該是寫的這一過程,寫過技術文章的朋友應該跟我一樣有這麼一個過程。1 自己了解學習,文章所涉及到的知識點,及知識點衍生出來的知識點。2.1.2 提升學習能力:同一樣的人,了解同一知識點,用不同的方法,產生的結果必然會不一樣,找到最佳的學習方法,這也是一種能力,這種能力是經過多次實踐探索之後總結出來的,以前我每次需了解某一種技術時都會先百度看各種搜索結果,發現沒有想要的之後,再Google因為Google的結果與百度的會有所不同,Google結果中國外的文章相對會多一點,而偶然點了一個連結進入了博客園,發現就是自己想要的東西
  • 開發麻將app需要什麼技術
    但也有一些人直接在開始就遇到了困惱,甚至連開發麻將app需要哪些技術,做些什麼都還沒弄清楚。事實上,這個問題其實困擾了大部分的麻將創業人,下面和小編一起來看看吧!開發麻將app遊戲軟體麻將app需要的技術要開發一款麻將app遊戲軟體勢必會需要考慮到技術的問題,這對於任何一個麻將app開發的運營者來說,
  • 競價信息流移動搜索趨勢分析!如何分析移動搜搜引擎?
    「搜索推廣」通常被我們叫做」競價廣告「或」SEM「,那麼」移動搜索推廣」就是指企業在移動搜尋引擎中的競價推廣方式,雖然中國有很多搜尋引擎,但在6億多移動搜索用戶中,60%以上的用戶還是習慣使用百度搜索,人多的地方就會有廣告,百度移動搜索推廣也就成為企業比較常用的推廣方式,並且在推廣預算投入上
  • Unity 「出圈」:遊戲引擎的技術革新和跨界商機
    鮮有人知的是,實力巨作《王者榮耀》的背後是來自全球領先的實時 3D 創作引擎 Unity 的技術支持。除《王者榮耀》外,大家耳熟能詳的《糖豆人》《龍之谷2》《原神》《帕斯卡契約》《秦時明月手遊》《劍網3:指尖江湖》等眾多爆款大作都選擇使用 Unity 進行開發。
  • 2020線上虛幻引擎技術開放日 Unreal Open Day Online 即將登陸
    2020年11月27日至28日,虛幻引擎技術開放日Unreal Open Day (以下簡稱UOD) 將首次在線上舉辦,以兩天全天直播的形式,在Bilibili虛幻引擎官方直播間與你相約。本次UOD大會準備了近百場演講,力求將最前沿的虛幻引擎技術與案例解析,直接帶給全球虛幻引擎開發者與關注者。
  • 早報:華為將推出鳳凰引擎 中國移動推出和彩雲網盤
    在中國圖形學大會 Chinagraph2020 中國廈門專場中,華為 2012 實驗室高級圖形技術專家將帶來精彩分享《華為鳳凰引擎 - 圖形技術演進趨勢》。華為鳳凰引擎 Ray Shop 是業界先進的移動端光追混合渲染管線,廣泛應用到遊戲及其他三維應用中,提升畫質。
  • 海外華人程式設計師視角:解密移動遊戲開發與Unity 4引擎特性
    這個差別決定了在國內創業或多或少都受到浮躁心態的影響,會更加注重推廣和營收,而打磨設計和鑽研技術的風氣在國內並不是主流。而對於技術和專業化程度上的差別,其實本質上並不存在,現在遊戲開發的技術都可以在網上找到相關信息,當然前提是具備良好的英文理解能力。目前中文資料從系統性和專業性上都無法和英文相比,所以學習英語是國內開發者必須注意的問題。
  • 《星際戰甲》更換全新渲染引擎 提高光線及陰影效果
    《星際戰甲》開發商Digital Extremes近日在論壇中表示,本作即將更換全新的渲染引擎,其目的是更好的為遊戲提供更好的畫面及光線。而外媒wccftech則認為,此次的升級畫面似乎是為了應對英偉達的全新DLSS技術。
  • 揭秘移動網站搬家工具SiteApp
    對於移動網際網路,多數網站經營者和技術人員是愛恨交加。一方面,移動網際網路勢不可擋;另外一方面,由傳統PC網際網路向移動網際網路的轉型升級,成本巨大。而在第二期百度雲技術沙龍「西二旗夜話」上,技術大佬們給出了一個「以技術手段解決技術問題」的方案,百度雲基於Site->App技術推出了移動網站搬家工具SiteApp(https://siteapp.baidu.com/),使成本高昂的手機站轉換成為過往雲煙。在移動時代,人們更傾向於通過智慧型手機上的App來訪問網際網路。
  • 移動和家親app使用圖文教程
    移動和家親app使用圖文教程時間:2017-06-21 13:27   來源:綠茶軟體園   責任編輯:沫朵 川北在線核心提示:原標題:和家親是什麼? 移動和家親app使用圖文教程 和家親是什麼?和家親app是中國移動官方家庭業務入口,和家親app平臺結合軟硬體,為用戶提供溫馨便捷的家庭內外數位化生活服務,和家親app提供包括智能家庭網關與智能家居管理,家庭親情溝通、便民服務等。和家親app   原標題:和家親是什麼? 移動和家親app使用圖文教程   和家親是什麼?
  • B社《上古捲軸6》將用新引擎!暴雪嘉年華明年2月開!
    他接下來還表示這兩個項目都將在工作室引擎的全新設計版本中開發。霍華德說:「這導致了我們自《上古捲軸4:湮沒》以來最大的引擎檢修,25年來我們的第一個新IP——《星空》和老IP《上古捲軸6》都將使用最新技術。」
  • 在 Chinajoy 2018 上體驗虛幻引擎作品
    Epic Games 研發的遊戲開發工具虛幻引擎4支持遊戲跨平臺聯機,同樣一套遊戲內容不僅可以在 PC,Mac,移動平臺和遊戲主機平臺發布,玩家也可以在不同的平臺間相互聯機遊戲。 展位中展出的內容是 Epic Games 基於虛幻引擎4 研發的跨平臺遊戲聯機技術展示,通過 Fortnite 這款遊戲展示完全相同的遊戲內容在多個平臺的聯機對戰。
  • openEuler Summit 2020成功召開,探索技術創新無限可能
    他說,以創新作為發展的原動力,以開源作為協作的模式,以人才作為第一資源,希望openEuler社區匯聚每一位開發者的創新能力,共同探索下一代作業系統的星辰大海。 建行信用卡核心業務系統在軟硬體平臺演進之路上做過創新探索。建行信用卡核心業務系統在飛行中換「引擎」,構築雙平面,推進建行信用卡業務平滑向鯤鵬計算平臺遷移。
  • 來博客APP抽獎!
    去年春節,大家紛紛開始通過微信、支付寶等手機APP發紅包,技術便利的同時,錢包癟下去的速度也越來越快了……面對「春劫」各種讓人無語的槽點,博客君想說,你不是一個人在戰鬥!常言道,苦逼需要分享,人生需要揭穿,讓我們一起來吐槽吧!
  • 虛幻引擎最新實時動作捕捉技術 影視創作又進一步?
    如此酷炫的技術,我們通過視頻直觀地感受一下:(原視頻來源於網絡)視頻開始時,你能看見動態的「Siren」完全是在虛幻引擎中實時呈現的,細節程度高,效果極其驚人!「Siren」動畫幕後製作過程為了製作視頻,演員Alexa Lee穿著全身動作捕捉套裝,使用Vicon Shōgun軟體,將演員實時捕捉的身體和手指運動信息投映到第一塊屏幕上,同時通過Vicon新的實時連接插件將數據流傳輸到虛幻引擎中。這樣在第二個屏幕上,就可以看到由中國女演員姜冰潔的肖像創建的Siren角色——同步移動,引擎中以60幀每秒的刷新率驅動。
  • iOS14更換應用圖標教程
    蘋果手機更換圖標之前在iOS13系統中,我們就可以通過快捷指令這款APP的來玩,現在iOS14系統更新了之後,很多小夥伴想要修改手機桌面上的應用圖標就不知道該怎麼弄了。這裡小編為大家帶來了iOS14更換應用圖標教程,我們一起來看看吧!
  • Unity引擎2018版發布 可打造影視級別的遊戲畫面
    Unity 引擎製作人Brett Bibby表示,新版本是有史以來最大規模的一次更新,開發者可以用它來打造影視級別的遊戲畫面,幫助他們快速製作出更強大、更有趣的遊戲。遊戲開發引擎 Unity 近期獲得了重大更新,加入了不少新的特性和改進。