Android多渠道打包神器ProductFlavor詳解
一.什么是多渠道打包
在不同的應(yīng)用市場可能有不同的統(tǒng)計(jì)需求,需要為每個應(yīng)用市場發(fā)布一個安裝包,這里就引出了Android的多渠道打包。在安裝包中添加不同的標(biāo)識,以此區(qū)分各個渠道,方便統(tǒng)計(jì)app在市場的各種下載量、用戶數(shù)等關(guān)鍵數(shù)據(jù)。
多渠道打包的原理就是為我們每個平臺或者市場發(fā)布的apk指定一個唯一的標(biāo)識符。通過這個標(biāo)識符就可以知道被下載的apk是在哪個平臺市場下載的。
1.多版本
基于buildTypes
(1) debug:調(diào)試版本,無混淆
(2) release:發(fā)布版本,有混淆、壓縮
2.多環(huán)境
基于productFlavors
(1)develop:開發(fā)環(huán)境,開發(fā)和自測時使用
(2)check:測試環(huán)境,克隆一份生產(chǎn)環(huán)境的配置,在這里測試通過后,再發(fā)布到生產(chǎn)環(huán)境。之所以沒命名為test是因?yàn)樵趃radle編譯時:ProductFlavornamescannotstartwith'test'
(3)product:生產(chǎn)環(huán)境,正式提供服務(wù)的。
3.多渠道
基于Android新的應(yīng)用簽名方案APKSignatureSchemev2中的APKSigningBlock區(qū)塊
我這里使用的是美團(tuán)封裝的Walle庫。使用Walle庫請確保你的AndroidGradle插件版本在2.2.0以上。
為什么不直接使用productFlavors來打包多渠道?因?yàn)閜roductFlavors打多渠道包太慢了,打30個包差不多十幾分鐘,無法忍受!
為什么不使用美團(tuán)之前基于META-INF進(jìn)行渠道標(biāo)識的方案?因?yàn)锳ndroid7.0之后的這種黑科技已經(jīng)失效了!
二.多渠道打包的方式(ProductFlavor&&多渠道打包插件)
1.ProductFlavor
Android基于 Gradle開發(fā)的一個插件里面的產(chǎn)品配置構(gòu)建“變種”制作渠道包。
Gradle開發(fā)的插件是哪里來的???
1.首先項(xiàng)目有兩層build.gradle文件:
- build.gradle(本項(xiàng)目名稱) 最外層的build.gradle文件
- build.gradle(:app) app目錄下build.gradle文件
在頂層build.gradle文件中添加依賴
使用Gradle插件:
上面是導(dǎo)入多個插件使用plugins;
plugins {
id 'com.android.application'
}
導(dǎo)入單個可以使用
apply plugin:'com.android.application'
就這樣我們就可以在 app目錄下build.gradle文件中的android節(jié)點(diǎn)使用ProductFlavor。
1.1 如何是使用ProductFlavor
flavorDimensions "default" //方式1:(適用于多數(shù)據(jù)) //讀取channel.txt渠道文件 創(chuàng)建flavor file('channel.txt').readLines().each { channel-> productFlavors.create(channel,{ dimension "default" //替換AndroidManifest中的值 manifestPlaceholders=[channel1:channel] }) } //方式2:(比較常用:適用于少量) productFlavors{ ywj{ } wyw{ } }
訪問的文件如圖所示:
他會生成多少個“變種”呢???
是根據(jù)你的productFlavors中的個數(shù)與buildTypes中的類型個數(shù)(一般是release+debug)
我這里沒有寫debug但是下面生成了對應(yīng)的“變種”:注意 buildType 類型的debug是默認(rèn)的,不寫也會默認(rèn)存在。
這個按字母排序的。
1.2 如何是使用ProductFlavor加載apk包
使用Gradle工具欄下的Tasks中的build中的工具加載
點(diǎn)擊assembleRelesase試試水,看看發(fā)生了什么?
1.3 該如何獲取不同渠道包的信息
</activity> <meta-data android:name="CHANNEL_VALUE" android:value="${channel1}"/> </application> </manifest>
再不同的apk包中可以訪問不同的信息。關(guān)于怎么訪問AndroidManifest.xml里的數(shù)據(jù)會在以后進(jìn)行學(xué)習(xí)?。?!
1.4 使用ProductFlavor加載apk包的優(yōu)缺點(diǎn)
優(yōu)點(diǎn):官方,可配置性高
缺點(diǎn):每個渠道包需要執(zhí)行完整的構(gòu)建流程,非常的慢!?。?/p>
2.多渠道打包插件
這個方法很好的彌補(bǔ)了上一個打包方式的缺點(diǎn)。此時要多加一個依賴。底下目前展示的第二個依賴不可用,不過不要緊。你可以使用美團(tuán)(walle)、騰訊(VasDolly)...等的多渠道打包插件
//引入插件
apply plugin: 'com.enjoy.channel'
channel{
//基準(zhǔn)包
baseApk "${buildDir}/outputs/apk/release/app-release.apk"
//輸出目錄
outDir "${buildDir}/outputs/channel"
//渠道信息
channelFile "${projectDir}/channel.txt"
}
如圖所示:根據(jù)上面設(shè)置的路徑輸出。并且生成一個基準(zhǔn)包后,輸出不同渠道包的速度變快了許多。當(dāng)你再在channel.txt文件中再多加些數(shù)據(jù),一樣也會很快的輸出。
到此這篇關(guān)于Android多渠道打包神器ProductFlavor詳解的文章就介紹到這了,更多相關(guān)Android ProductFlavor內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Android中 視頻屏幕左半部分上下滑動改變亮度右半部分上下滑動改變聲音
這篇文章主要介紹了Android中 視頻屏幕左半部分上下滑動改變亮度右半部分上下滑動改變聲音的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2016-09-09Android開源組件SlidingMenu側(cè)滑菜單使用介紹
這篇文章主要介紹了Android開源組件SlidingMenu側(cè)滑菜單使用介紹,本文給出了SlidingMenu的項(xiàng)目地址、使用代碼、使用配置、常用的一些屬性設(shè)置中文注解等內(nèi)容,需要的朋友可以參考下2015-01-01android加密參數(shù)定位實(shí)現(xiàn)方法
這篇文章主要介紹了android加密參數(shù)定位方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-04-04Android自定義滑動刪除效果的實(shí)現(xiàn)代碼
這篇文章將從現(xiàn)有 Android 滑動刪除的痛點(diǎn),到搭建好一個基本的框架,到最終提供一份完整的 Demo為止,爭取為讀者提供最大的可定制化,需要的朋友可以參考下2018-03-03Flutter?DateTime獲取本月的開始時間與結(jié)束時間方法
這篇文章主要為大家介紹了Flutter?DateTime獲取本月的開始時間與結(jié)束時間方法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪2023-05-05Android Compose自定義TextField實(shí)現(xiàn)自定義的輸入框
眾所周知Compose中默認(rèn)的TextField和OutlineTextField樣式并不能滿足所有的使用場景,所以自定義TextField就成了必備技能。本文將自定義TextField實(shí)現(xiàn)自定義的輸入框,感興趣的可以了解一下2022-03-03實(shí)例詳解Android Webview攔截ajax請求
本篇內(nèi)容主要給大家講解了Android Webview攔截ajax請求的詳細(xì)講解,需要的朋友一起來學(xué)習(xí)一下。2017-11-11Android RecyclerView緩存復(fù)用原理解析
RecyclerView是Android一個更強(qiáng)大的控件,其不僅可以實(shí)現(xiàn)和ListView同樣的效果,還有優(yōu)化了ListView中的各種不足。其可以實(shí)現(xiàn)數(shù)據(jù)縱向滾動,也可以實(shí)現(xiàn)橫向滾動(ListView做不到橫向滾動)。接下來講解RecyclerView的用法2022-11-11