Android熱修復之 - 阿里開源的熱補丁

1.1 基本介紹
 
  我們先去github上面了解它https://github.com/alibaba/AndFix

這里就有一個概念那就AndFix.apatch補丁用來修復方法,接下來我們看看到底是怎么實現的。

  
1.2 生成apatch包
  
  假如我們收到了用戶上傳的崩潰信息,我們改完需要修復的Bug,這個時候就會有一個新的的apk我們就叫它為new.apk,原來的那個有Bug的apk你也有我們就叫它old.apk。這個時候我們就可以利用阿里github上面提供的工具生成一個xxxx.apatch包用于修復Bug。

命令是:apkpatch.bat -f <new> -t <old> -o <output> -k <keystore> -p <> -a <alias> -e <>

-f : 沒有Bug的新版本apk
-t : 有bug的舊版本apk
-o : 生成的補丁文件所放的文件夾
-k : 簽名打包密鑰
-p : 簽名打包密鑰密碼
-a : 簽名密鑰別名
-e : 簽名別名密碼(這樣一般和密鑰密碼一致)

我的是這樣子:

apkpatch.bat -f new.apk -t old.apk -o out -k joke.jks -p 240336124 -a 內涵段子 -e 240336124

生成的補丁:

?

?

1.3 修復apatch包

怎么獲取apatch包呢?我們肯定是請求接口獲取下載我們的修復好的apatch包,當然有可能沒有就太好了佛祖保佑。下載下來之后我們就可以調用方法進行修復了,我們可以暫時放在本地測試一下,這些代碼肯定之前就得寫好:

public class BaseApplication extends Application {// Patch管理類public static PatchManager mPatchManager;@Overridepublic void onCreate() {super.onCreate();// 捕捉崩潰信息ExceptionCrashHandler.getInstance().init(this);// Ali熱修復try {mPatchManager = new PatchManager(this);// 初始化patch版本String pkName = this.getPackageName();String versionName = getPackageManager().getPackageInfo(pkName, 0).versionName;// 初始化版本名稱
            mPatchManager.init(versionName);// 加載之前的patch
            mPatchManager.loadPatch();} catch (PackageManager.NameNotFoundException e) {e.printStackTrace();}}
}
主頁面MainActivity
 1 public class MainActivity extends BaseSkinActivity {
 2 
 3     @Override
 4     protected void initData() {
 5         // 獲取上次的崩潰信息
 6         File crashFile = ExceptionCrashHandler.getInstance().getCrashFile();
 7         // 上傳到服務器,后面再說.......
 8     }
 9 
10     @Override
11     protected void initView() {
12 
13     }
14 
15     @Override
16     protected void setContentView() {
17         setContentView(R.layout.activity_main);
18     }
19 
20     @Override
21     protected void initTitle() {
22 
23     }
24 
25     @Onclick(R.id.test)
26     public void test(View view) {
27         // 沒有修復之前會報異常閃退
28         Toast.makeText(this, Utils.test(), Toast.LENGTH_LONG).show();
29     }
30 
31     @Onclick(R.id.ali_fix)
32     public void aliHotFix(View view) {
33         try {
34             // 測試 目前暫且放在本地
35             String patchFileString =  Environment.getExternalStorageDirectory()+"/fix.apatch";
36             Log.e("TAG", patchFileString);
37             // 修復apatch,不需要重啟可立即生效
38             BaseApplication.mPatchManager.addPatch(patchFileString);
39             Toast.makeText(this, "Bug修復成功", Toast.LENGTH_LONG).show();
40         } catch (Exception e) {
41             e.printStackTrace();
42             Toast.makeText(this, "Bug修復失敗", Toast.LENGTH_LONG).show();
43         }
44     }
45 }

運行的效果就在最上面,如果直接點擊測試會報異常閃退,當我們點擊完阿里開源熱修復后再次點擊測試,發現不閃退了。接下來的內容你可能要看不懂了請做好準備。

?

1.4 正式開發需要注意的地方:

1.每次生成之后一定要測試;
2.盡量的不要分包,不要分多個dex
3.混淆的時候,設計到NDK ??AndFix.java 不要混淆
4.生成包之后一般會加固什么的,這個時候生成的差分包,一定要在之前去生成。
5.既然是去修復方法,第一個不能增加成員變量,不能增加方法
?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/391560.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/391560.shtml
英文地址,請注明出處:http://en.pswp.cn/news/391560.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

leetcode 456. 132 模式(單調棧)

給你一個整數數組 nums &#xff0c;數組中共有 n 個整數。132 模式的子序列 由三個整數 nums[i]、nums[j] 和 nums[k] 組成&#xff0c;并同時滿足&#xff1a;i < j < k 和 nums[i] < nums[k] < nums[j] 。 如果 nums 中存在 132 模式的子序列 &#xff0c;返回…

seaborn分類數據可視:散點圖|箱型圖|小提琴圖|lv圖|柱狀圖|折線圖

一、散點圖stripplot( ) 與swarmplot&#xff08;&#xff09; 1.分類散點圖stripplot( ) 用法stripplot(xNone, yNone, hueNone, dataNone, orderNone, hue_orderNone,jitterTrue, dodgeFalse, orientNone, colorNone, paletteNone,size5, edgecolor"gray", linewi…

數據圖表可視化_數據可視化十大最有用的圖表

數據圖表可視化分析師每天使用的最佳數據可視化圖表列表。 (List of best data visualization charts that Analysts use on a daily basis.) Presenting information or data in a visual format is one of the most effective ways. Researchers have proved that the human …

javascript實現自動添加文本框功能

轉自&#xff1a;http://www.cnblogs.com/damonlan/archive/2011/08/03/2126046.html 昨天&#xff0c;我們公司的網絡小組決定為公司做一個內部的網站&#xff0c;主要是為員工比如發布公告啊、填寫相應信息、投訴、問題等等需求。我那同事給了我以下需求&#xff1a; 1.點擊一…

從Mysql slave system lock延遲說開去

本文主要分析 sql thread中system lock出現的原因&#xff0c;但是筆者并明沒有系統的學習過master-slave的代碼&#xff0c;這也是2018年的一個目標&#xff0c;2018年我都排滿了&#xff0c;悲劇。所以如果有錯誤請指出&#xff0c;也作為一個筆記用于后期學習。同時也給出筆…

傳智播客全棧_播客:從家庭學生到自學成才的全棧開發人員

傳智播客全棧In this weeks episode of the freeCodeCamp podcast, Abbey chats with Madison Kanna, a full-stack developer who works remotely for Mediavine. Madison describes how homeschooling affected her future learning style, how she tackles imposter syndrom…

leetcode 82. 刪除排序鏈表中的重復元素 II(map)

解題思路 map記錄數字出現的次數&#xff0c;出現次數大于1的數字從鏈表中移除 代碼 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val val; }* ListNode(…

python 列表、字典多排序問題

版權聲明&#xff1a;本文為博主原創文章&#xff0c;遵循 CC 4.0 by-sa 版權協議&#xff0c;轉載請附上原文出處鏈接和本聲明。本文鏈接&#xff1a;https://blog.csdn.net/justin051/article/details/84289189Python使用sorted函數來排序&#xff1a; l [2,1,3,5,7,3]print…

接facebook廣告_Facebook廣告分析

接facebook廣告Is our company’s Facebook advertising even worth the effort?我們公司的Facebook廣告是否值得努力&#xff1f; 題&#xff1a; (QUESTION:) A company would like to know if their advertising is effective. Before you start, yes…. Facebook does ha…

如何創建自定義進度欄

Originally published on www.florin-pop.com最初發布在www.florin-pop.com The theme for week #14 of the Weekly Coding Challenge is: 每周編碼挑戰第14周的主題是&#xff1a; 進度條 (Progress Bar) A progress bar is used to show how far a user action is still in…

基于SpringBoot的CodeGenerator

title: 基于SpringBoot的CodeGenerator tags: SpringBootMybatis生成器PageHelper categories: springboot date: 2017-11-21 15:13:33背景 目前組織上對于一個基礎的crud的框架需求較多 因此選擇了SpringBoot作為基礎選型。 Spring Boot是由Pivotal團隊提供的全新框架&#xf…

seaborn線性關系數據可視化:時間線圖|熱圖|結構化圖表可視化

一、線性關系數據可視化lmplot( ) 表示對所統計的數據做散點圖&#xff0c;并擬合一個一元線性回歸關系。 lmplot(x, y, data, hueNone, colNone, rowNone, paletteNone,col_wrapNone, height5, aspect1,markers"o", sharexTrue,shareyTrue, hue_orderNone, col_orde…

hdu 1257

http://acm.hdu.edu.cn/showproblem.php?pid1257 題意&#xff1a;有個攔截系統&#xff0c;這個系統在最開始可以攔截任意高度的導彈&#xff0c;但是之后只能攔截不超過這個導彈高度的導彈&#xff0c;現在有N個導彈需要攔截&#xff0c;問你最少需要多少個攔截系統 思路&am…

eda可視化_5用于探索性數據分析(EDA)的高級可視化

eda可視化Early morning, a lady comes to meet Sherlock Holmes and Watson. Even before the lady opens her mouth and starts telling the reason for her visit, Sherlock can tell a lot about a person by his sheer power of observation and deduction. Similarly, we…

我的AWS開發人員考試未通過。 現在怎么辦?

I have just taken the AWS Certified Developer - Associate Exam on July 1st of 2019. The result? I failed.我剛剛在2019年7月1日參加了AWS認證開發人員-聯考。結果如何&#xff1f; 我失敗了。 The AWS Certified Developer - Associate (DVA-C01) has a scaled score …

關系數據可視化gephi

表示對象之間的關系&#xff0c;可通過gephi軟件實現&#xff0c;軟件下載官方地址https://gephi.org/users/download/ 如何來表示兩個對象之間的關系&#xff1f; 把對象變成點&#xff0c;點的大小、顏色可以是它的兩個參數&#xff0c;兩個點之間的關系可以用連線表示。連線…

Hyperledger Fabric 1.0 從零開始(十二)——fabric-sdk-java應用

Hyperledger Fabric 1.0 從零開始&#xff08;十&#xff09;——智能合約&#xff08;參閱&#xff1a;Hyperledger Fabric Chaincode for Operators——實操智能合約&#xff09; Hyperledger Fabric 1.0 從零開始&#xff08;十一&#xff09;——CouchDB&#xff08;參閱&a…

css跑道_如何不超出跑道:計劃種子的簡單方法

css跑道There’s lots of startup advice floating around. I’m going to give you a very practical one that’s often missed — how to plan your early growth. The seed round is usually devoted to finding your product-market fit, meaning you start with no or li…

將json 填入表格_如何將Google表格用作JSON端點

將json 填入表格UPDATE: 5/13/2020 - New Share Dialog Box steps available below.更新&#xff1a;5/13/2020-下面提供了 新共享對話框步驟。 Thanks Erica H!謝謝埃里卡H&#xff01; Are you building a prototype dynamic web application and need to collaborate with …

leetcode 173. 二叉搜索樹迭代器

實現一個二叉搜索樹迭代器類BSTIterator &#xff0c;表示一個按中序遍歷二叉搜索樹&#xff08;BST&#xff09;的迭代器&#xff1a; BSTIterator(TreeNode root) 初始化 BSTIterator 類的一個對象。BST 的根節點 root 會作為構造函數的一部分給出。指針應初始化為一個不存在…