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-