阿里熱修復AndFix的使用教程

jiang547860818發表於2017-12-27

一般我們開發了的APP在上線之前都會進行全面的測試,等APP測試基本穩定後,公司會進行封版,待上線。這時如果開發人員又發現了bug,但是又封版了,不能再修復,防止引入新的問題。這時這個bug的修復就只能是在下一個版本再修復。但是,如果是一個小小的問題,我們就總是不停的修復後,釋出新版本,使用者就要不停的去下載安裝。這樣給使用者的體驗是很不好的,如果可以在使用者不需要解除安裝舊的版本再安裝新版本就能進行bug的修復。這時熱修復就出現了。這裡我們就講解阿里實現的熱修復功能的使用。
阿里的實現邏輯是生成一個差分包**.apatch,合併修復bug。
阿里熱修復的實現步驟如下:
阿里apatch工具下載地址
實行邏輯:每次啟動的時候,去後臺獲取差分包fix.apatch,儲存到本地,然後直接獲取本地記憶體卡里面的fix.apatch修復本地的Bug
1、依賴阿里的熱修復包,有兩種方式:方式一是通過上面的下載連結,直接下載原始碼依賴包,把依賴包匯入到我們的工程裡去。方式二是直接線上依賴,直接在build.gradle中加入依賴
dependencies {
compile 'com.alipay.euler:andfix:0.5.0@aar'
}

2、在我們的Application中初始化PatchManager

import android.app.Application;
import android.content.pm.PackageManager;
import android.util.Log;

import com.alipay.euler.andfix.patch.PatchManager;
import com.taobao.sophix.PatchStatus;
import com.taobao.sophix.SophixManager;
import com.taobao.sophix.listener.PatchLoadStatusListener;

/**
 * @author : willkong
 * @date : 2017/12/25 18:23
 * @Description :
 */

public class MyApplication extends Application{
    public static PatchManager mPatchManager;
    @Override
    public void onCreate() {
        super.onCreate();
        //初始化阿里的熱修復
        mPatchManager = new PatchManager(this);
        //初始化版本,獲取當前應用的版本
        try {
            String appVersion = this.getPackageManager().getPackageInfo(this.getPackageName(),0).versionName;
            mPatchManager.init(appVersion);
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }
        //載入之前的apatch包
        mPatchManager.loadPatch();
    }
 }

3、在AndroidManifest中申明許可權
<!-- 網路許可權 -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!-- 外部儲存讀許可權,除錯工具載入本地補丁需要 -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

在MainActivity中獲取到fix.apatch,修復bug

import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Bundle;
import android.os.Environment;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

import java.io.File;
import java.io.IOException;

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button bt = findViewById(R.id.bt);
        bt.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(MainActivity.this,2/0+"測試",Toast.LENGTH_SHORT).show();
            }
        });

        File fixFile = new File(Environment.getExternalStorageDirectory(),"fix.apatch");
        if (fixFile.exists()){
            //修復bug
            try {
                MyApplication.mPatchManager.addPatch(fixFile.getAbsolutePath());
                Toast.makeText(this,"修復成功",Toast.LENGTH_SHORT).show();
            } catch (IOException e) {
                e.printStackTrace();
                Toast.makeText(this,"修復失敗",Toast.LENGTH_SHORT).show();
            }
        }
    }
}

4、生成一個金鑰jks,簽名生成一個有bug和一個沒bug的兩個包
5、從上面的網址下載得到生成差分包工具解壓包apkpatch-1.0.3.zip
6、在命令臺輸入命令:

C:\Users\willkong\Desktop\AndFix-master\tools>apkpatch.bat -f new.apk -t old.apk
 -o out -k **.jks -p ****** -a ** -e ******

C:\Users\willkong\Desktop\AndFix-master\tools>是apkpatch.bat差分包生成工具的路徑。
生成差分包的命令是:
apkpatch.bat -f -t -o -k -p<> -a -e<>

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

7、把生成 的差分包改名為fix.apatch,複製到手機記憶體中,重新開啟程式,則程式就自動修復了bug

相關文章