【Android進階】1小時學會熱更新--Tinker
![1411177-47e75876892547d7.png](https://i.iter01.com/images/1762e1826aaf130f8b93a1d93a1fdb4c68d59fcb78671b68fba7250c476ba822.png)
Tinker
玩Dota的應該知道
熱更新
熱補丁技術也可以理解為一個動態修改程式碼與資源的通道,它適合於修改量較少的情況。
本文你將獲悉
- 【主流熱更新框架的簡單比較】
- 【Tinker能做什麼】
- 【 Tinker不能做什麼】
- 【利用Tinker Platform實現熱更新詳細步驟】
- 【
複雜的熱更新原理】 - 【
繁瑣的補丁製作流程】
部分資料來自 tinker官方文件
主流熱更新框架的簡單比較
![1411177-86b048395f4f83e4.png](https://i.iter01.com/images/90d1cac1b77534880b7ae210fe7f1f405f68b2f104b344e00f5da6786565d195.png)
image.png
Gitbut表現 (2017-12-08 15:00)
![1411177-c701fd3b4e023ab3.png](https://i.iter01.com/images/38c871209fd56d51103bac7eda82395fc61fcb428fa4efac024409e96824938f.png)
image.png
![1411177-0b7c0f01c0d7b3b7.png](https://i.iter01.com/images/bbd968d6bbfaa0094b8bcd2954b278b9338f897eb9e6e359d00cdf70dcf25d1e.png)
image.png
![1411177-6cdadf4ec1762907.png](https://i.iter01.com/images/075d75f0aa96161e28411c534abbb1d2e320bf27ec89f4d832e3658dcf38f4ca.png)
image.png
Tinker能做什麼
- 新增刪除類,方法
- 替換so包
- 資源替換
- 修改Activity,包括新增和刪除
- 結合Tinker Platform熱更新服務平臺進行更新包下發
- 獲取更新補丁後,在下次APP重啟(執行緒級)時完成更新
雖然更修改的專案沒多到讓你為所欲為的地步,但也足夠你應付產品經理的蜜汁需求或者關起門來偷偷改自己埋下的小bug,絕對不告訴別人
Tinker不能做什麼
- Tinker不支援修改AndroidManifest.xml,Tinker不支援新增四大元件(1.9.0支援新增非export的Activity);
- 由於Google Play的開發者條款限制,不建議在GP渠道動態更新程式碼;
- 在Android N上,補丁對應用啟動時間有輕微的影響;
- 不支援部分三星android-21機型,載入補丁時會主動丟擲"TinkerRuntimeException:checkDexInstall failed";
- 對於資源替換,不支援修改remoteView。例如transition動畫,notification icon以及桌面圖示。
利用Tinker Platform實現熱更新
第一步:配置gradle
工程目錄下新增外掛
![1411177-f2c37fa45eda1371.png](https://i.iter01.com/images/f30d5db01263a69c1ff49f65be8b0685f6c9f5745d550f354da90a784ce17b15.png)
image.png
buildscript {
repositories {
jcenter()
google()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.0.0'
classpath "com.tinkerpatch.sdk:tinkerpatch-gradle-plugin:1.2.1"
}
}
app目錄下gradle配置依賴compile("com.tinkerpatch.sdk:tinkerpatch-android-sdk:1.2.1"),並新增Tinker配置gradle【tinkerpatch.gradle】
![1411177-c1645c88e6767efb.png](https://i.iter01.com/images/e64bdb725c7043030d7c747c1c8cbc12a8bdb47b265667c6cac94d4d393f9f2d.png)
image.png
第二步:API 操作(具體看Demo)
public class App extends Application {
ApplicationLike tinkerAppLike;
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
}
@Override
public void onCreate() {
super.onCreate();
if (BuildConfig.TINKER_ENABLE){
tinkerAppLike = TinkerPatchApplicationLike.getTinkerPatchApplicationLike();
TinkerPatch.init(tinkerAppLike)
//是否自動反射Library路徑,無須手動載入補丁中的So檔案
//注意,呼叫在反射介面之後才能生效,你也可以使用Tinker的方式載入Library
.reflectPatchLibrary()
//設定收到後臺回退要求時,鎖屏清除補丁,預設是等主程式重啟時自動清除
.setPatchRollbackOnScreenOff(true)
//設定補丁合成成功後,鎖屏重啟程式,預設是等應用自然重啟
.setPatchRestartOnSrceenOff(true);
}
}
}
在合適的時候獲取補丁
TinkerPatch.with().fetchPatchUpdate(true);
在客戶端獲取補丁後,Tinker會根據配置選擇在鎖屏的時候或者重啟的時候自動完成補丁修補。
第三步:利用外掛生成增量APK
![1411177-0e21284d5ba316ec.png](https://i.iter01.com/images/f527c0518ba93b52f980762441e34301b839dbc422025207c2fb1184f61d82ca.png)
image.png
第四不:上傳到Tinker Platform平臺
![1411177-dd4753240c19e625.png](https://i.iter01.com/images/d9205915d296fda93bb34e248838330de83dddd88714b4d2d679ec070b048c2e.png)
釋出補丁
![1411177-bb49579ce20739f3.png](https://i.iter01.com/images/5f235c331f469ff107281c5a271c08f8ae6723bc7ecea4183a1de2e8af10743b.png)
實時監控
總結
- 在一個基礎包上可以新增多個補丁
為什麼要選Tinker? - 傻瓜式一鍵生成補丁,AndFix要用apkpatch工具配合命令生成.patch檔案
- 長期維護
- 長江後浪推前浪,吸取主流框架的經驗和教訓,獨創補丁演算法
- 有信心把熱更新做成商業級產品,還有誰
一個框架如果沒有良好的維護,那麼最開始就不要使用或者早點棄用,在對比了多個主流熱更新框架的github上的star數,未解決的issues數後,你就會知道,其實Tinker現在【根本】【沒有】【對手】。
一個好的框架應該也是一個容易使用的框架,我們的目的是拿來能直接幹活,如果使用過於複雜,過多的時間用在了研究原理上就得不償失了,畢竟熱修復不是簡單的東西。比起其它熱修復框架,Tinker最大優勢是多了平臺支援,可支援補丁下發及管理,實時監控補丁安裝動態,讓熱修復變得更簡單,更接地氣,玩家不用自己搭建平臺下發更新補丁,絕對是小公司和個人專案的福音。而且Tinker已經平鋪在騰訊系產品中,幾億裝置上執行,和大廠共進退,不用擔心沒人維護,有問題無法解決。如果你暫時沒有找到合適的,可以一試。
就像阿里技術的萬壑說的,專業的事情交給專業的人去做,開發者應該把更多的經歷放到自己的核心業務之中。
TinkerDemo
![1411177-ab4f39d2306f8555.png](https://i.iter01.com/images/43a213ebf3bd68f2bd1ad9dce334215a38054d70777a42bf1b619122d59b9bec.png)
image.png
相關文章
- Android進階之Walle多渠道打包&Tinker熱修復Android
- Android熱修復之Tinker整合最新詳解Android
- 1小時學會Git玩轉GitHubGithub
- 限時1元領,僅需6小時輕鬆進階大前端前端
- Android進階(八)熱修復基本原理Android
- Android熱更新實現方式Android
- Android進階必學retrofit原始碼解析Android原始碼
- 簡單易懂的tinker熱修復原理分析
- Flutter Android 端熱修復(熱更新)實踐FlutterAndroid
- Android端Flutter熱更新,相容FlutterBoostAndroidFlutter
- solidity進階(更新中)Solid
- Android進階:四、RxJava2 原始碼解析 1AndroidRxJava原始碼
- 會計進階學習路線圖
- redis進階之快取管理(1課時)Redis快取
- Android進階:十、自定義視訊播放器 1Android播放器
- LINUX進階(持續更新)Linux
- Android進階(七)Android中的ClassLoaderAndroid
- Android高階進階之路【三】看完這篇再不會Android動畫框架,我跪搓衣板Android動畫框架
- Android進階知識:ThreadLocalAndroidthread
- Android Gradle進階配置指南AndroidGradle
- React進階小冊React
- 高階 Android 工程師的進階之路Android工程師
- 使用更新補丁對Android Studio進行更新。Android
- React進階篇1React
- Java進階學習之集合與泛型(1)Java泛型
- Android 騰訊Bugly熱更新接入(Kotlin語言)AndroidKotlin
- 【Android進階】RecyclerView之ItemDecoration(一)AndroidView
- Android面試題——進階篇Android面試題
- Android應用開發進階Android
- Android自我進階——JAVA之JVMAndroidJavaJVM
- Android進階(六)Binder機制Android
- 壞訊息:Flutter官方暫時不會開發熱更新(Code push)了。Flutter
- Android進階三部曲 第二部《Android進階解密》已出版Android解密
- 掘金 AMA:聽《Android進階解密》作者--劉望舒聊 Android 開發、進階那些事Android解密
- Android高階進階之路【一】Android中View繪製流程淺析AndroidView
- 最全的less筆記,半小時學會!筆記
- 跟著 AI 一個小時學會 PythonAIPython
- 從ClassLoader到Android外掛化以及熱更新原理Android
- Android進階:十四、熟悉Android打包編譯的流程Android編譯