1. 程式人生 > >熱修復框架Tinker最完整講解(02)——加入Walle多渠道打包

熱修復框架Tinker最完整講解(02)——加入Walle多渠道打包

前言

上一篇文章 熱修復框架Tinker最完整講解(01)——整合之路 已經介紹我們的專案渠道包有20個,並且我們多渠道打包是採用productFlavors實現的。但是這種多渠道打包會造成20個渠道包的熱更新就需要20個補丁,這樣肯定是不合理的。那怎樣才能實現20個渠道包只需要一個補丁包呢?Tinker官方也說了,推薦我們多渠道打包使用Walle,這樣就能實現多個渠道包只使用一個補丁包了!

什麼是Walle?

Walle(瓦力):Android Signature V2 Scheme簽名下的新一代渠道包打包神器。
瓦力通過在Apk中的APK Signature Block區塊新增自定義的渠道資訊來生成渠道包,從而提高了渠道包生成效率,可以作為單機工具來使用,也可以部署在HTTP伺服器上來實時處理渠道包Apk的升級網路請求。
——介紹來自

Walle

整合

為了方便大家的使用,Walle提供了2種使用方式:(這裡主要講常用的第一種方式)

  • Gradle外掛方式,方便快速整合
  • 命令列方式,最大化滿足各種自定義需求

配置build.gradle

1,在專案的build.gradle 檔案中新增Walle Gradle外掛的依賴, 如下

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

2,在app的 build.gradle 檔案中apply這個外掛,並新增上用於讀取渠道號的AAR,如下:

apply plugin: 'walle'

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

3,在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的檔名稱, 預設值為'${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:包含渠道配置資訊的檔案路徑:

在app目錄下新建名為channel的檔案,如圖

這裡寫圖片描述

在該檔案裡寫上需要打包的渠道號(渠道號支援使用#號添加註釋。具體內容格式詳見下圖,這裡只測試2個渠道)

這裡寫圖片描述

相關API和命令

獲取渠道資訊

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

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

生成渠道包

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

生成渠道包 ./gradlew clean assembleReleaseChannels

更多API和命令可參考 更多用法

使用

在Android Studio的Terminal中輸入命令gradlew clean assembleReleaseChannels進行多渠道打包,當執行完成會出現BUILD SUCCESSFUL, 如圖:

這裡寫圖片描述

並且會在channels資料夾中生成所有渠道的apk,如圖:
這裡寫圖片描述

一一對應關係為:
這裡寫圖片描述

Tinker與Walle在真實專案中的使用流程

釋出版本流程

1,我們在釋出版本的時候都需要改版本號,因為我這裡使用版本名稱作為tinkerId,所以釋出版本修改版本名稱的時候,tinkerId也要跟著修改。(tinkerId主要作用是當前打出的補丁包是基於哪個版本的apk, tinkerId的選取見我下一篇文章 熱修復框架Tinker最完整講解(03)——使用Tinker常見問題)

這裡寫圖片描述

2, 檢查app build中是否開啟了熱修復功能, 即tinkerEnabled需要設定為true。如圖:
這裡寫圖片描述

3,打包前先建一個當前版本的分支!!!(熱更新修復bug就在該分支上修改)

4,在AS的Terminal中輸入命令gradlew clean assembleReleaseChannels進行多渠道打包
命令列執行完成會在channels資料夾中生成所有渠道的apk, 如圖:
這裡寫圖片描述

5,同時會在bakApk檔案中生成三個檔案,如圖: (這三個檔案需要儲存在本地,svn或者git伺服器,每次釋出補丁包的時候需要用到!)
這裡寫圖片描述

發補丁包流程

1,在新建的分支上修改bug

2,將釋出版本第5步中的三個檔案路徑複製到app build中對應的位置,如圖:
這裡寫圖片描述

3,修改bug

4,執行補丁命令獲取補丁包。單擊AS右側頂部gradle,雙擊tinkerPatchRelease,如圖:
這裡寫圖片描述

5,執行完成會在build->outputs->tinkerPatch->release資料夾中生成一個名為patch_signed_7zip.apk的補丁包,如圖:
這裡寫圖片描述

6,將該補丁包重修修改名字後發給後臺(注意:這裡的一個補丁包就適用於各個渠道包!),關於補丁包的存放與後臺設計請看下一篇文章熱修復框架Tinker最完整講解(03)——使用Tinker常見問題

7,bug修改完成後將該分支合併到trunk分支即可。這樣能保證分支上修改了bug,trunk分支也跟著更新了。

熱修復Tinker系列文章

相關推薦

修復框架Tinker完整講解02——加入Walle多渠道打包

前言 上一篇文章 熱修復框架Tinker最完整講解(01)——整合之路 已經介紹我們的專案渠道包有20個,並且我們多渠道打包是採用productFlavors實現的。但是這種多渠道打包會造成20個渠道包的熱更新就需要20個補丁,這樣肯定是不合理的。那怎

修復框架Tinker完整講解03——使用Tinker常見問題

前言 存放補丁包的平臺選取 1,存放在自己公司的伺服器 2,使用TinkerPatch平臺,需要收費 3,騰訊Bugly平臺,免費 為了安全與經濟考慮,我們公司選取了第一種。大家可以根據自己的需要選擇。 tinkerId應該如何選

修復框架Tinker完整講解01——整合之路

前言 上個月我們的產品又更新了一個版本,當一個測試把產品上傳了十幾個應用市場的時候,另外一個測試突然測出一個重要bug。專案經理就說把全部渠道上傳的先退回來,重新改好bug再發布。這時候我們就苦逼了,又要走一遍 簽名打包->加固->簽名-&

Android探索之旅第二十五篇騰訊修復框架Tinker與阿里第三代修復框架Sophix對比

本人在開發專案中仍然使用的還是Tinker熱修復框架,在專案中遇到Bug,Tinker都能夠解決,可以說是萬無一失,但是在網際網路時代也必須懷揣著新生的事物必將取代先前的事物的心態,因此就索性集成了Sophix,下面由我來分析一下它們之間的區別 從上

騰訊修復框架tinker

Tinker分析:   什麼是tinker? Tinker是騰訊出的一款熱修復框架,可以修復程式碼,資原始檔,so庫,但不能新增四大元件。 熱修復與增量更新的本質區別:增量更新是根據new.apk和old.apk按照bsdiff演算法,生成一個patch,然後將patch通過服務端

android 修復框架Tinker的詳細簡單使用

Tinker 騰訊開源熱修復框架,https://github.com/Tencent/tinker 已知的的問題 Tinker不支援修改AndroidManifest.xml,Tinker不支援新增四大元件(1.9.0支援新增非export的Activ

idea搭建簡單ssm框架詳細教程

為開發一個測試程式,特搭建一個簡單的ssm框架,因為網上看到很多都是比較老舊的教程,很多包都不能用了,eclipes搭建並且其中還附帶了很多的其他東西,所以特此記錄一下mac中idea搭建過程。 以下為一步步操作,詳細可循,完全學習了白居易寫詩的風格,堪稱傻瓜教程。   目錄結構已建好的童鞋,

Android修復框架匯總整理Hotfix

支付 業務開發 桌面 lib 業務 exce 修復技術 同進程 熱更新 ??Android平臺出現了一些優秀的熱更新方案,主要可以分為兩類:一類是基於multidex的熱更新框架,包括Nuwa、Tinker等;另一類就是native hook方案,如阿裏開源的Andfix和

手把手帶你打造一個 Android 修復框架上篇

本文來自網易雲社群作者:王晨彥前言熱修復和外掛化是目前 Android 領域很火熱的兩門技術,也是 Android 開發工程師必備的技能。目前比較流行的熱修復方案有微信的 Tinker,手淘的 Sophix,美團的 Robust,以及 QQ 空間熱修復方案。QQ 空間熱修復方

[Android]騰訊Tinker修復框架簡單使用

前言目前我們所知的熱修復方案有阿里的AndFix、美團的Robust以及QZone的超級補丁方案,還有本篇的Tinker,如何在我們的自開發的軟體上選用合適的方案呢?先看看各家的框架效能對比,在作參考。總體來說:AndFix作為native解決方案,首先面臨的是穩定性與相容性

Tinker修復框架接入

Tinker熱修復框架接入 Android現在開發App基本都開始接入熱修復框架,為的就是能夠修復一些線上緊急Bug。熱門的熱修復框架以及對比,網上介紹的也很多,個人而言就用過騰訊的tinker以及阿里的sophix。 騰訊tinkerTinker簡介,根據官方文件接入tinke

Tinker 1.9.11 釋出,微信開源的 Android 修復框架

   Tinker 1.9.11 釋出了,Tinker 是騰訊開源的 Android 熱解決方案庫,它支援在不重新安裝 apk 的情況下對 dex、library 和 resources 進行更新。 Bug 修復 引入JobSchedulerService重新實現了Tink

微信補丁修復框架--tinker

將patch_signed_7zip.apk這個檔案拷貝到Android裝置的ExternalStorageDirectory()路徑下(即SD卡目錄下).檔案的路徑和檔名可以隨意設定,只需在MainActivity中指明補丁Apk路徑即可(見圖6),正式使用時,上傳補丁到管理後臺,字尾最好不要apk,以

Tinker 修復框架 簡單上手教程

導言 前不久,騰訊推出了”微信小程式”這一概念,對移動原生應用的影響可謂巨大.而幾乎就在同時, 騰訊在GitHub上開源了第一個專案Tinker, 這是一個Android平臺的應用熱修復框架.可以在不重新安裝應用的情況下,對應用的程式碼/庫 /資源進行更

Andfix修復框架原理及源代碼解析-上篇

ren oid 聯系 pass 重命名 命名 key () 提示 熱補丁介紹及Andfix的使用 Andfix熱修復框架原理及源代碼解析-上篇 Andfix熱修復框架原理及源代碼解析-下篇 1.不知道怎樣使用的同學,建議看看我上一篇寫的介紹熱補丁和An

阿裏SopHix修復框架

控制臺 易用 com style compile 第一個 val 機制 二維 2015年以來,Android開發領域裏對熱修復技術的討論和分享越來越多,同時也出現了一些不同的解決方案,如QQ空間補丁方案、阿裏AndFix以及微信Tinker(Bugly sdk也集成Tikn

【深入理解Java集合框架】紅黑樹講解

時間復雜度 row lee tel framework 關系 eight logs return 來源:史上最清晰的紅黑樹講解(上) - CarpenterLee 作者:CarpenterLee(轉載已獲得作者許可,如需轉載請與原作者聯系) 文中所有圖片點擊之後均可查看大

修復 常見的修復框架簡介

des sim size idt source nor inf 美團 clas 常見的幾個熱修復框架的對比熱修復框架的種類繁多,按照公司團隊劃分主要有以下幾種:類別成員阿裏系AndFix、Dexposed、阿裏百川、Sophix騰訊系微信的Tinker、QQ空間的超級補丁、

介紹自己的一個Android插樁修復框架項目QuickPatch

pid android版本 通過 fly 特性 put javassist 執行 自動生成 QuickPatch項目地址:https://gitee.com/egg90/QuickPatch 和 https://github.com/eggfly/QuickPatch 同步

Unity3D遊戲輕量級xlua修復框架

一  這是什麼東西   前陣子剛剛整合xlua到專案,目的只有一個:對線上遊戲C#邏輯有Bug的地方執行修復,通過考察xlua和tolua,最終選擇了xlua,很大部分原因是因為專案已經到了後期,線上版本迭代了好幾次,所以引入Lua的目的不是為了開發新版本模組。xlua在我們的這種情況下很是適用