[Android]元件化-重新認識AndroidManifest

Cang_Wang發表於2019-03-04

大家好,我係蒼王。

以下是我這個系列的相關文章,有興趣可以參考一下,可以給個喜歡或者關注我的文章。

[Android]如何做一個崩潰率少於千分之三噶應用app–章節列表

我們最開始開發需要了解的除了Activity,估計就是AndroidMainfest了。

但是當你使用元件化運用到你的工程的時候,你真的瞭解你的AndroidManifest組成嗎?

我在第十二章Actvity頁面跳轉和第十五章Application元件化的時候有提到過AndroidManifest的變化,近來也有不少QQ群裡的同學向我提到,AndroidMainfest的變化的獨特性,我決定這裡整理介紹一下。

以下都是以我的ModuleBus(https://github.com/cangwang/ModuleBus)的程式碼為例,有興趣可以下載對著觀看一下

一.註冊Activity[Android]元件化-重新認識AndroidManifest

那麼我們在最終合成的AndroidMainfest(地址是app/build/intermediates/manifests/full)裡面將會看到

[Android]元件化-重新認識AndroidManifest

這裡可以帶入隱式intent啟動,具體請看第十二節的頁面跳轉

二.註冊Application

這裡App只允許存在著一個Application。

(1)如果某個功能module有Application,主module木有自定義Application,這時候會自然引用功能module的Application

(2)如果主module有自定義Application,其他module木有,自動引入主module的

(3)如果功能module中有兩個自定義Application,那麼需要解決衝突後,你會發現,Application最終會載入的後編譯的module的Application

(4)如果主module中有自定義Application,其他功能module也有自定義Application,在解決衝突後,你會發現最後編譯的主module的Application會在AndroidManifest裡面

這個可以檢視我第十六節的元件化Application

三.許可權相關

(1)如果有在一個功能module中宣告許可權

[Android]元件化-重新認識AndroidManifest

那麼在主module中可以看到

[Android]元件化-重新認識AndroidManifest

(2)如果我其他module再申請同樣的許可權呢?

[Android]元件化-重新認識AndroidManifest

這裡告訴你們答案,最終的AndroidManifest會合並這個許可權。所以相同的許可權只會宣告一次。

那麼結合我們第十一節所介紹功能module可以從lib轉為application開發,如果為了以後除錯的方便,請把模組中所需要的許可權宣告一下,這樣會避免不必要的許可權遺漏問題。當然base module全部都會被依賴到,所以其宣告的許可權全部都會有的。

這個問題是QQ群內有同學提問6.0的許可權提示封裝在元件化應該如何做?在這裡就是解答了。

四.主題

(1)Activity的主題,因為每個Activity應該都是獨立宣告的,所以每個Activity主題都應該會被承接到AndroidManifest裡面。

[Android]元件化-重新認識AndroidManifest

(2)Application的主題,將會設定為最終編入到AndroidManifest的那個自定義Application的android:theme裡面。

[Android]元件化-重新認識AndroidManifest

五.Service

Service也是能通過隱式來完成操作的。

[Android]元件化-重新認識AndroidManifest

這是在最終的AndroidManifest裡面,可以看到android:name都是 module包名+類名

[Android]元件化-重新認識AndroidManifest

我們可以想象一下四大元件其啟動宣告規則都應該是一樣的,那麼最終合成AndroidManifest裡都用這樣的方式module包名+類名區分每個module的四大元件,其裡面的相關屬性都會完全轉移到最終合成的AndroidManifest裡面。那麼broadcast和contentProvider猜想應該也是一樣的。

六.sharedUid

通過Shared User id,擁有同一個User id的多個APK可以配置成執行在同一個程式中.所以預設就是可以互相訪問任意資料。

(1)如果我們只是在功能module中宣告sharedUid,那麼最終的AndroidManifest會如何呢?

其不會將這個功能module的sharedUid放到最終的AndroidManifest中。

(2)經過試驗,只有在主module(生成app的module)宣告sharedUid,才會最終打包到full AndroidManifest中。

[Android]元件化-重新認識AndroidManifest

可以簡單推斷出,manifest裡面宣告的屬性,full AndroidManifest只會將主module裡面的屬性合成到裡面

這一節介紹就到這裡,

下一節將會更經常,敬請期待!!!

群號是316556016,也可以掃碼進群。我在這裡期待你們的加入!!!

[Android]元件化-重新認識AndroidManifest

相關文章