| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503 | using UnityEngine;using System.Collections;#if !UNITY_STANDALONE_WINusing com.xsj.Crasheye.U3D;#endifusing 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}
 |