需求: 当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);
}
}
}
--结束END--
本文标题: Android - java native 异常捕获到本地 - xCrash 简单实现 ,亲测可直接使用
本文链接: https://lsjlt.com/news/29525.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-01-21
2023-10-28
2023-10-28
2023-10-27
2023-10-27
2023-10-27
2023-10-27
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0