摘要:只有當理解這些后,才能很順利的進行程序重構,或者進行程序開發。不難發現,這個功能,肯定和完整有著某種密切的聯系。還有另外一種情況。故可以將其刪除。及,共同構成同第一條總結的,當你抽象出級的后,他們構成總體的結構,包括及。
作者:Darkbug
原文標題:Google新技術:Instant App全拆解(4)——架構(完結)
原文鏈接:https://segmentfault.com/a/11...
首發地址:http://www.doncc.org
轉發請注明轉載地址,請尊重原創作者權益!
《Google新技術:Instant App全拆解》系列回顧:
第一篇:Google新技術:Instant App全拆解(1)——初探
第二篇:Google新技術:Instant App全拆解(2)——剖析
第三篇:Google新技術:Instant App全拆解(3)——著手
本文著重介紹在進行Instant App程序開發時需要理解的程序架構,同學們需要首先理解架構里的幾個基本概念,然后再需要理解如何進行基本的功能模塊架構,甚至更為復雜的程序功能模塊架構。只有當理解這些后,才能很順利的進行程序重構,或者進行Instant App程序開發。
有描述不正確的地方,請及時聯系我,我將吸取意見并改正。
1.Instant App程序的結構及概念在之前的課程我們有介紹,要想進行Instant App的程序開發,必須基于Android Studio 3.0集成開發環境。故后面介紹的所有關于代碼的書寫,以及在集成開發環境內進行程序架構,本人均在Android Studio 3.0 preview版進行(因為寫這文章的時候,最新版也就是preview版)。 -_-||
在Instant App內,有幾個非常重要的概念。比如feature、feature modules、feature APK。在做之前,必須先搞懂這幾個概念,才能做好你的Instant App程序開發。
瞬時加載程序應該起到的作用是,當你在需要一個功能需求時,從Google Play上可以下載這個程序的部分功能,從而體驗到App級的用戶體驗,用戶使用完這個應用的功能模塊后,系統會丟掉這個功能模塊的代碼。不難發現,這個功能,肯定和完整App有著某種密切的聯系。那么是什么聯系呢?
好的,我們開始根據官方的圖來進行程序架構分析。想要分析程序的結構,應從大到小、從外向內進行分析。我們會從下面兩個方向進行分析,也就是從外到內。
從程序功能劃分程序結構
從功能結構劃分工程架構
1.1 從程序功能劃分程序結構如果你的應用程序是帶有即時應用的話,那么你在構建你的項目之時,會帶有一個或多個即時應用程序APK。這是根據你的程序劃分程序功能情況而定,每個功能,可以生成對應功能的即時應用程序APK。
好,明白了這個功能APK后,我們再來看看它是怎么架構的。
我們先來從官方的一張圖說起:
從圖中我們可知,一個Instant App APK程序內,只有一個Base feature APK,而可以有多個feature APK來構成。換句話說,每個即時應用程序,都會有且只有一個基礎功能APK。
換個角度想,如果你的即時應用程序只有一個功能,那么你只需有一個基礎功能APK就夠了;如果你的即時應用程序有多個功能,那么你需要一個基礎功能APK,它包含其他功能所需要用到的共有數據即可,比如不同功能間,界面內會有一些公用的控件、基本信息等,那么這些共有數據就可以放在基礎功能APK內,而其他功能APK,具備不同功能即可。
還有另外一種情況。用戶已經體驗了一個功能了,系統已為用戶下載了基礎功能APK以及功能APK,如果需要在這個功能內請求數據到另外一個功能內的情況下,系統只會為你下載另一項功能的代碼,因為這是基礎功能的代碼已經存在本地了,無需再次下載了。
怎么樣,Google大大的這個設計,是不是感覺簡直逆天到爆?總結一句話就是,需要的就下載;不需要的,不下載。這為我們在一定程度上節省了很多寶貴的流量,也減少應用程序所占用的系統空間。(土豪請隨意)?
1.2 從功能結構劃分工程架構從上面的小結我們可以知道,你的程序其實是按照功能的不同進行區分的,所有功能應有一個基礎功能,在基礎功能之上,將整個程序劃分出不同的功能。那么不同的功能之間,該如何進行代碼模塊的劃分架構呢?
我們再來看下官方發布的另外一張結構圖:
從上圖我們很清楚的知道,一個Instant App 程序內,只會包含一個基本的功能,而自定義的模塊,會依賴于基本的功能塊。這是一個很典型的瞬時加載程序的一個單一功能模塊的程序架構。而Instant app module是瞬時加載程序的入口點,App module是功能程序的完整代碼部分。
好的,我們了解了模塊該如何劃分后,就可以具體來看下,劃分模塊時需要配置的詳細代碼了。(不要跟我說看代碼頭疼,我們都是程序員????)
2.構建單個功能模塊的Instant App想要構建單個功能模塊,我們假如按照最簡單的結構,可以分為如下:
Base features module
Android Instant Apps module
App module (APK)
這三個方面足以說明一個簡單的Instant App結構了。下面我們來逐個詳細的了解。
2.1 按模塊劃分 2.1.1 Base features moduleBase Features module的說明,我們可以從兩方面談起。
manifest文件的修改
在AndroidManifest.xml文件中,你需要修改application標簽的內容。像如下內容:
在這里,我們需要修改的東西會多一些。如果細心的同學會發現,其實修改的內容,和我們之前接觸的App Links的配置是一致的。這就應了我們之前所述的,Instant App的實現是依賴于App Links的。固然在配置上也是一致的。
這到底是為什么呢?
別忘了,我們根據之前的架構可知,base features module是所有module的基礎。也就是說,當系統加載程序時,首先加載的就是這個base features module,那么固然基礎信息也就被系統讀取到了。
所以你也就可以這么修改你的程序。當你需要一些基礎信息,比如
或許,你應該懂得,不是整個程序的基礎信息,都必須加載進base feature module的manifest中,應是需要的就加載,不需要的就不加載。
build.gradle的修改
這里指的gradle文件,是base feature的gradle配置文件。你可以在里面找到android的相關配置。在內部,添加baseFeature true這樣的配置即可。比如下面的代碼所示:
apply plugin: "com.android.feature" android { ... //add this line baseFeature true ... defaultConfig{ //delete applicationId ... } }
這樣系統在讀取gradle配置信息時,會知道這個模塊是屬于base feature,就會繼續找它相應的子模塊。你看Google大大已經封裝得多么簡潔了,真心爽啊。
2.1.2 Android Instant Apps module在這Instant App模塊內,情況有些特殊。這個模塊內不包含任何的代碼,只包含有構建信息的配置。比如下面的build.gradle文件配置:
apply plugin: "com.android.instantapp" ... dependencies { implementation project(":base") }
在這里,我們需要把apply plugin這個配置改為"com.android.instantapp",這是告知構建器本模塊是Instant App模塊。并且在dependencies模塊內,需要指定Instant App模塊是實現自誰,也就是從結構上它是誰的子結構。關于結構是怎么分,還需讀懂上面的【圖FeaturesSingle.png】為妙。
在這個模塊內,你可以刪除掉這個模塊代碼的src包,因為這個模塊內,沒有代碼,所以即使添加src包也是沒用的。故可以將其刪除。
2.1.3 App module (APK)在這個模塊里,如果你需要構建你的Instant App的話,那么這個模塊需要包含要所有功能的模塊內容和產品的APK。在這個模塊內也是比較特殊的 , manifest文件內不包含除
這里我們也有個配置樣例,可參考如下:
在上述代碼中,manifest內的package值,要和你的base feature module所配置的包名保持一致。并且你需要移除掉生成的
而在build.gradle文件內,我們也需要進行一些修改:
apply plugin: "com.android.application" ... dependencies { implementation project(":base") }
不難發現,如果我們需要構建一個完整的Instant App,我們需要在這個模塊內添加結構是實現自誰。根據上面的【圖FeaturesSingle.png】可知,我們這個模塊是實現自base模塊,所以我們需要在build.gradle內填寫實現自base模塊的語句配置。
2.2 總結在本章內,我們知道了如何將一個已有的項目,變為Instant App程序架構。其最主要的思想,我們可以總結如下:
抽象父feature module:
是將程序架構成擁有一個最頂級的feature module,這個feature module內集合你的Instant App或者其他子module在運行時需要的一些必要資源內容,包括Activity、Fragment等資源。這樣能相對減少你的子module的資源大小,從而減少你寶貴的流量消耗。
APK module及Instant App module,共同構成base feature module:
同第一條總結的,當你抽象出base級的feature后,他們構成總體的結構,包括apk module及instantapp module。當然這不僅限于這兩個!
Instant App應使用App Links作為功能的接入口:
因為App Links具有獨特的驗證方式,能與Google服務進行互通,且瞬時加載程序是依托于Chrome瀏覽器來進行交互的。所以需要使用App Links作為功能的接入口。如何驗證App Links的重要性也就不言而喻了。如果需要回顧這塊兒的課程,請翻閱之前我寫過的文章,在那里我有詳細介紹有關于App Links的使用。
3.多個feature構建你的Instant App如果想了解多個feature是如何工作的,那么你首先、務必、一定要理解上個章節的內容,也就是單個功能模塊是如何工作的,只有這樣你才能很快的理解本章節內容。
3.1 按模塊劃分多個feature工作起來其實并不復雜,原理跟單個feature其實是一樣的。這里我依照貼心的放上google的官方圖片來解釋:
有人會說,為什么你只會引官方的圖,而不自己做圖呢。我想說,官方的圖已經很簡明扼要的闡述了內容,我們為什么還要重復造輪子呢?
好了廢話不多說,來看圖說話。看上去連線之間交叉復雜,但是這里面包含很清晰的邏輯關系。別急,跟著我的思路,一點一點理解上面的圖。
第一,我們拋開淺綠色以上的圖先不看,我們只看淺藍色以下的部分。一個完整的Instant App,依舊有一個Base Feature,那么它可以引伸出兩個子feature,分別是Feature 1、Feature 2。這是什么意思呢?這和我們之前講過的內容正好相匹配上,一個父級的Feature,可能包含很多子級的Feature,而這些諸多的子Feature共同構成了一個完整的App功能。這也就是Instant App架構的精髓,把一個大的功能完全拆分成不同小部分的小功能,從而減少每個功能塊的代碼量的大小。
第二,我們再來看淺綠色的區域。我們會發現,Instant App module分別指向了Feature 1和Feature 2,并且App module也分別指向了Feature 1和Feature 2。這里有什么?膩么?
還記得App Links的特點么,在你要鏈接到的Activity,會在manifest文件處進行App Links的配置,鏈接到你想要訪問的Activity。而Instant App恰恰就是運用App Links的機制。也就是說,從Instant App程序入口的操作,會在內部識別你請求的到底是哪個Activity,也就是哪個功能Feature。這樣你才會看到,淺綠色的Instant App module分別指向了Feature 1和Feature 2。
第三,我們要格外注意的是,淺綠色的Instant app module和app module需要同時實現自深藍色的Base Feature,這需要在gradle配置文件內進行額外配置。圖中并沒有進行描述。這一點需要格外注意。
3.2 總結好了,這次我們就很容易的理解多個Feature是如何構架你的程序的。思路也不是很復雜,我們總結如下:
將你的程序的大功能模塊,分為若干個不同的小feature module。注意,我們之前提到過的不要忘記,每個feature module,盡量不要超過4MB大小。當然這僅僅是建議,盡量去滿足他。
Instant App module、app module,要實現自每個feature,這樣才能讓App Links找到不同功能的Feature module。
你的instant app module和app module(假設你有這兩個模塊作為實現feature的子模塊),那么你需要分別實現自base feature module。這樣你的子feature才能生效。
本文著重對Instant App程序架構的闡述,從基本的架構概念,到單個功能模塊的架構,再到復雜的多功能模塊架構,很詳細的說明了其結構上的關聯性,能讓你更輕松的理解Instant App程序開發。
不難看出,其實如果搞懂了Instant App程序架構,那么你在進行程序開發時就會變得易如反掌了。相信看完這篇文章后,后續的課程對于聰明的你來講,簡直可以輕松駕馭。
至此,關于Instant App程序開發,我們已經摸清了頭緒。我們可以很輕松的駕馭它,并且應用到自己的項目中了。
Enjoy it!!
廣告位:更多、更有料的IT前沿技術課程,盡在頂級云加。詳情請持續關注頂級云加的唯一官方網站:https://yunp.top
《Google新技術:Instant App全拆解》系列回顧:
第一篇:Google新技術:Instant App全拆解(1)——初探
第二篇:Google新技術:Instant App全拆解(2)——剖析
第三篇:Google新技術:Instant App全拆解(3)——著手
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/67855.html
摘要:只有當理解這些后,才能很順利的進行程序重構,或者進行程序開發。不難發現,這個功能,肯定和完整有著某種密切的聯系。還有另外一種情況。故可以將其刪除。及,共同構成同第一條總結的,當你抽象出級的后,他們構成總體的結構,包括及。 作者:Darkbug原文標題:Google新技術:Instant App全拆解(4)——架構(完結)原文鏈接:https://segmentfault.com/a/1...
摘要:系統環境要求開發不是在所有的集成開發環境都可以進行的。這里注意,的架構方式不能為的方式,絕對不能真機的準備工作運行于及以上的系統手機廠商親兒子三星服務框架已安裝在手機上。 作者:Darkbug原文標題:Google新技術:Instant App全拆解(3)——著手原文鏈接:https://segmentfault.com/a/11...首發地址:http://www.doncc.org...
閱讀 3064·2021-10-12 10:20
閱讀 2809·2021-09-27 13:56
閱讀 790·2021-09-27 13:36
閱讀 1424·2021-09-26 09:46
閱讀 2417·2019-08-30 14:02
閱讀 2685·2019-08-28 18:14
閱讀 1257·2019-08-26 10:32
閱讀 1700·2019-08-23 18:25