123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503 |
- using UnityEngine;
- using System.Collections;
- #if !UNITY_STANDALONE_WIN
- using com.xsj.Crasheye.U3D;
- #endif
- using System;
- using System.Text;
- using System.Collections.Generic;
- using System.Runtime.InteropServices;
- using System.IO;
- using System.Runtime.CompilerServices;
- public class CrasheyeForAndroid : MonoBehaviour
- {
- #if UNITY_ANDROID && !UNITY_STANDALONE_WIN
- /// <summary> 通过JNI调用Java添加自定义数据
- /// </summary>
- /// <param name="key"></param>
- /// <param name="value"></param>
- [DllImport("CrasheyeNDK")]
- private static extern void SetCustomData(string key, string value);
- /// <summary> 通过JNI调用
- /// </summary>
- /// <param name="key"></param>
- /// <returns></returns>
- [DllImport("CrasheyeNDK")]
- private static extern string GetCustomData(string key);
- /// <summary> 通过JNI移除自定义数据
- /// </summary>
- /// <param name="pKey"></param>
- [DllImport("CrasheyeNDK")]
- private static extern void RemoveCustomData(string pKey);
- /// <summary> 通过JNI清除自定义数据
- /// </summary>
- [DllImport("CrasheyeNDK")]
- private static extern void CleanCustomData();
- /// <summary> 通过JNI调用Java添加打点信息
- /// </summary>
- /// <param name="breadcrumb"></param>
- [DllImport("CrasheyeNDK")]
- private static extern void LeaveBreadcrumbData(string breadcrumb);
-
- /// <summary>
- /// 崩溃回溯C#堆栈信息
- /// </summary>
- private static bool CSharpStackTrace = false;
- /// <summary>
- /// 用于调用java函数
- /// </summary>
- private static AndroidJavaClass dumpcls;
- /// <summary>
- /// 设置AppVersion信息
- /// </summary>
- private static string YourAppVersion = "NA";
- /// <summary>
- /// 设置渠道号
- /// </summary>
- private static string YourChannelId = "NA";
- /// <summary>
- /// 设置是否只在wifi下往服务器发送数据
- /// </summary>
- private static bool FlushOnlyOverWiFi = false;
-
- /// <summary>
- /// Android的初始化
- /// </summary>
- /// <param name="appKeyForAndroid"></param>
- /// <param name="channIdForAndroid"></param>
- public static void Init(string appKeyForAndroid, string channIdForAndroid)
- {
- if (string.IsNullOrEmpty(appKeyForAndroid))
- {
- return;
- }
- AndroidJavaClass cls = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
- AndroidJavaObject javaObj = cls.GetStatic<AndroidJavaObject>("currentActivity");
- EnableDebug();
- dumpcls = new AndroidJavaClass("com.xsj.crasheye.Crasheye");
- if (!YourAppVersion.Equals("NA"))
- {
- dumpcls.CallStatic("setAppVersion", new object[] { YourAppVersion });
- }
- if (FlushOnlyOverWiFi)
- { // 默认什为false
- dumpcls.CallStatic("setFlushOnlyOverWiFi", new object[] { FlushOnlyOverWiFi });
- }
- dumpcls.CallStatic("setChannelID", new object[] { channIdForAndroid });
- dumpcls.CallStatic("initWithNativeHandleUserspaceSig", new object[] { javaObj, appKeyForAndroid });
- if (CSharpStackTrace)
- {
- Crasheye.crasheyeLib.InitCrasheyeLib();
- }
- Crasheye.crasheyeLib.SetExceptionCallback();
- }
- /// <summary>
- /// 如果启动了C#堆栈回溯可能会导致某些机型出现宕机
- /// </summary>
- public static void EnableCSharpStackTrace()
- {
- CSharpStackTrace = true;
- }
- /// <summary> 设置版本号信息
- /// </summary>
- /// <param name="yourAppVersion"></param>
- public static void SetAppVersion(string yourAppVersion)
- {
- if (yourAppVersion == null)
- {
- return;
- }
- YourAppVersion = yourAppVersion;
- }
- /// <summary> 获取SDK版本信息
- /// </summary>
- /// <returns>返回sdk版本号</returns>
- public static string GetAppVersion()
- {
- try
- {
- dumpcls = new AndroidJavaClass("com.xsj.crasheye.Crasheye");
- if (dumpcls == null)
- {
- return "NA";
- }
- string sdkVersion = dumpcls.CallStatic<string>("getSDKVersion", new object[] { });
- if (string.IsNullOrEmpty(sdkVersion))
- {
- return "NA";
- }
- return sdkVersion;
- }
- catch (Exception ex)
- {
- Debug.LogError(ex.Message);
- return "NA";
- }
- }
- /// <summary> 设置用户信息
- /// </summary>
- /// <param name="userIdentifier"></param>
- public static void SetUserIdentifier(string userIdentifier)
- {
- if (String.IsNullOrEmpty(userIdentifier))
- {
- Debug.LogError("set user identifier is null or empty!");
- return;
- }
- try
- {
- dumpcls = new AndroidJavaClass("com.xsj.crasheye.Crasheye");
- if (dumpcls == null)
- {
- return;
- }
- dumpcls.CallStatic("setUserIdentifier", new object[] { userIdentifier });
- }
- catch (Exception ex)
- {
- Debug.LogError(ex.Message);
- }
- }
- /// <summary> SetURL
- /// </summary>
- /// <param name="SetURL"></param>
- public static void SetURL(string url)
- {
- if (String.IsNullOrEmpty(url))
- {
- Debug.LogError("set url is null or empty!");
- return;
- }
- try
- {
- dumpcls = new AndroidJavaClass("com.xsj.crasheye.Crasheye");
- if (dumpcls == null)
- {
- return;
- }
- dumpcls.CallStatic("setURL", new object[] { url });
- }
- catch (Exception ex)
- {
- Debug.LogError(ex.Message);
- }
- }
- /// <summary> 指定获取应用程序log日志的行数
- /// </summary>
- /// <param name="lines">设置获取行号</param>
- public static void SetLogging(int lines)
- {
- try
- {
- dumpcls = new AndroidJavaClass("com.xsj.crasheye.Crasheye");
- if (dumpcls == null)
- {
- return;
- }
- dumpcls.CallStatic("setLogging", new object[] { lines });
- }
- catch (Exception ex)
- {
- Debug.LogError(ex.Message);
- }
- }
- /// <summary> 获取应用程序log日志关键字过滤
- /// </summary>
- /// <param name="filter">设置获取关键字</param>
- public static void SetLogging(string filter)
- {
- if (string.IsNullOrEmpty(filter))
- {
- return;
- }
- try
- {
- dumpcls = new AndroidJavaClass("com.xsj.crasheye.Crasheye");
- if (dumpcls == null)
- {
- return;
- }
- dumpcls.CallStatic("setLogging", new object[] { filter });
- }
- catch (Exception ex)
- {
- Debug.LogError(ex.Message);
- }
- }
- /// <summary> 获取应用程序log日志(过滤条件:关键字过滤+行数)
- /// </summary>
- /// <param name="lines">设置获取行数</param>
- /// <param name="filter">设置获取关键字</param>
- public static void SetLogging(int lines, string filter)
- {
- if (string.IsNullOrEmpty(filter))
- {
- return;
- }
- try
- {
- dumpcls = new AndroidJavaClass("com.xsj.crasheye.Crasheye");
- if (dumpcls == null)
- {
- return;
- }
- dumpcls.CallStatic("setLogging", new object[] { lines, filter });
- }
- catch (Exception ex)
- {
- Debug.LogError(ex.Message);
- }
- }
- public static void SetIsBetaVersion(bool isBeta)
- {
- try
- {
- dumpcls = new AndroidJavaClass("com.xsj.crasheye.Crasheye");
- if (dumpcls == null)
- {
- return;
- }
- dumpcls.CallStatic("setIsBetaVersion", new object[] { isBeta });
- }
- catch (Exception ex)
- {
- Debug.LogError(ex.Message);
- }
- }
- /// <summary> 设置是否在Wifi下往服务器发送信息
- /// </summary>
- /// <param name="enabled"></param>
- public static void SetFlushOnlyOverWiFi(bool enabled)
- {
- FlushOnlyOverWiFi = enabled;
- }
- /// <summary>
- /// 打调试信息设置打开
- /// </summary>
- public static void EnableDebug()
- {
- try
- {
- dumpcls = new AndroidJavaClass("com.xsj.crasheye.Crasheye");
- dumpcls.CallStatic("enableDebug", new object[]{});
- }
- catch (Exception ex)
- {
- Debug.LogError("call java set debug log err:" + ex.Message);
- }
- }
-
- /// <summary>
- /// 添加自定义数据
- /// </summary>
- /// <param name="key">Key.</param>
- /// <param name="value">Value.</param>
- public static void AddExtraData(string key, string value)
- {
- if (string.IsNullOrEmpty(key) || string.IsNullOrEmpty(value))
- {
- return;
- }
- SetCustomData(key, value);
- try
- {
- dumpcls = new AndroidJavaClass("com.xsj.crasheye.Crasheye");
- if (dumpcls == null)
- {
- return;
- }
- dumpcls.CallStatic("addExtraData", new object[] { key, value });
- }
- catch (Exception ex)
- {
- Debug.LogError(ex.Message);
- }
- }
- /// <summary>
- /// 获取自定义的值
- /// </summary>
- /// <param name="key"></param>
- /// <returns></returns>
- public static string GetExtraData(string key)
- {
- if (string.IsNullOrEmpty(key))
- {
- return "NA";
- }
- return GetCustomData(key);
- }
- /// <summary>
- /// 移除自定义数据
- /// </summary>
- /// <param name="key"></param>
- public static void RemoveExtraData(string key)
- {
- if (string.IsNullOrEmpty(key))
- {
- return;
- }
- RemoveCustomData(key);
- }
- /// <summary>
- /// 清空所有自定数据
- /// </summary>
- public static void CleanExtraData()
- {
- CleanCustomData();
- }
- /// <summary>
- /// 打点数据
- /// </summary>
- /// <param name="breadcrumb">Breadcrumb.</param>
- public static void LeaveBreadcrumb(string breadcrumb)
- {
- if (string.IsNullOrEmpty(breadcrumb))
- {
- return;
- }
- LeaveBreadcrumbData(breadcrumb);
- try
- {
- dumpcls = new AndroidJavaClass("com.xsj.crasheye.Crasheye");
- if (dumpcls == null)
- {
- return;
- }
- dumpcls.CallStatic("leaveBreadcrumb", new object[] { breadcrumb });
- }
- catch (Exception ex)
- {
- Debug.LogError(ex.Message);
- }
- }
- public static void setInternalExtraData()
- {
- var internalExtraData = GetHardwareInfo();
- if (String.IsNullOrEmpty(internalExtraData))
- {
- Debug.LogError("set internalExtraData is null or empty!");
- return;
- }
- try
- {
- dumpcls = new AndroidJavaClass("com.xsj.crasheye.Crasheye");
- if (dumpcls == null)
- {
- return;
- }
- dumpcls.CallStatic("setInternalExtraData", new object[] { internalExtraData });
- }
- catch (Exception ex)
- {
- Debug.LogError(ex.Message);
- }
- }
- private static string GetCpuInfo()
- {
- string cpuInfo = "NA";
- TextReader file = null;
- AndroidJavaClass androidOSBuild = new AndroidJavaClass("android.os.Build");
- if (File.Exists("/proc/cpuinfo"))
- {
- file = File.OpenText("/proc/cpuinfo");
- }
-
- if (file == null)
- {
- cpuInfo = androidOSBuild.GetStatic<string>("HARDWARE");
- return cpuInfo;
- }
- try
- {
- string line;
- while ((line = file.ReadLine()) != null)
- {
- if (line.ToLower().IndexOf("hardware") != -1)
- {
- string[] partArr = line.Split(':');
- if (partArr.Length > 0)
- {
- cpuInfo = partArr[partArr.Length - 1].Trim();
- break;
- }
- }
- }
- if (cpuInfo == "NA")
- {
- cpuInfo = androidOSBuild.GetStatic<string>("HARDWARE");
- }
- }
- catch (Exception ex)
- {
- Debug.LogError(ex.Message);
- }
- return cpuInfo;
- }
- private static string GetHardwareInfo()
- {
- StringBuilder sb = new StringBuilder();
- sb.Append(SystemInfo.graphicsDeviceName);
- sb.Append("###" + GetCpuInfo());
- return sb.ToString();
- }
- #endif
- }
|