Android 熱修復+加固+多渠道打包+統計 技術總結

最近產品經理提了一個需求,讓我在App中集成上面四個技術,以前每個技術都單獨弄過,但是如果把這四個技術融合到一起,相互兼容還是第一次。

技術最終選型

使用流程

代碼中集成統計功能 ——> 用熱修復生成 Release App ——> 將 App 進行加固 ——> 將加固的 App 多渠道打包

具體詳情

熱修復

現在大部分熱修復使用的都是微信開源的 Tinker,如果直接拿過來使用,配置什么的有點麻煩,wiki 上的文檔看的也有點頭暈。
由于時間原因,我們現在最重要的是先快速集成測試,高級用法和原理來日方長。
推薦2個快速集成:

最開始集成的時候,我兩個都用過,集成方式都非常簡單,最后我選用了 Bugly,主要有幾點:

  1. 項目中集成了Bugly異常上報,很好用。
  2. Bugly 不收費,TinkerPatch 要收費。
  3. Bugly 官方對加固工具進行了兼容測試。

Q:熱修復和加固其實是有沖突的
如果用 Android Studio 自帶的多渠道打包工具,打出來的每個包都是有差異的,不能對每個包都進行一一加固,我們是程序猿,肯定要偷懶。并且一個熱修復不能通用所有的包。

如果你使用了微信的Tinker熱補丁方案,那么就需要為不同的渠道包打不同的補丁,這完全是不可以接受的。(因為Tinker是通過對比基礎包APK和新包APK生成差分補丁,然后再把補丁和基礎包APK一起合成新包APK。這就要求用于生成差分補丁的基礎包DEX和用于合成新包的基礎包DEX是完全一致的,即:每一個基礎渠道包的DEX文件是完全一致的,不然就會合成失敗)
《android新一代多渠道打包神器》

最后在網上找了很久,看了美團的 Walle 和其他的多渠道打包,最后選擇了 bugly 的哥們開發的 ApkChannelPackage

  • 使用超簡單
  • 都是企鵝自己的
  • 打包速度超快
多渠道打包工具對比.png

傳送門:

Android新一代多渠道打包神器
ApkChannelPackage插件接入文檔

加固

加固就沒什么說的,很簡單。
Bugly 的加固支持:

騰訊樂固
愛加密
梆梆加固
360加固(SDK 1.3.1之后版本支持)

ApkChannelPackage

使用這個多渠道打包速度好快,我打10個包1分鐘左右。
最開始集成這個時,遇到一些坑,記錄一下。
以下都是在 app/build.gradle 配置:

  • 直接生成多渠道包:
channel {
    //多渠道包的輸出目錄,默認為new File(project.buildDir,"channel")
    baseOutputDir = new File(project.buildDir, "channel")
    //多渠道包的命名規則,默認為:${appName}-${versionName}-${versionCode}-${flavorName}-${buildType}
    apkNameFormat = '${appName}-${versionName}-${versionCode}-${flavorName}-${buildType}'
}
  • 根據已有的 App 生成多渠道包,適合集成了熱修復的
rebuildChannel {
    //已有APK的名字必須包含base字符串,這樣插件生成多渠道包時,會用當前的渠道替換base字符串,形成新的渠道包
    baseReleaseApk = new File(project.projectDir, "base-app-release.apk")
    releaseOutputDir = new File(project.projectDir, "channelApk/")
}

生成的目錄在 app/channelApk 文件夾中。

  • 獲取多渠道號
String channel = ChannelReaderUtil.getChannel(getApplicationContext());
Logger.i("多渠道版本是:" + channel);
  • MTA 上傳版本號
StatConfig.setInstallChannel(channel);

MTA 統計

MTA 開發文檔中有這樣一個字段:MTA_CHANNEL

manifestPlaceholders = [
        MTA_APPKEY   : "XXXXXXX",
        MTA_CHANNEL  : "Test", 
]

后面才發現這個字段是在 Gradle 編譯時配置的渠道號,如果沒有多渠道統計,那所有的渠道都是設置的值“Test”。但是如果進行了MTA 上報版本號,會以最后上報的為準。

最終 App 集成成功并且上線,熱修復也沒問題。
終于可以開開心心回家了。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容