104 lines
3.8 KiB
C#
104 lines
3.8 KiB
C#
// ----------------------------------------
|
|
//
|
|
// BuglyCallbackDelegate.cs
|
|
//
|
|
// Author:
|
|
// bugly, <bugly@tencent.com>
|
|
//
|
|
// Copyright (c) 2023 Bugly, Tencent. All rights reserved.
|
|
//
|
|
// ----------------------------------------
|
|
//
|
|
using UnityEngine;
|
|
using System.Collections;
|
|
|
|
|
|
|
|
public class BuglyCallback {
|
|
#if UNITY_ANDROID && !UNITY_EDITOR
|
|
// 定义 C# 端的接口,对外隐藏 Java 相关代码
|
|
public interface ICrashHandleListener {
|
|
|
|
byte[] getCrashExtraData(bool isNativeCrashed, string crashType, string crashAddress, string crashStack,
|
|
int nativeSiCode, long crashTime);
|
|
|
|
string getCrashExtraMessage(bool isNativeCrashed, string crashType, string crashAddress, string crashStack,
|
|
int nativeSiCode, long crashTime);
|
|
|
|
void onCrashHandleStart(bool isNativeCrashed);
|
|
|
|
bool onCrashHandleEnd(bool isNativeCrashed);
|
|
|
|
bool onCrashSaving(bool isNativeCrashed, string crashType, string crashAddress, string crashStack,
|
|
int nativeSiCode, long crashTime, string userId, string deviceId, string crashUuid, string processName);
|
|
}
|
|
|
|
// 定义Adapter 来适配 AndroidJavaProxy 对象和 ICrashHandleListener
|
|
public class ListenerAdapter : AndroidJavaProxy {
|
|
private readonly ICrashHandleListener _listener;
|
|
public ListenerAdapter(ICrashHandleListener listener) : base("com.tencent.feedback.eup.CrashHandleListener") {
|
|
_listener = listener;
|
|
}
|
|
// 继承自 AndroidJavaProxy 的对象可以直接按照 Java 中的方法签名
|
|
// 写出对应的 C# 方法,参数类型遵循上文提到的数据类型转换规则。
|
|
// 当 Java 调用接口方法时,对应的 C# 方法会自动调用,非常方便。
|
|
byte[] getCrashExtraData(bool isNativeCrashed, string crashType, string crashAddress,
|
|
string crashStack, int nativeSiCode, long crashTime) {
|
|
return _listener.getCrashExtraData(isNativeCrashed, crashType, crashAddress,
|
|
crashStack, nativeSiCode, crashTime);
|
|
}
|
|
|
|
string getCrashExtraMessage(bool isNativeCrashed, string crashType, string crashAddress, string crashStack,
|
|
int nativeSiCode, long crashTime) {
|
|
return _listener.getCrashExtraMessage(isNativeCrashed, crashType, crashAddress, crashStack,
|
|
nativeSiCode, crashTime);
|
|
}
|
|
|
|
void onCrashHandleStart(bool isNativeCrashed) {
|
|
_listener.onCrashHandleStart(isNativeCrashed);
|
|
}
|
|
|
|
bool onCrashHandleEnd(bool isNativeCrashed) {
|
|
return _listener.onCrashHandleEnd(isNativeCrashed);
|
|
}
|
|
|
|
bool onCrashSaving(bool isNativeCrashed, string crashType, string crashAddress, string crashStack,
|
|
int nativeSiCode, long crashTime, string userId, string deviceId, string crashUuid, string processName) {
|
|
return _listener.onCrashSaving(isNativeCrashed, crashType, crashAddress, crashStack, nativeSiCode,
|
|
crashTime, userId, deviceId, crashUuid, processName);
|
|
}
|
|
}
|
|
|
|
public static ListenerAdapter GetCrashListenerAdapter(ICrashHandleListener listener) {
|
|
ListenerAdapter listenerAdapter = null;
|
|
if (listener != null) {
|
|
listenerAdapter = new ListenerAdapter(listener);
|
|
}
|
|
return listenerAdapter;
|
|
}
|
|
#else
|
|
// 定义 C# 端的接口
|
|
public interface ICrashHandleListener {
|
|
string OnBuglyCrashCallback(string name, string reason, string user_info);
|
|
}
|
|
|
|
public class ListenerAdapter {
|
|
private readonly ICrashHandleListener listener;
|
|
public ListenerAdapter(ICrashHandleListener listener) {
|
|
this.listener = listener;
|
|
}
|
|
public string OnBuglyCrashCallback(string name, string reason, string user_info) {
|
|
return listener.OnBuglyCrashCallback(name, reason, user_info);
|
|
}
|
|
}
|
|
|
|
public static ListenerAdapter GetCrashListenerAdapter(ICrashHandleListener listener) {
|
|
ListenerAdapter listenerAdapter = null;
|
|
if (listener != null) {
|
|
listenerAdapter = new ListenerAdapter(listener);
|
|
}
|
|
return listenerAdapter;
|
|
}
|
|
#endif
|
|
}
|