日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Alibaba-AndFix Bug热修复框架的使用

發布時間:2025/3/15 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Alibaba-AndFix Bug热修复框架的使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.


目錄(?)
[+]

AndFix

這篇主要介紹alibaba的AndFix項目的使用,下一篇介紹?AndFix原理及源碼解析。

Github:https://github.com/alibaba/AndFix


AndFix介紹

AndFix是一個Android App的在線熱補丁框架。使用此框架,我們能夠在不重復發版的情況下,在線修改App中的Bug。AndFix就是 “Android Hot-Fix”的縮寫。?
就目前來說,AndFix支持Android 2.3到6.0版本,并且支持arm 與 X86系統架構的設備。完美支持Dalvik與ART的Runtime。?
AndFix 的補丁文件是以 .apatch 結尾的文件。?
AndFix是阿里巴巴開源項目。


  • AndFix
    • AndFix介紹
    • Android上如何使用
    • patch文件的生成
      • 在Android Studio使用
      • 在Eclipse使用
      • 代碼混淆ProGuard

Android上如何使用

1.在自定義Application中初始化,為了更早的修復應用中的bug。

<code class="language-Java hljs java has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-keyword" style="color:#0088;box-sizing: border-box;">package</span> com.euler.andfix;<span class="hljs-keyword" style="color:#0088;box-sizing: border-box;">import</span> android.app.Application;<span class="hljs-keyword" style="color:#0088;box-sizing: border-box;">import</span> com.alipay.euler.andfix.patch.PatchManager;<span class="hljs-javadoc" style="color:#8800;box-sizing: border-box;">/*** MainApplication 2015-11-12 下午2:07:11* *<span class="hljs-javadoctag" style="color:#66066;box-sizing: border-box;"> @author</span> 喬曉松 965266509@qq.com*/</span> <span class="hljs-keyword" style="color:#0088;box-sizing: border-box;">public</span> <span class="hljs-class" style="box-sizing: border-box;"><span class="hljs-keyword" style="color:#0088;box-sizing: border-box;">class</span> <span class="hljs-title" style="color:#66066;box-sizing: border-box;">MainApplication</span> <span class="hljs-keyword" style="color:#0088;box-sizing: border-box;">extends</span> <span class="hljs-title" style="color:#66066;box-sizing: border-box;">Application</span> {</span><span class="hljs-keyword" style="color:#0088;box-sizing: border-box;">public</span> PatchManager mPatchManager;<span class="hljs-annotation" style="color:#9b859d;box-sizing: border-box;">@Override</span><span class="hljs-keyword" style="color:#0088;box-sizing: border-box;">public</span> <span class="hljs-keyword" style="color:#0088;box-sizing: border-box;">void</span> <span class="hljs-title" style="box-sizing: border-box;">onCreate</span>() {<span class="hljs-keyword" style="color:#0088;box-sizing: border-box;">super</span>.onCreate();<span class="hljs-comment" style="color:#8800;box-sizing: border-box;">// 初始化patch管理類</span>mPatchManager = <span class="hljs-keyword" style="color:#0088;box-sizing: border-box;">new</span> PatchManager(<span class="hljs-keyword" style="color:#0088;box-sizing: border-box;">this</span>);<span class="hljs-comment" style="color:#8800;box-sizing: border-box;">// 初始化patch版本</span>mPatchManager.init(<span class="hljs-string" style="color:#0880;box-sizing: border-box;">"1.0"</span>);<span class="hljs-comment" style="color:#8800;box-sizing: border-box;">// 加載已經添加到PatchManager中的patch</span>mPatchManager.loadPatch();} } </code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li><li style="box-sizing: border-box; padding: 0px 5px;">26</li><li style="box-sizing: border-box; padding: 0px 5px;">27</li></ul>

2.如果有新的補丁需要修復,下載完成后,進行以下操作

<code class="hljs cs has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-comment" style="color:#8800;box-sizing: border-box;">//添加patch,只需指定patch的路徑即可,補丁會立即生效</span> mPatchManager.addPatch(path);</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li></ul>

3.當apk版本升級,需要把之前patch文件的刪除,需要以下操作

<code class="hljs cs has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-comment" style="color:#8800;box-sizing: border-box;">//刪除所有已加載的patch文件</span> mPatchManager.removeAllPatch();</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li></ul>

patch文件的生成

使用工具:apkpatch-1.0.3?
原理:根據兩個apk包,生成一個差異文件,就是所謂的補丁文件即patch文件。

<code class="hljs lasso has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">命令 : apkpatch<span class="hljs-built_in" style="color:#66066;box-sizing: border-box;">.</span>bat <span class="hljs-attribute" style="box-sizing: border-box;">-f</span> <span class="hljs-literal" style="color:#06666;box-sizing: border-box;">new</span><span class="hljs-built_in" style="color:#66066;box-sizing: border-box;">.</span>apk <span class="hljs-attribute" style="box-sizing: border-box;">-t</span> old<span class="hljs-built_in" style="color:#66066;box-sizing: border-box;">.</span>apk <span class="hljs-attribute" style="box-sizing: border-box;">-o</span> output1 <span class="hljs-attribute" style="box-sizing: border-box;">-k</span> debug<span class="hljs-built_in" style="color:#66066;box-sizing: border-box;">.</span>keystore <span class="hljs-attribute" style="box-sizing: border-box;">-p</span> android <span class="hljs-attribute" style="box-sizing: border-box;">-a</span> androiddebugkey <span class="hljs-attribute" style="box-sizing: border-box;">-e</span> android<span class="hljs-attribute" style="box-sizing: border-box;">-f</span> <span class="hljs-subst" style="color:#000000;box-sizing: border-box;"><</span><span class="hljs-literal" style="color:#06666;box-sizing: border-box;">new</span><span class="hljs-built_in" style="color:#66066;box-sizing: border-box;">.</span>apk<span class="hljs-subst" style="color:#000000;box-sizing: border-box;">></span> :新版本 <span class="hljs-attribute" style="box-sizing: border-box;">-t</span> <span class="hljs-subst" style="color:#000000;box-sizing: border-box;"><</span>old<span class="hljs-built_in" style="color:#66066;box-sizing: border-box;">.</span>apk<span class="hljs-subst" style="color:#000000;box-sizing: border-box;">></span> : 舊版本 <span class="hljs-attribute" style="box-sizing: border-box;">-o</span> <span class="hljs-subst" style="color:#000000;box-sizing: border-box;"><</span>output<span class="hljs-subst" style="color:#000000;box-sizing: border-box;">></span> : 輸出目錄 <span class="hljs-attribute" style="box-sizing: border-box;">-k</span> <span class="hljs-subst" style="color:#000000;box-sizing: border-box;"><</span>keystore<span class="hljs-subst" style="color:#000000;box-sizing: border-box;">></span>: 打包所用的keystore <span class="hljs-attribute" style="box-sizing: border-box;">-p</span> <span class="hljs-subst" style="color:#000000;box-sizing: border-box;"><</span>password<span class="hljs-subst" style="color:#000000;box-sizing: border-box;">></span>: keystore的密碼 <span class="hljs-attribute" style="box-sizing: border-box;">-a</span> <span class="hljs-subst" style="color:#000000;box-sizing: border-box;"><</span>alias<span class="hljs-subst" style="color:#000000;box-sizing: border-box;">></span>: keystore 用戶別名 <span class="hljs-attribute" style="box-sizing: border-box;">-e</span> <span class="hljs-subst" style="color:#000000;box-sizing: border-box;"><</span>alias password<span class="hljs-subst" style="color:#000000;box-sizing: border-box;">></span>: keystore 用戶別名密碼</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li></ul>

?
執行完命令,就會在輸出目錄中輸出.apatch文件:?
?
new-c293df7dbc23f11214fdd020ea78d3b8.apatch:就是patch文件。

.apatch文件根目錄內容:?
META_INF文件下內容:?
PATCH.MF文件內容:注:Patch-Classes就是改動過的class.

客戶端請求服務器接口(api),服務器根據用戶傳遞的數據分析是否有需要修復的bug。?
如果有bug需要修復,就下載服務器指定的.apatch文件的鏈接,下載完后及時加載并修復,使用addpatch(path)方法,補丁會立即生效。

在Android Studio使用

maven dependency:

<code class="hljs xml has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-tag" style="color:#06666;box-sizing: border-box;"><<span class="hljs-title" style="color:#0088;box-sizing: border-box;">dependency</span>></span><span class="hljs-tag" style="color:#06666;box-sizing: border-box;"><<span class="hljs-title" style="color:#0088;box-sizing: border-box;">groupId</span>></span>com.alipay.euler<span class="hljs-tag" style="color:#06666;box-sizing: border-box;"></<span class="hljs-title" style="color:#0088;box-sizing: border-box;">groupId</span>></span><span class="hljs-tag" style="color:#06666;box-sizing: border-box;"><<span class="hljs-title" style="color:#0088;box-sizing: border-box;">artifactId</span>></span>andfix<span class="hljs-tag" style="color:#06666;box-sizing: border-box;"></<span class="hljs-title" style="color:#0088;box-sizing: border-box;">artifactId</span>></span><span class="hljs-tag" style="color:#06666;box-sizing: border-box;"><<span class="hljs-title" style="color:#0088;box-sizing: border-box;">version</span>></span>0.3.1<span class="hljs-tag" style="color:#06666;box-sizing: border-box;"></<span class="hljs-title" style="color:#0088;box-sizing: border-box;">version</span>></span><span class="hljs-tag" style="color:#06666;box-sizing: border-box;"><<span class="hljs-title" style="color:#0088;box-sizing: border-box;">type</span>></span>aar<span class="hljs-tag" style="color:#06666;box-sizing: border-box;"></<span class="hljs-title" style="color:#0088;box-sizing: border-box;">type</span>></span> <span class="hljs-tag" style="color:#06666;box-sizing: border-box;"></<span class="hljs-title" style="color:#0088;box-sizing: border-box;">dependency</span>></span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li></ul>

or gradle dependency:

<code class="hljs nginx has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-title" style="color:#0088;box-sizing: border-box;">dependencies</span> {<span class="hljs-title" style="color:#0088;box-sizing: border-box;">compile</span> <span class="hljs-string" style="color:#0880;box-sizing: border-box;">'com.alipay.euler:andfix:0.3.1<span class="hljs-variable" style="color:#66066;box-sizing: border-box;">@aar</span>'</span> }</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li></ul>

在Eclipse使用

把Java層的代碼引入到你的工程,配置Ndk開發環境并把jni Native代碼添加進來。

代碼混淆(ProGuard)

<code class="hljs scala has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">-keep <span class="hljs-class" style="box-sizing: border-box;"><span class="hljs-keyword" style="color:#0088;box-sizing: border-box;">class</span> * <span class="hljs-keyword" style="color:#0088;box-sizing: border-box;">extends</span> <span class="hljs-title" style="color:#66066;box-sizing: border-box;">java</span>.<span class="hljs-title" style="color:#66066;box-sizing: border-box;">lang</span>.<span class="hljs-title" style="color:#66066;box-sizing: border-box;">annotation</span>.<span class="hljs-title" style="color:#66066;box-sizing: border-box;">Annotation</span></span> -keepclasseswithmembernames <span class="hljs-class" style="box-sizing: border-box;"><span class="hljs-keyword" style="color:#0088;box-sizing: border-box;">class</span> * {</span>native <methods>; }</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li></ul>原文地址: http://blog.csdn.net/qxs965266509/article/details/49802429

總結

以上是生活随笔為你收集整理的Alibaba-AndFix Bug热修复框架的使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。