返回顶部
首页 > 资讯 > 移动开发 >Android - java native 异常捕获到本地 - xCrash 简单实现 ,亲测可直接使用
  • 231
分享到

Android - java native 异常捕获到本地 - xCrash 简单实现 ,亲测可直接使用

异常JAVA捕获nativeAndroid 2022-06-06 13:06:57 231人浏览 独家记忆
摘要

需求: 当APP出现Java异常、native异常和ANR时需要重启当前APP。 解决方案: 使用爱奇艺的xCrash框架进行捕获并重启。 xC

需求:
当APP出现Java异常、native异常和ANR时需要重启当前APP。

解决方案:
使用爱奇艺的xCrash框架进行捕获并重启。

xCrash GitHub地址:
https://GitHub.com/iqiyi/xCrash/blob/master/README.zh-CN.md

步骤一:
在module的build.gradle中添加如下代码:

Android {
	defaultConfig {
		ndk {
			// 根据需要添加必要的ABI
			abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a'
		}
	}
}
dependencies {
	//捕获异常的开源库
	implementation 'com.iqiyi.xcrash:xcrash-android-lib:2.4.9'
}

步骤二:
在Application的attacHBaseContext中初始化xCrash。

import android.app.Application;
import android.content.Context;
import com.blankj.utilcode.util.AppUtils;
import xcrash.ICrashCallback;
import xcrash.XCrash;
public class MyApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate(); 
        //初始化崩溃捕捉工具
        initCrashTools();
    }
    
    private void initCrashTools() {
        XCrash.InitParameters initParameters = new XCrash.InitParameters();
        //需要将日志输出的路径,自行编辑
        initParameters.setLogDir(FileConstant.LOG_FILE_PATH);
        //引用com.blankj:utilcode库中的获取APP的VersionName
        initParameters.setAppVersion(AppUtils.getAppVersionName());
        //捕获异常后的回调函数
        ICrashCallback crashCallback = new ICrashCallback() {
            @Override
            public void onCrash(String logPath, String emergency) {
                // 发生崩溃后,重启软件
                // 引用com.blankj:utilcode库中的重启方法
                AppUtils.relaunchApp(true);
            }
        };
        //java异常的捕获
        initParameters.setJavaCallback(crashCallback);
        //anr的捕获
        initParameters.setAnrCallback(crashCallback);
        //native异常的捕获
        initParameters.setNativeCallback(crashCallback);
        //初始化xCrash
        XCrash.init(this, initParameters);
    }
}

步骤三:
添加读写权限,安卓6.0以上需要进行动态权限申请。

AndroidManifest.xml


BaseActivity.java

public abstract class BaseActivity extends AppCompatActivity{
	
    private String[] mPermissions = {Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE,};
   	
    private List mPermissionList = new ArrayList(); 
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
    	super.onCreate(savedInstanceState);
    	setContentView(R.layout.***);
		//加载权限
        initPermission();
	}
    
    private void initPermission() {
        //使用兼容库就无需判断系统版本
        for (String permission : mPermissions) {
            if (ContextCompat.checkSelfPermission(getApplication(), permission) != PackageManager.PERMISSION_GRANTED) {
                mPermissionList.add(permission);
            }
        }
        if (mPermissionList.size() != 0) {
            String[] objects = mPermissionList.toArray(new String[mPermissionList.size()]);
            ActivityCompat.requestPermissions(this, objects, 0);
        }
    }
}

作者:Rainbow Snake


--结束END--

本文标题: Android - java native 异常捕获到本地 - xCrash 简单实现 ,亲测可直接使用

本文链接: https://lsjlt.com/news/29525.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作