Android_AndFix支付宝热修复简单使用
2018-01-18 09:56
183 查看
AndFix的依赖:
compile 'com.alipay.euler:andfix:0.5.0@aar'AndFix的管理工具类package com.example.xsj.hotfile;
import android.content.Context;
import com.alipay.euler.andfix.patch.PatchManager;
import java.io.IOException;
/**
* Created by xsj on 2018/1/15.
*/
public class AndFixManager {
private static volatile AndFixManager instance;
private PatchManager patchManager;
public AndFixManager() {
}
public static AndFixManager getInstance(){
if(instance == null){
synchronized (AndFixManager.class){
if(null==instance){
instance=new AndFixManager();
}
}
}
return instance;
}
//初始化Andfix并加载补丁文件
public void initPath(Context context){
patchManager = new PatchManager(context);
patchManager.init(VersionUtil.getVersionName(context));
patchManager.loadPatch();
}
//添加补丁文件
public void addPatch(String path){
if(patchManager!=null){
try {
patchManager.addPatch(path);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
AndFix需要初始化PatchManager类,需要版本号package com.example.xsj.hotfile;
import android.content.Context;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
/**
* Created by xsj on 2018/1/15.
*/
public class VersionUtil {
public static String getVersionName(Context context){
//获取版本号
PackageManager packageManager = context.getPackageManager();
String versionName="1.0";
try {
PackageInfo packageInfo = packageManager.getPackageInfo(context.getPackageName(), 0);
versionName = packageInfo.versionName;
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
return versionName;
}
}
AndFix越早注册越好,所以在Appliction注册初始化package com.example.xsj.hotfile;
import android.app.Application;
/**
* Created by xsj on 2018/1/15.
*/
public class BaseAppliction extends Application{
@Override
public void onCreate() {
super.onCreate();
//初始化AndFix
initPath();
}
private void initPath() {
//这个初始化需要最早操作
AndFixManager.getInstance().initPath(this);
}
}
清单文件所需依赖
import android.os.Environment;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import java.io.File;
import java.io.IOException;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
//文件路径
private String path="";
//AndFix后缀名必须是apatch
private String pathName="out.apatch";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//获取本地路径
//判断挂载就是查询是否有sd卡
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
//拿到绝对路径
File externalStorageDirectory = Environment.getExternalStorageDirectory();
String absolutePath = externalStorageDirectory.getAbsolutePath();
path=absolutePath.concat(File.separator).concat(pathName);
Log.e("TAG","补丁路径:"+path);
}
Button bug= (Button) findViewById(R.id.bug);
Button good= (Button) findViewById(R.id.good);
bug.setOnClickListener(this);
good.setOnClickListener(this);
}
@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.bug:
//有bug的
String str=null;
str=str.substring(0,1);
Log.e("TAG","BUG:"+str);
break;
case R.id.good:
fixBug();
break;
}
}
//修复的方法
private void fixBug() {
File file = new File(path);
if(!file.exists()){
try {
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
AndFixManager.getInstance().addPatch(path);
Toast.makeText(MainActivity.this,path+"",Toast.LENGTH_SHORT).show();
}
}
将拿到上线的apk,也就是有bug的apk。就是现在进行打包更名为old.apk然后更改项目中的bug
case R.id.bug:
//没有bug的
String str="hello word";
str=str.substring(0,1);
break;然后进行打包,获得没有bug的apk,更名为new.apk创建新文件夹,将AndFix的管理工具以及old.apk,new.apk,以及打包的签名文件放在一起。然后黑窗口进入该文件夹
在黑窗口操作以下代码,out.apatch为差异文件的文件夹名
apkpatch -f new.apk -t old.apk -o out.apatch -k 签名文件 -p 密码 -a 打包别名(key0) -e 别名密码然后会出现out.apatch文件,里面有一个apatch结尾的文件,将它放在Maintivity中设置的目录下。我的设置的查找文件名为out.apatch,所以,我将它更名为out.apatch。然后在老的APK中修复即可。githup路径:https://github.com/alibaba/AndFix
compile 'com.alipay.euler:andfix:0.5.0@aar'AndFix的管理工具类package com.example.xsj.hotfile;
import android.content.Context;
import com.alipay.euler.andfix.patch.PatchManager;
import java.io.IOException;
/**
* Created by xsj on 2018/1/15.
*/
public class AndFixManager {
private static volatile AndFixManager instance;
private PatchManager patchManager;
public AndFixManager() {
}
public static AndFixManager getInstance(){
if(instance == null){
synchronized (AndFixManager.class){
if(null==instance){
instance=new AndFixManager();
}
}
}
return instance;
}
//初始化Andfix并加载补丁文件
public void initPath(Context context){
patchManager = new PatchManager(context);
patchManager.init(VersionUtil.getVersionName(context));
patchManager.loadPatch();
}
//添加补丁文件
public void addPatch(String path){
if(patchManager!=null){
try {
patchManager.addPatch(path);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
AndFix需要初始化PatchManager类,需要版本号package com.example.xsj.hotfile;
import android.content.Context;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
/**
* Created by xsj on 2018/1/15.
*/
public class VersionUtil {
public static String getVersionName(Context context){
//获取版本号
PackageManager packageManager = context.getPackageManager();
String versionName="1.0";
try {
PackageInfo packageInfo = packageManager.getPackageInfo(context.getPackageName(), 0);
versionName = packageInfo.versionName;
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
return versionName;
}
}
AndFix越早注册越好,所以在Appliction注册初始化package com.example.xsj.hotfile;
import android.app.Application;
/**
* Created by xsj on 2018/1/15.
*/
public class BaseAppliction extends Application{
@Override
public void onCreate() {
super.onCreate();
//初始化AndFix
initPath();
}
private void initPath() {
//这个初始化需要最早操作
AndFixManager.getInstance().initPath(this);
}
}
清单文件所需依赖
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"></uses-permission> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"></uses-permission> <uses-permission android:name="android.permission.INTERNET"></uses-permission>清单文件注册Appliction
android:name=".BaseAppliction"主代码文件,具有Bug的package com.example.xsj.hotfile;
import android.os.Environment;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import java.io.File;
import java.io.IOException;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
//文件路径
private String path="";
//AndFix后缀名必须是apatch
private String pathName="out.apatch";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//获取本地路径
//判断挂载就是查询是否有sd卡
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
//拿到绝对路径
File externalStorageDirectory = Environment.getExternalStorageDirectory();
String absolutePath = externalStorageDirectory.getAbsolutePath();
path=absolutePath.concat(File.separator).concat(pathName);
Log.e("TAG","补丁路径:"+path);
}
Button bug= (Button) findViewById(R.id.bug);
Button good= (Button) findViewById(R.id.good);
bug.setOnClickListener(this);
good.setOnClickListener(this);
}
@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.bug:
//有bug的
String str=null;
str=str.substring(0,1);
Log.e("TAG","BUG:"+str);
break;
case R.id.good:
fixBug();
break;
}
}
//修复的方法
private void fixBug() {
File file = new File(path);
if(!file.exists()){
try {
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
AndFixManager.getInstance().addPatch(path);
Toast.makeText(MainActivity.this,path+"",Toast.LENGTH_SHORT).show();
}
}
将拿到上线的apk,也就是有bug的apk。就是现在进行打包更名为old.apk然后更改项目中的bug
case R.id.bug:
//没有bug的
String str="hello word";
str=str.substring(0,1);
break;然后进行打包,获得没有bug的apk,更名为new.apk创建新文件夹,将AndFix的管理工具以及old.apk,new.apk,以及打包的签名文件放在一起。然后黑窗口进入该文件夹
在黑窗口操作以下代码,out.apatch为差异文件的文件夹名
apkpatch -f new.apk -t old.apk -o out.apatch -k 签名文件 -p 密码 -a 打包别名(key0) -e 别名密码然后会出现out.apatch文件,里面有一个apatch结尾的文件,将它放在Maintivity中设置的目录下。我的设置的查找文件名为out.apatch,所以,我将它更名为out.apatch。然后在老的APK中修复即可。githup路径:https://github.com/alibaba/AndFix
相关文章推荐
- Android 热修复AndFix的简单使用介绍
- Android热修复AndFix简单使用
- Android-仿支付宝手势密码(九宫格)简单实现-修复相关BUG
- [Android]腾讯Tinker热修复框架简单使用
- android 热修复框架Tinker的详细简单使用
- 使用AndFix实现Android热修复
- Android_Andfix简单使用
- Android 手势解锁 GestureLock的使用和简单修复
- android使用微信与支付宝支付在小米miui系统上ui线程被异常kill的bug修复
- Android热修复方案--sophix简单使用
- APIDemo学习笔记——Android上几种简单的Animation使用方法(二)
- android 使用MideaPlayer API来播放简单的应用
- Android Service使用方法--简单音乐播放实例
- 【Android笔记 三】Location获取地理位置信息(中)Criteria类的简单使用
- Android 之 下拉框(Spinner)的简单使用
- Android Intent Filter简单使用
- android 中使用AsyncTask实现简单的异步编程
- 【Android】学习笔记(9)——SQLite简单使用
- android google map 自定义地图的图层 简单使用(二)
- APIDemo学习笔记——Android上几种简单的Animation使用方法(三)——3D Transition