1. 程式人生 > >熱修復框架Tinker最完整講解(03)——使用Tinker常見問題

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

前言

存放補丁包的平臺選取

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

tinkerId應該如何選擇?

tinkerId主要作用是區分當前打出的補丁包是基於哪個版本的apk,也就是說當前打出的補丁包能修復哪個版本的bug。每次釋出版本需要保證tinkerId一定是要唯一性的,Tiker官方推薦使用git版本號或者versionName作為tinkerId。我自己專案使用的是versionName,你可以將versionName配置在專案的gradle.properties檔案中,這樣就不用每次都修改tinkerId了。如圖:
這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

後臺介面的設計

問題:如果A使用者用1.0.0版本的APK,B使用者用2.0.0版本的APK,這個時候1.0.0和2.0.0都有對應的補丁包。介面該怎麼設計?

方案: (可以保證用1.0.0還是2.0.0的使用者都可以修復)
叫後臺給一個介面,前端傳versionName給後臺(這裡的versionName要保證和TinkerID一樣), 傳1.0.0後臺就返回1.0.0的補丁包。傳2.0.0後臺則返回2.0.0的補丁包。欄位後臺返回一個補丁包的連結就可以了,每次更新補丁包後臺都要換不同的連結(下面前端設計有講到)。沒有則返回空。

前端設計與問題

問題: 前端下載APK的時機和邏輯
方案: 放在啟動頁-SplashActivity請求比較好(越早請求越好),每次都去請求,把請求回來的連結儲存在本地,進行對比,連結不一樣則下載補丁包並載入。連結一樣則不用重複下載。

問題: 前端下載的時候需不需要提示使用者?
方案: 這個看產品經理的需求,一般可以不提示,我修復bug告訴你幹嘛…

問題: 如果1.0.0版本上線後,過了很久才發現有bug, 我的trunk主線程式碼已經改了很多了。這個時候打補丁包那不是把其他程式碼也認為是差異的程式碼,然後直接載入補丁包到1.0.0的apk上?這樣不合理吧?
方案:
釋出1.0.0版本後, 新建一個1.0.0的分支, 然後在1.0.0分支上修改bug,打出補丁包發給後臺,最後把1.0.0的程式碼merge到trunk主線即可。

問題: 要給同一個版本多次打補丁包,又怎樣弄呢?
直接在每次釋出版本新建的分支上修復bug,然後每次打不同的補丁包,就需要叫後臺返回不通的連線(為了區分該補丁包是否已載入過,上面後臺介面的設計有講到)。即都要以釋出時的版本作為基礎包進行bug修改。

問題:載入補丁包後,怎樣才能讓修改的bug生效呢?
解決:因為Tinker不是即時生效的。所以我們這裡不用處理,載入完補丁包,使用者退出下次進來就自然生效。

華為H60-L03 Android4.4.2手機上執行直接crash

最近測試的時候將專案執行在華為榮耀6(H60-L03)Android版本4.4.2的手機上就直接crash了,找資料發現其他人測試紅米2A Android4.4.4,華為 MT7-TL00 Android4.4.2都會出現同樣的問題(猜測5.0以下的手機都會出現該問題)。錯誤日誌如下:

Caused by: com.tencent.tinker.loader.TinkerRuntimeException: Tinker Exception:createDelegate failed

Tinker.UncaughtHandler: catch exception when loading tinker:java.lang.RuntimeException: Unable to instantiate application tinker.sample.android.app.SampleApplication: com.tencent.tinker.loader.TinkerRuntimeException: Tinker Exception:createDelegate failed

Caused by: java.lang.ClassNotFoundException: Didn't find class "com.wildma.wildmatinker.global.MyApplication" on path: DexPathList[[zip file "/system/framework/org.simalliance.openmobileapi.jar", zip file "/data/app/com.wildma.wildmatinker-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.wildma.wildmatinker-1, /vendor/lib, /system/lib, /data/datalib]]

經過自己測試,發現只有將tinkerEnabled設定為false的時候執行在該手機上才會報錯。最後在issues上找到作者解釋說是分包問題,如果關了tinkerEnabled。需要將ApplicationLike類放在main dex keep

解決一:開啟tinkerEnabled

解決二:如果想在關閉tinkerEnabled的時候又執行在5.0以下的手機上, 那必須自己寫分包規則。
1,將app/build/intermediates/tinker_intermediates/tinker_multidexkeep.pro檔案複製到app的根目錄下
2,在app build中對對應該檔案即可。

    defaultConfig {
        //其他。。。
        //tinker分包規則
        multiDexKeepProguard file("./tinker_multidexkeep.pro") //keep specific classes using proguard syntax
    }

熱修復Tinker系列文章

相關推薦

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

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

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

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

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

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

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

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

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

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

Android修復框架匯總整理Hotfix

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

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

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

騰訊修復框架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

[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 修復框架 簡單上手教程

導言 前不久,騰訊推出了”微信小程式”這一概念,對移動原生應用的影響可謂巨大.而幾乎就在同時, 騰訊在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在我們的這種情況下很是適用

Android圖片載入框架全解析,玩轉Glide的回撥與監聽筆記

參考原文:Android圖片載入框架最全解析(四),玩轉Glide的回撥與監聽 回撥的原始碼實現 的Target物件傳入到GenericRequest當中,而Glide在圖片載入完成之後又會回撥GenericRequest的onResourceReady()方法,onReso