編輯:關於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的內容沒換
退出之後我們重新進入該應用就會發現TextView的內容也變化了。Android Studio快速提取方法 在開發過程中,有時在一個方法內部寫了過多的代碼,然後想要把一些代碼提取出來封裝下,分離開放在一個單獨的方法裡,可能你的
華為手機基於Android打造了EMUI系統,目前最新版本是EMUI 4.1,版本是Android 6.0。據荷蘭媒體報道,他們從產業鏈獲悉,華為正在秘研E
本節引言: 嗯,本來說好今天不寫的,還是寫吧,畢竟難得空閒哈~,本節給大家帶來的是 ColorFilter的第三個子類:PorterDuffCol
本系列文章提供簡單Android應用開發實例方法,文章步驟如下所示:1 獲取應用所需的數據源數據源一般來源於互聯網、個人搜集或者其他方式2 應用UI設計每個應用軟件都需要
在Android應用程序框架中,Activity和Service類都繼承