AndFix实现动态热修复Demo

andfix https://github.com/alibaba/AndFix 实现动态热修复Demo

1.在自定义MyApplication中初始化框架

package com.example.andhotfixdemo;

import java.io.IOException;

import android.app.Application;
import android.os.Environment;
import android.util.Log;

import com.alipay.euler.andfix.patch.PatchManager;


public class MyApplication extends Application {
    private static final String TAG = "MyHotFix";

    private static final String APATCH_PATH = "/output.apatch";
    /**
     * patch manager
     */
    private PatchManager mPatchManager;

    @Override
    public void onCreate() {
        super.onCreate();
        // initialize  // 初始化patch管理类
        mPatchManager = new PatchManager(this);
        mPatchManager.init("1.0"); // 初始化patch版本
        Log.d(TAG, "MyHotFixApp:初始化patch管理类和patch版本完成");

        // load patch // 加载已经添加到PatchManager中的patch
        mPatchManager.loadPatch();
        Log.d(TAG, "MyHotFixApp:加载已经添加到PatchManager中的patch完成");

        // add patch at runtime
        try {
            // .apatch file path
            String patchFileString = Environment.getExternalStorageDirectory()
                    .getAbsolutePath() + APATCH_PATH;
            //添加patch,只需指定patch的路径即可,补丁会立即生效
            mPatchManager.addPatch(patchFileString);
            Log.d(TAG, "MyHotFixApp:apatch:" + patchFileString + "添加完成");
        } catch (IOException e) {
            Log.e(TAG, "MyHotFixApp:IOException", e);
        }

    }
}

2.旧代码:

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        TextView tv_src = (TextView) findViewById(R.id.tv_src);
        tv_src.setText("这运行的是旧版本的代码,不可以点击我");


    }

3.新代码:

TextView tv_src = (TextView) findViewById(R.id.tv_src);
        tv_src.setText("这运行的是新版本添加的代码,hot fix success,可以点击我了");

        tv_src.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    Toast.makeText(MainActivity.this, "点到我了。。。", Toast.LENGTH_LONG).show();
                    ImageView iv= (ImageView) findViewById(R.id.iv);
                    iv.setImageDrawable(ContextCompat.getDrawable(MainActivity.this, R.drawable.louisgeek));
                }
            });

4。分别用AndFixDemo.keystore打包2个程序AndHotFixDemoOld.apk和AndHotFixDemoNew.apk

5。用apkpatch工具

apkpatch.bat -f AndHotFixDemoNew.apk -t AndHotFixDemoOld.apk -o outputdic -k AndFixDemo.keystore -p 你的keystore 密码 -a 你的alias -e 你的alias的密码

例如:
apkpatch.bat -f AndHotFixDemoNew.apk -t AndHotFixDemoOld.apk -o outputdic -k AndFixDemo.keystore -p 123456 -a andfixdemo -e 123456

生成AndHotFixDemoNew-35b3613a4f2d7709899411d1ee0270f9.apatch类似的文件改名成output.apatch

6。手机先安装AndHotFixDemoOld.apk,查看程序

7。手动把output.apatch放到手机sd中再打开程序

或者cmd

adb push d:/output.apatch /sdcard/

下载地址:Demo

2016年3月7日14:15:41 修改新增

这样。。
method not found: com.alipay.euler.andfix.AndFix.setup:(ZI)Z
或这样的错误。。。
No implementation found for boolean com.alipay.euler.andfix.AndFix.setup(boolean, int) (tried Java_com_alipay_euler_andfix_AndFix_setup and Java_com_alipay_euler_andfix_AndFix_setup__ZI)

在lib中加入.so文件
网友共享了地址。。。
https://github.com/LuoboDcom/AndFix-so-

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值