Android ProductFlavor的使用詳解
前言
最近一直在學(xué)習(xí)Android Gradle 相關(guān)的知識點(diǎn),今天剛好看到了 ProductFlavor 這節(jié),ProductFlavor 表示產(chǎn)品風(fēng)味,Google 相關(guān)的文檔可以看 Android developers ProductFlavor ,產(chǎn)品風(fēng)味這詞起的還是挺有意思的,乍看上去我一時(shí)半會也不理解這是干嘛的,如果說是用于區(qū)分打包的那么我 gradle 文件里的 buildTypes 不是就已經(jīng)夠用了嗎,所以我花了一點(diǎn)時(shí)間重新看了下,按照我的理解如果你只是中小型的項(xiàng)目不涉及區(qū)分不同地區(qū)用戶打不用的包的那么 ProductFlavor 基本上也沒什么用處,但如果你項(xiàng)目里要區(qū)分國內(nèi)版和國外版甚至還要根據(jù)用戶是否是VIP會員加上收費(fèi)和免費(fèi)的版本,這種情況下就會出現(xiàn)國內(nèi)收費(fèi)、免費(fèi)國外收費(fèi)、免費(fèi)的版本,在極端點(diǎn),我收費(fèi)和免費(fèi)的版本在相同頁面上甚至顯示的UI布局和icon圖標(biāo)資源都不一樣,這種情況又該怎么處理呢,ProductFlavor 的出現(xiàn)就非常友好的幫助我們開發(fā)者解決了上述的版本區(qū)分。
productFlavors
productFlavors 的用法很簡單,主要是用來多渠道打包使用,直接在 android 閉包下定義 productFlavors 就可以了,在我的例子中我的APP定位為收費(fèi)和免費(fèi)版本,所以我需要在 2 處定義我的“產(chǎn)品風(fēng)味”也就是我要打包的渠道(收費(fèi)和免費(fèi)版本的兩個(gè)不同APP的渠道),注意下在目前的AS中如果你僅僅只是定義了 代碼2 ,那么在構(gòu)建的時(shí)候必然會報(bào) 3 處的錯(cuò)誤,沒有定義產(chǎn)品緯度,所以為了解決這個(gè)問題,我們在代碼1處定義了一個(gè)“是否付費(fèi) isPaying ”的緯度。
如圖,在我們定義好了是否付費(fèi)的緯度以及付費(fèi)和免費(fèi)的產(chǎn)品風(fēng)味之后,你會發(fā)現(xiàn)現(xiàn)在構(gòu)建出來了4個(gè)構(gòu)建變體,也就是在free和charge風(fēng)味下各自構(gòu)建了debug和release的變體,現(xiàn)在我們有了兩個(gè)不同的風(fēng)味,如果我想安裝到手機(jī)上是兩個(gè)不同的APK又改怎么處理呢?首先我們的包名就不能相同,在free和charge閉包下定義:
productFlavors{ free{ applicationId 'com.example.gradle.free' } charge{ applicationId 'com.example.gradle.charge' } }
根據(jù)上面的配置最后在手機(jī)上跑的是兩個(gè)APK,這個(gè)我已經(jīng)驗(yàn)證過了,盡管如此還是沒體現(xiàn)出差異化,我們接下來改變下代碼的邏輯,在他們的app名以及首頁修改下
看我們的紅框處,我已經(jīng)將他們的app的名稱全改掉了,怎么處理的呢?
productFlavors{ free{ applicationId 'com.example.gradle.free' resValue "string",'appName','免費(fèi)版' } charge{ applicationId 'com.example.gradle.charge' resValue "string",'appName','收費(fèi)版' } }
首先我還是修改了 productFlavors 中的代碼,定義了一個(gè) resValue,這個(gè)參數(shù)你可以理解為在不同的風(fēng)味下定義標(biāo)簽的意思,比如說我在代碼中分別為 free 和 charge 風(fēng)味定義了 resValue 標(biāo)簽,那么在構(gòu)建他們變體的時(shí)候就可以引用到這個(gè)標(biāo)簽
如圖,我還新定義了兩個(gè)文件夾“free”和“charge”,如果你想做差異化的話就必須根據(jù)產(chǎn)品風(fēng)味來定義文件夾,這里因?yàn)閼?yīng)用的名稱是在清單文件里配置的,所以各自copy了一份,我反正理解的是既然是差異化那么從main里面將有差異的文件copy出來修改就可以了,當(dāng)然了里面的包名,路徑之類的還是得要一致的,講到這其實(shí)大家也就明白了,如果你想在不同的APP頁面里做差異化,那么就按照這個(gè)套路來就可以了,所以“修改首頁(MainActivity)”的任務(wù)就交給大家了,自己動手體會下。
flavorDimensions多緯度
什么是多緯度,比說是否付費(fèi)是一個(gè)緯度,國家是一個(gè)緯度,在上圖中我又定義了一個(gè) nation 緯度,注意如果你定義了一個(gè)緯度那么必須要使用到它,在各個(gè)產(chǎn)品風(fēng)味下通過 dimension 來決定你的風(fēng)味是使用的哪一個(gè)緯度,free 和 charge使用了 isPaying ,china 和 france 使用了 nation,那么多緯度的作用也就是為了更加精細(xì)的區(qū)分你的APP,如 3 通過這種方式,我完全可以可以打包出不同國家的差異化APP,是不是很靈活呢,不過一般情況下也用不到那么精細(xì),不然這個(gè)項(xiàng)目光是維護(hù)就很頭疼,好,到最后我們可以得出一個(gè)公式 【緯度1的產(chǎn)品風(fēng)味數(shù)量】 * 【緯度2的產(chǎn)品風(fēng)味數(shù)量】 * buildType數(shù)量 = 最終的APK變體數(shù)量。
以上就是Android ProductFlavor的使用詳解的詳細(xì)內(nèi)容,更多關(guān)于Android ProductFlavor的使用的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
MVVM和MVVMLight框架介紹及在項(xiàng)目中的使用詳解
這篇文章主要為大家介紹了MVVM和MVVMLight的介紹及在項(xiàng)目中的使用詳解有需要的朋友可以借鑒參考下,祝大家除夕快樂多多進(jìn)步2022-01-01Android用 Mob 實(shí)現(xiàn)發(fā)送短信驗(yàn)證碼實(shí)例
這篇文章主要介紹了Android用 Mob 實(shí)現(xiàn)發(fā)送短信驗(yàn)證碼實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06OpenHarmony如何調(diào)用電話服務(wù)API撥打電話
OpenHarmony3.1版本標(biāo)準(zhǔn)系統(tǒng)增加了通話相關(guān)的聯(lián)系人應(yīng)用,來電應(yīng)用等,在系統(tǒng)服務(wù)層面電話相關(guān)功能也比較完善,這篇文章主要介紹了OpenHarmony如何調(diào)用電話服務(wù)API撥打電話2022-11-11Android SharedPreferences的使用分析
本篇文章小編為大家介紹,Android SharedPreferences的使用分析。需要的朋友參考下2013-04-04Android編程調(diào)用Camera和相冊功能詳解
這篇文章主要介紹了Android編程調(diào)用Camera和相冊功能,結(jié)合實(shí)例形式分析了Android的拍照及相冊調(diào)用功能相關(guān)實(shí)現(xiàn)技巧與操作注意事項(xiàng),需要的朋友可以參考下2017-02-02android操作SQLite增刪改減實(shí)現(xiàn)代碼
android操作SQLite增刪改減實(shí)現(xiàn)代碼,學(xué)習(xí)android的朋友可以參考下。2010-11-11Android自定義View實(shí)現(xiàn)隨手勢滑動控件
這篇文章主要為大家詳細(xì)介紹了Android自定義View實(shí)現(xiàn)隨手勢滑動的控件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-02-02Android移動開發(fā)recycleView的頁面點(diǎn)擊跳轉(zhuǎn)設(shè)計(jì)實(shí)現(xiàn)
這篇文章主要介紹了Android移動開發(fā)recycleView的頁面點(diǎn)擊跳轉(zhuǎn)設(shè)計(jì)實(shí)現(xiàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05