網站首頁 編程語言 正文
一.什么是多渠道打包
在不同的應用市場可能有不同的統計需求,需要為每個應用市場發布一個安裝包,這里就引出了Android的多渠道打包。在安裝包中添加不同的標識,以此區分各個渠道,方便統計app在市場的各種下載量、用戶數等關鍵數據。
多渠道打包的原理就是為我們每個平臺或者市場發布的apk指定一個唯一的標識符。通過這個標識符就可以知道被下載的apk是在哪個平臺市場下載的。
1.多版本
基于buildTypes
(1) debug:調試版本,無混淆
(2) release:發布版本,有混淆、壓縮
2.多環境
基于productFlavors
(1)develop:開發環境,開發和自測時使用
(2)check:測試環境,克隆一份生產環境的配置,在這里測試通過后,再發布到生產環境。之所以沒命名為test是因為在gradle編譯時:ProductFlavornamescannotstartwith'test'
(3)product:生產環境,正式提供服務的。
3.多渠道
基于Android新的應用簽名方案APKSignatureSchemev2中的APKSigningBlock區塊
我這里使用的是美團封裝的Walle庫。使用Walle庫請確保你的AndroidGradle插件版本在2.2.0以上。
為什么不直接使用productFlavors來打包多渠道?因為productFlavors打多渠道包太慢了,打30個包差不多十幾分鐘,無法忍受!
為什么不使用美團之前基于META-INF進行渠道標識的方案?因為Android7.0之后的這種黑科技已經失效了!
二.多渠道打包的方式(ProductFlavor&&多渠道打包插件)
1.ProductFlavor
Android基于 Gradle開發的一個插件里面的產品配置構建“變種”制作渠道包。
Gradle開發的插件是哪里來的???
1.首先項目有兩層build.gradle文件:
- build.gradle(本項目名稱) 最外層的build.gradle文件
- build.gradle(:app) app目錄下build.gradle文件
在頂層build.gradle文件中添加依賴
使用Gradle插件:
上面是導入多個插件使用plugins;
plugins {
? ? id 'com.android.application'
}
導入單個可以使用
apply plugin:'com.android.application'
就這樣我們就可以在 app目錄下build.gradle文件中的android節點使用ProductFlavor。
1.1 如何是使用ProductFlavor
flavorDimensions "default"
//方式1:(適用于多數據)
//讀取channel.txt渠道文件 創建flavor
file('channel.txt').readLines().each {
channel->
productFlavors.create(channel,{
dimension "default"
//替換AndroidManifest中的值
manifestPlaceholders=[channel1:channel]
})
}
//方式2:(比較常用:適用于少量)
productFlavors{
ywj{
}
wyw{
}
}
訪問的文件如圖所示:
他會生成多少個“變種”呢???
是根據你的productFlavors中的個數與buildTypes中的類型個數(一般是release+debug)
我這里沒有寫debug但是下面生成了對應的“變種”:注意 buildType 類型的debug是默認的,不寫也會默認存在。
這個按字母排序的。
1.2 如何是使用ProductFlavor加載apk包
使用Gradle工具欄下的Tasks中的build中的工具加載
點擊assembleRelesase試試水,看看發生了什么?
1.3 該如何獲取不同渠道包的信息
</activity> <meta-data android:name="CHANNEL_VALUE" android:value="${channel1}"/> </application> </manifest>
再不同的apk包中可以訪問不同的信息。關于怎么訪問AndroidManifest.xml里的數據會在以后進行學習!??!
1.4 使用ProductFlavor加載apk包的優缺點
優點:官方,可配置性高
缺點:每個渠道包需要執行完整的構建流程,非常的慢?。。?/p>
2.多渠道打包插件
這個方法很好的彌補了上一個打包方式的缺點。此時要多加一個依賴。底下目前展示的第二個依賴不可用,不過不要緊。你可以使用美團(walle)、騰訊(VasDolly)...等的多渠道打包插件
//引入插件
apply plugin: 'com.enjoy.channel'
channel{
? ? //基準包
? ? baseApk "${buildDir}/outputs/apk/release/app-release.apk"
? ? //輸出目錄
? ? outDir "${buildDir}/outputs/channel"
? ? //渠道信息
? ? channelFile "${projectDir}/channel.txt"
}
如圖所示:根據上面設置的路徑輸出。并且生成一個基準包后,輸出不同渠道包的速度變快了許多。當你再在channel.txt文件中再多加些數據,一樣也會很快的輸出。
原文鏈接:https://blog.csdn.net/indeedes/article/details/124061446
相關推薦
- 2023-11-26 String字符串類
- 2022-04-16 WPF框架Prism中模塊Module用法_基礎應用
- 2022-11-16 python?中collections的?deque使用詳解_python
- 2022-11-22 GoLang?channel關閉狀態相關操作詳解_Golang
- 2021-12-14 go調用shell命令兩種方式實現(有無返回值)_Golang
- 2022-10-01 iOS實現UIButton的拖拽功能_IOS
- 2022-07-21 Eslint代碼保存自動格式化
- 2023-01-02 GO比較兩個對象是否相同實戰案例_Golang
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支