gradle配置:compile 'com.alipay.euler:andfix:0.3.1@aar
'配置application
注意点1:注册清单中命名application的name注意点2:外部存储卡的权限
在application的oncreat中初始化:package zgkx.chinaapp.com.myappl
package zgkx.chinaapp.com.myapplication;
import android.app.Application;
import android.os.Environment;
import android.util.Log;
import com.alipay.euler.andfix.patch.PatchManager;
import java.io.File;
import java.io.IOException;
/**
* 基础MyApplication类
*
* @author luhaixu
*/
public class MyApplication extends Application {
private static final String TAG = "MyApplication";
/**
* apatch文件
*/
private static final String APATCH_PATH = "/Dennis.apatch";
private PatchManager mPatchManager;
// private String APATCH_PATH;
@Override
public void onCreate() {
super.onCreate();
mPatchManager = new PatchManager(this);
mPatchManager.init("1.0"); // 版本号
// 加载 apatch
mPatchManager.loadPatch();
//apatch文件的目录
String patchFileString = Environment.getExternalStorageDirectory().getAbsolutePath() + APATCH_PATH;
File apatchPath = new File(patchFileString);
if (apatchPath.exists()) {
Log.i(TAG, "补丁文件存在");
try {
//添加apatch文件
mPatchManager.addPatch(patchFileString);
} catch (IOException e) {
Log.i(TAG, "打补丁出错了");
e.printStackTrace();
}
} else {
Log.i(TAG, "补丁文件不存在");
}
}
}
下一步就是生成补丁文件了
打包:bug包和修复包
然后将秘钥文件和两个apk放大打包工具中apkpatch-1.0.3文件夹下面
然后在apkpatch-1.0.3夹下面打开命令窗口
输入命令:
apkpatch.bat -f nobug.apk -t bug.apk -o Dennis -k android.jks -p android -a android -e android
-f后面是没有问题的apk名称
-t后面是有问题的apk名称
-o后面是生成补丁文件的存储文件名称
-k 是秘钥文件
-p 是密码
-a 是秘钥的别名
-e 是别名的密码
运行后提示add modified 基本成功,在apkapth的文件夹会多一个文件夹,里面的;类型是apathc的就是我们的补丁文件,重命名,与我们application中配置的文件名一直即可
运行我们的bug的apk然后用将补丁文件放到sd卡中的根目录,这样我们就完成了更新
实际是通过结构来下载补丁文件
混淆配置:
-keep class * extends java.lang.annotation.Annotation
-keepclasseswithmembernames class * {
native <methods>;
}