1. 程式人生 > >Android Instant App調研報告

Android Instant App調研報告

概述

instant app 是谷歌推出的類似微信小程式(或者說小程式類似於instant app)的一項技術,使用者無須安裝應用,用完就走,同時兼備h5的便捷和原生應用的優質體驗。

工作方式和應用場景

工作方式

當用戶點選連結時,通過app link去開啟相應的instant app,如果之前沒有開啟過,則會從play store去下載並開啟,整個過程一氣呵成,跟瀏覽器開啟網頁,如果有快取先讀快取,沒有就去伺服器loading一樣。

應用場景

  • 通過直接點選連結進入(從社交網路或簡訊中點選連結);

  • 通過瀏覽器搜尋,如搜尋X電商的y商品,通過點選瀏覽器的搜尋結果可直接進入instant app;

  • 通過google play可以先試用部分功能,覺得不錯再安裝完整功能;

  • 在遊戲中方面的應用,跟上面類似,相當於遊戲試玩。

Instant App與微信小程式的對比

從部署到手機角度講

這一點簡直是小程式完勝,畢竟Google Service不能正常的引進大陸,這一點上小程式佔盡了天時地利。

小程式可以利用微信的小程式功能,新增附近商家的小程式,也可進行搜尋小程式;而Google的Instant App,想要使用此項技術,必須保證你的完整App要在Google Play上有正式釋出,用官方的話來說,我們要讓使用者體驗到無縫對接。

這一點來看,個人感覺還是Google做的更為周到細緻,雖然在大陸沒什麼卵用。

從程式體積來講

從這一點來講,Instant App的控制要比小程式要好。在Google官方要求裡,每個Instant App程式最大不得超過4M的大小,一旦超過,必須重新劃分模組,再縮減體積;

而小程式來講,沒有一個明確的大小上限,如果業務簡單,你可以控制在1M-2M的大小,如果業務複雜,包大小也能達到10M都不足為奇。

所以這一點對於使用者來講,使用者肯定喜歡用最少的開銷,體驗到業務。我們肯定不希望大把的手機空間,浪費給一個程式,特別是對那些手機空間嚴重不足的使用者,我覺得這一點Instant App勝利。

從儲存角度來講

對於小程式,資料會儲存到手機的存取區域,並且每次載入小程式時,是載入本地儲存優先。

Instant App則是將程式的部分程式碼下載下來儲存到本地儲存,同樣在每次載入時,也會優先檢查本地儲存是否有程式碼。

從儲存機制來講,差別不太大。如果從底層實現的方式來看,小程式利用的是H5的儲存機制,Instant App利用的是常見的java儲存機制。

從頁面解析速度來講

其實使用者關注的這一點是尤為重要。對於小程式而言,畢竟底層是用HTML的實現方式,而Instant App底層用的是java的實現方式。

我們看小程式的展現過程,首先利用微信小程式特有的編碼方式,轉換成HTML,再來渲染、解析、展現等操作;而Instant App不需要這麼麻煩,它天生就可以用Android來編寫,然後通過下載這部分程式碼到本地,使用Instant App時,顯然就是本地應用的使用者體驗,流暢度要比HTML頁面展現的方式順滑很多,這是Instant App能絕對勝出的一點。

綜合對比,Instant App從使用者體驗角度來看,要比小程式好很多,體驗起來讓使用者有種“我並沒有安裝這個程式,就能體驗到和程式同樣的絲滑體驗”的感覺。但是從可實施角度看(我指的是隻在大陸範圍內),Instant App天生就不如微信小程式。

一些限制

  • Activity必須相對獨立

  • 沒有自定義的後臺服務

  • 不能有自定義的content provider

  • 不能使用NDK

  • 不能使用反射、內省

啟動流程

使用者點選link=>上傳裝置資訊(cpu,螢幕,等硬體資訊)=>伺服器找到對應的app=>下載所需資料=>google play服務執行Instant App 在這裡插入圖片描述

工程結構

在這裡插入圖片描述 1)Instant app module:對應的就是即時應用,當選擇執行instant app配置之後,會在該模組目錄下生成build目錄,同時可以看到這個神奇的即時應用就是一個壓縮包;

2)App module:對應的就是installed app,即需要下載安裝的應用;

3)Base feature:由上圖可以看出,其它的Feature module都是要依賴這個模組,因此其作用就比較明顯了,是用於放置通用的程式碼和資原始檔。

總結:

  • Base feature是將程式架構成擁有一個最頂級的feature module,這個feature module內集合你的Instant App或者其他子module在執行時需要的一些必要資源內容,包括Activity、Fragment等資源,這樣能相對減少你的子module的資源大小,從而減少你寶貴的流量消耗;

  • APK module和Instant App module共同構成base feature module;

  • Instant App應使用App Links作為功能的接入口,因為App Links具有獨特的驗證方式,能與Google服務進行互通,且瞬時載入程式是依託於Chrome瀏覽器來進行互動的,所以需要使用App Links作為功能的接入口。

  • 另外,編譯instant app是以apk的方式參與打包,而編譯installed app則是以aar的方式參與打包。

原理猜想

從谷歌的各種文件和各種部落格中都提到,模組化現有的程式猜想,應該是由google play提供類似“沙盒”的東西(這個東西其實目前國內也有一些開源庫有實現類似的功能,例如360外掛,動態載入activity,外掛化等,猜想谷歌實現的原理也是差不多),APP再細分成一個個比較獨立的模組,運行於沙盒上。