1. 程式人生 > >Bugly多渠道(Walle)熱更新解決方案

Bugly多渠道(Walle)熱更新解決方案

上文中講了騰訊Bugly熱更新的接入和具體使用,還沒使用熱更新的小夥伴可以移步去看一下:

一、Bugly熱更新接入和使用

二、Bugly熱更新+Walle(瓦力)多渠道打包解決方案

三、Bugly熱更新+Walle(瓦力)多渠道打包+應用加固解決方案

這篇文章接著上一篇講一下多渠道熱更新解決方案,這裡安利一下Walle(瓦力):Android Signature V2 Scheme簽名下的新一代渠道包打包神器,如果想了解更多關於瓦力渠道打包的資訊,可以檢視這裡:新一代開源Android渠道包生成工具Walle

這裡預設大家已經接入了Bugly熱更新,這篇文章就介紹一個補丁修復所有渠道的解決方案。

一、接入Walle:

Gradle外掛使用方式

配置build.gradle
在位於專案的根目錄 build.gradle 檔案中新增Walle Gradle外掛的依賴, 如下:

buildscript {
    dependencies {
        classpath 'com.meituan.android.walle:plugin:1.1.6'
    }
}

並在當前App的 build.gradle 檔案中apply這個外掛,並新增上用於讀取渠道號的AAR

apply plugin: 'walle'

dependencies {
    compile 'com.meituan.android.walle:library:1.1.6'
}

並在當前App的 build.gradle 檔案中配置外掛

walle {
    // 指定渠道包的輸出路徑
    apkOutputFolder = new File("${project.buildDir}/outputs/channels");
    // 定製渠道包的APK的檔名稱
    apkFileNameFormat = '${appName}-${packageName}-${channel}-${buildType}-v${versionName}-${versionCode}-${buildTime}.apk';
    // 渠道配置檔案
    channelFile = new File("${project.getProjectDir()}/channel")
}

配置項具體解釋:

apkOutputFolder:指定渠道包的輸出路徑, 預設值為new File("${project.buildDir}/outputs/apk")

apkFileNameFormat:定製渠道包的APK的檔名稱, 預設值為’ a p p N a m e {appName}- {buildType}-${channel}.apk’

可使用以下變數:

projectName - 專案名字
appName - App模組名字
packageName - applicationId (App包名packageName)
buildType - buildType (release/debug等)
channel - channel名稱 (對應渠道打包中的渠道名字)
versionName - versionName (顯示用的版本號)
versionCode - versionCode (內部版本號)
buildTime - buildTime (編譯構建日期時間)
fileSHA1 - fileSHA1 (最終APK檔案的SHA1雜湊值)
flavorName - 編譯構建 productFlavors 名

channelFile:包含渠道配置資訊的檔案路徑。 具體內容格式詳見:渠道配置檔案示例,支援使用#號添加註釋,也就是在你的專案moudle下新建一個檔案,命名為channel(moudle上滑鼠右鍵——>New——>File),如下圖:
新建渠道檔案
這個檔案的內容就是你要打的包的渠道資訊,如下圖:
渠道具體內容
如何獲取渠道資訊

在需要渠道等資訊時可以通過下面程式碼進行獲取

String channel = WalleChannelReader.getChannel(this.getApplicationContext());

如何生成渠道包

生成渠道包的方式是和assemble${variantName}Channels指令結合,渠道包的生成目錄預設存放在 build/outputs/apk/,也可以通過walle閉包中的apkOutputFolder引數來指定輸出目錄

用法示例:

生成渠道包: gradlew clean assembleReleaseChannels
支援 productFlavors生成渠道包: gradlew clean assembleMeituanReleaseChannels

生成渠道包有兩種方式:

1、點選開啟Terminal,通過輸入命令gradlew clean assembleReleaseChannels的方式生成渠道包,這種方式會刪除之前執行打渠道包命令時生成的渠道包

如下圖:
Terminal命令列打包

2、點選Android Studio右側Gradle,選擇專案package目錄下的assembleReleaseChannels選項進行多渠道打包,這種方式不會刪除之前執行多渠道打包命令生成的渠道包

如下圖:
使用Gradle打渠道包
這兩種方式生成渠道包都很快,基本上幾十秒一分鐘左右就能完成20個左右的渠道包,這些渠道包預設在build——>outputs——>channels資料夾下,如下圖:
生成的渠道包
在執行多渠道打包命令的時候,也會自動打出Bugly熱更新的基準包,就跟正常打Bugly熱更新基準包的步驟是一樣的,基準包也是在build——>bakApk目錄下,如下圖:
熱更新基準包
下面就可以以這個基準包為標準打出補丁了,流程跟正常的打補丁包的過程是一樣的,這裡就不再介紹了。

當然你可以選擇使用Bugly統計渠道資訊:

//獲取渠道資訊
String channel = WalleChannelReader.getChannel(this);
Bugly.setAppChannel(this, channel);
// 這裡實現SDK初始化,appId替換成你的在Bugly平臺申請的appId,除錯時將第三個引數設定為true
Bugly.init(this, "811fdaa3d7", true);

我從channels資料夾下,隨便選了四個渠道包安裝在我的測試機上,上傳補丁後,均修復成功,也均統計到了相應的渠道資訊!

到這裡Bugly一個補丁修復所有渠道就介紹完了。

祝大家新的一年,生活愉快,工作順利!