編輯:關於Android編程
全稱Android hot-fix,是alibaba的Android熱修復框架,支持Android 2.3到6.0的版本,支持arm與X86系統架構,支持Dalvik和ART Runtime。
AndFix的原理就是方法的替換,把有bug的方法替換成補丁文件中的方法。

dependencies {
compile 'com.alipay.euler:andfix:0.4.0@aar'
}
-keep class * extends java.lang.annotation.Annotation
-keepclasseswithmembernames class * {
native ;
}
public class AndFixApplication extends Application {
public static PatchManager mPatchManager;
@Override
public void onCreate() {
super.onCreate();
// 初始化patch管理類
mPatchManager = new PatchManager(this);
// 初始化patch版本
mPatchManager.init("1.0");
// String appVersion = getPackageManager().getPackageInfo(getPackageName(), 0).versionName;
// mPatchManager.init(appVersion);
// 加載已經添加到PatchManager中的patch
mPatchManager.loadPatch();
}
}
findViewById(R.id.main_btn).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
update();
}
});
private static final String APATCH_PATH = "/fix.apatch"; // 補丁文件名
private void update() {
String patchFileStr = Environment.getExternalStorageDirectory().getAbsolutePath() + APATCH_PATH;
try {
AndFixApplication.mPatchManager.addPatch(patchFileStr);
} catch (IOException e) {
e.printStackTrace();
}
}
PatchManager的addPatch方法加載新補丁,項目中可以在下載補丁文件之後調用,這裡為了演示就把補丁文件放在本地的SD卡中了,代碼中patchFileStr就是補丁存放的位置,.apatch就是生成補丁文件的後綴名,fix就是補丁文件的名字,這裡我們將其名字寫死。
我們看一下打補丁之前MainActivity的所有代碼
public class MainActivity extends AppCompatActivity {
private static final String APATCH_PATH = "/fix.apatch"; // 補丁文件名
private TextView mainTv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mainTv = (TextView) findViewById(R.id.main_tv);
mainTv.setText("點擊Toast");
mainTv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showToast();
}
});
findViewById(R.id.main_btn).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
update();
}
});
}
private void showToast() {
Toast.makeText(this, "打補丁之前", Toast.LENGTH_LONG).show();
}
/**
* 動態更新,加載補丁文件
* @author zehua_chen
* create at 2016/8/3 14:35
*/
private void update() {
String patchFileStr = Environment.getExternalStorageDirectory().getAbsolutePath() + APATCH_PATH;
try {
AndFixApplication.mPatchManager.addPatch(patchFileStr);
} catch (IOException e) {
e.printStackTrace();
}
}
}

private void showToast() {
Toast.makeText(this, "打補丁之後", Toast.LENGTH_LONG).show();
}
mainTv.setText("加載了補丁之後");
上面代碼可知,我們只修改TextView的文字和TextView點擊之後的Toast內容,然後打包

點擊上面的鏈接下載apkpatch之後解壓

將兩個apk文件和該app的簽名文件放入到該目錄中<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4NCjxwPjxpbWcgYWx0PQ=="加入簽名文件和apk.png" src="/uploadfile/Collfiles/20160806/20160806091718975.png" title="\" />
使用命令生成.apatch補丁文件,先cmd進入該目錄

使用命令生成補丁

上圖所示則表示補丁包生成完成
apkpatch.bat -f andfix_v2.0.apk -t andfix_v1.0.apk -o output -k AndFixKey.jks -p andfix -a andfix -e andfix
apkpatch.bat -f 新apk -t 舊apk -o 輸出目錄 -k app簽名文件 -p 簽名文件密碼 -a 簽名文件別名 -e 別名密碼
-f:新apk -t : 舊apk -o
生成的output文件:


將生成的.apatch補丁文件改成代碼中寫死的fix.apatch



運行andfix_v1.0沒有點擊動態更新按鈕,點擊TextView

點擊動態更新Button之後再Toast,我們發現Tost的內容變了,但是TextView的內容沒換


Android Studio 中快速提取方法
Android Studio快速提取方法 在開發過程中,有時在一個方法內部寫了過多的代碼,然後想要把一些代碼提取出來封裝下,分離開放在一個單獨的方法裡,可能你的
華為EMUI 5.0新系統怎麼樣 EMUI 5.0新系統什麼時候發布
華為手機基於Android打造了EMUI系統,目前最新版本是EMUI 4.1,版本是Android 6.0。據荷蘭媒體報道,他們從產業鏈獲悉,華為正在秘研E
Android基礎入門教程——8.3.11 Paint API之—— ColorFilter(顏色過濾器)(3-3)
本節引言: 嗯,本來說好今天不寫的,還是寫吧,畢竟難得空閒哈~,本節給大家帶來的是 ColorFilter的第三個子類:PorterDuffCol
Android開發實例-高校錄取分數線應用
本系列文章提供簡單Android應用開發實例方法,文章步驟如下所示:1 獲取應用所需的數據源數據源一般來源於互聯網、個人搜集或者其他方式2 應用UI設計每個應用軟件都需要
Android4.4 framework分析——廣播的注冊(BroadcastReceiver)和發送(sendbroadcast)過程分析
在Android應用程序框架中,Activity和Service類都繼承