zoukankan      html  css  js  c++  java
  • 腾讯bugly 映射用法

      1 package com.tencent.bugly.agent;
      2 
      3 import android.app.Activity;
      4 import android.content.Context;
      5 import android.os.Handler;
      6 import android.os.Looper;
      7 import android.os.Process;
      8 import android.text.TextUtils;
      9 import android.util.Log;
     10 import java.lang.ref.WeakReference;
     11 import java.lang.reflect.Constructor;
     12 import java.lang.reflect.Field;
     13 import java.lang.reflect.InvocationTargetException;
     14 import java.lang.reflect.Method;
     15 import java.util.Locale;
     16 
     17 public class GameAgent
     18 {
     19   private static final String VERSION = "2.0";
     20   private static final String LOG_TAG = "CrashReport-GameAgent";
     21   private static final int GAME_TYPE_COCOS = 1;
     22   private static final int GAME_TYPE_UNITY = 2;
     23   private static final int LOG_LEVEL_VERBOSE = 0;
     24   private static final int LOG_LEVEL_DEBUG = 1;
     25   private static final int LOG_LEVEL_INFO = 2;
     26   private static final int LOG_LEVEL_WARN = 3;
     27   private static final int LOG_LEVEL_ERROR = 4;
     28   private static final int TYPE_U3D_CRASH = 4;
     29   private static final int TYPE_COCOS2DX_JS_CRASH = 5;
     30   private static final int TYPE_COCOS2DX_LUA_CRASH = 6;
     31   private static final String STRATEGY_CLASS_SUFFIX = "BuglyStrategy";
     32   private static final String OLD_STRATEGY_CLASS_SUFFIX = "crashreport.CrashReport$UserStrategy";
     33   private static final String CRASH_REPORT_CLASS_SUFFIX = "crashreport.CrashReport";
     34   private static final String CLASS_UNITY_PLAYER = "com.unity3d.player.UnityPlayer";
     35   private static final String CLASS_COCOS_ACTIVITY = "org.cocos2dx.lib.Cocos2dxActivity";
     36   private static String sdkPackageName = "com.tencent.bugly";
     37   private static Handler sHandler = null;
     38   private static String sAppVersion = null;
     39   private static String sAppChannel = null;
     40   private static String sUserId = null;
     41   private static boolean sIsDebug = false;
     42   private static int sGameType = 0;
     43   private static WeakReference<Activity> sContext = null;
     44 
     45   public static String getVersion()
     46   {
     47     return "2.0";
     48   }
     49 
     50   public static void printLog(String paramString)
     51   {
     52     if (TextUtils.isEmpty(paramString)) {
     53       return;
     54     }
     55     if (paramString.startsWith("<Log>"))
     56       printLog(2, paramString);
     57     else if (paramString.startsWith("<LogDebug>"))
     58       printLog(1, paramString);
     59     else if (paramString.startsWith("<LogInfo>"))
     60       printLog(2, paramString);
     61     else if (paramString.startsWith("<LogWarning>"))
     62       printLog(3, paramString);
     63     else if (paramString.startsWith("<LogAssert>"))
     64       printLog(3, paramString);
     65     else if (paramString.startsWith("<LogError>"))
     66       printLog(4, paramString);
     67     else if (paramString.startsWith("<LogException>"))
     68       printLog(4, paramString);
     69     else
     70       printLog(0, paramString);
     71   }
     72 
     73   private static void printLog(int paramInt, String paramString)
     74   {
     75     setLog(paramInt, "CrashReport-GameAgent", paramString);
     76   }
     77 
     78   public static Activity getUnityActivity()
     79   {
     80     try
     81     {
     82       Object localObject = Reflection.getStaticField("com.unity3d.player.UnityPlayer", "currentActivity", null);
     83       if ((localObject != null) && ((localObject instanceof Activity)))
     84         return (Activity)localObject;
     85     }
     86     catch (Exception localException) {
     87       Log.w("CrashReport-GameAgent", "Failed to get the current activity from UnityPlayer");
     88       localException.printStackTrace();
     89     }
     90 
     91     return null;
     92   }
     93 
     94   public static Activity getCocosActivity()
     95   {
     96     try
     97     {
     98       Object localObject = Reflection.invokeStaticMethod("org.cocos2dx.lib.Cocos2dxActivity", "getContext", null, new Class[0]);
     99       if ((localObject != null) && ((localObject instanceof Activity)))
    100         return (Activity)localObject;
    101     }
    102     catch (Exception localException) {
    103       Log.w("CrashReport-GameAgent", "Failed to get the current activity from UnityPlayer");
    104       localException.printStackTrace();
    105     }
    106 
    107     return null;
    108   }
    109 
    110   private static Activity getActivity() {
    111     Activity localActivity = null;
    112     if ((sContext != null) && (sContext.get() != null)) {
    113       return (Activity)sContext.get();
    114     }
    115     switch (sGameType) {
    116     case 1:
    117       localActivity = getCocosActivity();
    118       break;
    119     case 2:
    120       localActivity = getUnityActivity();
    121       break;
    122     default:
    123       Log.w("CrashReport-GameAgent", "Game type has not been set.");
    124     }
    125 
    126     return localActivity;
    127   }
    128 
    129   private static Context getApplicationContext() {
    130     Activity localActivity = getActivity();
    131     if (localActivity != null) {
    132       return localActivity.getApplicationContext();
    133     }
    134     return null;
    135   }
    136 
    137   private static void runTaskInUiThread(Runnable paramRunnable) {
    138     Activity localActivity = getActivity();
    139     if (localActivity != null)
    140       localActivity.runOnUiThread(paramRunnable);
    141     else
    142       new Thread(paramRunnable).start();
    143   }
    144 
    145   private static void exitApplication()
    146   {
    147     int i = Process.myPid();
    148     printLog(3, String.format(Locale.US, "Exit application by kill process[%d]", new Object[] { Integer.valueOf(i) }));
    149 
    150     Process.killProcess(i);
    151   }
    152 
    153   private static void delayExit(long paramLong)
    154   {
    155     paramLong = Math.max(0L, paramLong);
    156 
    157     if (sHandler != null) {
    158       sHandler.postDelayed(new Runnable()
    159       {
    160         public void run() {
    161           GameAgent.access$200();
    162         }
    163       }
    164       , paramLong);
    165     }
    166     else
    167     {
    168       try
    169       {
    170         Thread.sleep(paramLong);
    171         exitApplication();
    172       } catch (InterruptedException localInterruptedException) {
    173         localInterruptedException.printStackTrace();
    174       }
    175     }
    176   }
    177 
    178   private static String convertToCanonicalName(String paramString)
    179   {
    180     StringBuilder localStringBuilder = new StringBuilder();
    181     if (sdkPackageName == null) {
    182       sdkPackageName = "com.tencent.bugly";
    183     }
    184     localStringBuilder.append(sdkPackageName);
    185     localStringBuilder.append(".");
    186     localStringBuilder.append(paramString);
    187     return localStringBuilder.toString();
    188   }
    189 
    190   public static void setSdkPackageName(String paramString)
    191   {
    192     if (TextUtils.isEmpty(paramString)) {
    193       return;
    194     }
    195     sdkPackageName = paramString;
    196   }
    197 
    198   public static void setGameType(int paramInt) {
    199     sGameType = paramInt;
    200   }
    201 
    202   public static void setLogEnable(boolean paramBoolean)
    203   {
    204     sIsDebug = paramBoolean;
    205   }
    206 
    207   private static Object newStrategy(Context paramContext, String paramString1, String paramString2, long paramLong)
    208   {
    209     if ((paramContext == null) || ((TextUtils.isEmpty(paramString1)) && (TextUtils.isEmpty(paramString2)))) {
    210       return null;
    211     }
    212     Object localObject = Reflection.newInstance(convertToCanonicalName("crashreport.CrashReport$UserStrategy"), new Object[] { paramContext }, new Class[] { Context.class });
    213 
    214     if (localObject != null) {
    215       try {
    216         Class localClass = Class.forName(convertToCanonicalName("BuglyStrategy"));
    217         Method localMethod1 = localClass.getDeclaredMethod("setAppChannel", new Class[] { String.class });
    218         localMethod1.invoke(localObject, new Object[] { paramString1 });
    219 
    220         Method localMethod2 = localClass.getDeclaredMethod("setAppVersion", new Class[] { String.class });
    221         localMethod2.invoke(localObject, new Object[] { paramString2 });
    222 
    223         Method localMethod3 = localClass.getDeclaredMethod("setAppReportDelay", new Class[] { Long.TYPE });
    224         localMethod3.invoke(localObject, new Object[] { Long.valueOf(paramLong) });
    225 
    226         return localObject;
    227       } catch (NoSuchMethodException localNoSuchMethodException) {
    228         localNoSuchMethodException.printStackTrace();
    229       } catch (IllegalAccessException localIllegalAccessException) {
    230         localIllegalAccessException.printStackTrace();
    231       } catch (IllegalArgumentException localIllegalArgumentException) {
    232         localIllegalArgumentException.printStackTrace();
    233       } catch (InvocationTargetException localInvocationTargetException) {
    234         localInvocationTargetException.printStackTrace();
    235       } catch (Exception localException) {
    236         localException.printStackTrace();
    237       }
    238     }
    239     return null;
    240   }
    241 
    242   public static void initCrashReport(String paramString, boolean paramBoolean) {
    243     setLogEnable(paramBoolean);
    244     initCrashReport(paramString, sAppChannel, sAppVersion, sUserId, 0L);
    245   }
    246 
    247   private static void initCrashReport(final String paramString1, String paramString2, String paramString3, final String paramString4, long paramLong)
    248   {
    249     final Context localContext = getApplicationContext();
    250     if (localContext == null) {
    251       printLog(4, "Context is null. bugly initialize terminated.");
    252       return;
    253     }
    254     if (TextUtils.isEmpty(paramString1)) {
    255       printLog(4, "Please input appid when initCrashReport.");
    256       return;
    257     }
    258     sHandler = new Handler(Looper.getMainLooper());
    259     Object localObject = newStrategy(localContext, paramString2, paramString3, paramLong);
    260     runTaskInUiThread(new Runnable()
    261     {
    262       public void run()
    263       {
    264         int i = 0;
    265         boolean bool = GameAgent.sIsDebug;
    266         if (this.val$strategy != null) {
    267           Class localClass = null;
    268           try {
    269             localClass = Class.forName(GameAgent.convertToCanonicalName("crashreport.CrashReport$UserStrategy"));
    270           } catch (ClassNotFoundException localClassNotFoundException) {
    271             localClassNotFoundException.printStackTrace();
    272           } catch (Exception localException) {
    273             localException.printStackTrace();
    274           }
    275           if (localClass != null) {
    276             GameAgent.Reflection.invokeStaticMethod(GameAgent.access$500("crashreport.CrashReport"), "initCrashReport", new Object[] { localContext, paramString1, Boolean.valueOf(bool), this.val$strategy }, new Class[] { Context.class, String.class, Boolean.TYPE, localClass });
    277 
    278             i = 1;
    279           }
    280         }
    281 
    282         if (i == 0) {
    283           GameAgent.Reflection.invokeStaticMethod(GameAgent.access$500("crashreport.CrashReport"), "initCrashReport", new Object[] { localContext, paramString1, Boolean.valueOf(bool) }, new Class[] { Context.class, String.class, Boolean.TYPE });
    284         }
    285 
    286         GameAgent.setUserId(paramString4);
    287       }
    288     });
    289   }
    290 
    291   public static void setAppVersion(String paramString)
    292   {
    293     if (TextUtils.isEmpty(paramString)) {
    294       return;
    295     }
    296     sAppVersion = paramString;
    297     runTaskInUiThread(new Runnable()
    298     {
    299       public void run() {
    300         GameAgent.Reflection.invokeStaticMethod(GameAgent.access$500("crashreport.CrashReport"), "setAppVersion", new Object[] { GameAgent.access$600(), this.val$version }, new Class[] { Context.class, String.class });
    301       }
    302     });
    303   }
    304 
    305   public static void setAppChannel(String paramString)
    306   {
    307     if (TextUtils.isEmpty(paramString)) {
    308       return;
    309     }
    310     sAppChannel = paramString;
    311     runTaskInUiThread(new Runnable()
    312     {
    313       public void run() {
    314         GameAgent.Reflection.invokeStaticMethod(GameAgent.access$500("crashreport.CrashReport"), "setAppChannel", new Object[] { GameAgent.access$600(), this.val$channel }, new Class[] { Context.class, String.class });
    315       }
    316     });
    317   }
    318 
    319   public static void setUserId(String paramString)
    320   {
    321     if (TextUtils.isEmpty(paramString)) {
    322       return;
    323     }
    324     sUserId = paramString;
    325     runTaskInUiThread(new Runnable()
    326     {
    327       public void run() {
    328         GameAgent.Reflection.invokeStaticMethod(GameAgent.access$500("crashreport.CrashReport"), "setUserId", new Object[] { GameAgent.access$600(), this.val$userId }, new Class[] { Context.class, String.class });
    329       }
    330     });
    331   }
    332 
    333   public static void setUserSceneTag(int paramInt)
    334   {
    335     runTaskInUiThread(new Runnable()
    336     {
    337       public void run() {
    338         GameAgent.Reflection.invokeStaticMethod(GameAgent.access$500("crashreport.CrashReport"), "setUserSceneTag", new Object[] { GameAgent.access$600(), Integer.valueOf(this.val$sceneId) }, new Class[] { Context.class, Integer.TYPE });
    339       }
    340     });
    341   }
    342 
    343   public static void putUserData(String paramString1, final String paramString2)
    344   {
    345     if ((TextUtils.isEmpty(paramString1)) || (TextUtils.isEmpty(paramString2))) {
    346       return;
    347     }
    348     runTaskInUiThread(new Runnable()
    349     {
    350       public void run() {
    351         GameAgent.Reflection.invokeStaticMethod(GameAgent.access$500("crashreport.CrashReport"), "putUserData", new Object[] { GameAgent.access$600(), this.val$key, paramString2 }, new Class[] { Context.class, String.class, String.class });
    352       }
    353     });
    354   }
    355 
    356   public static void removeUserData(String paramString)
    357   {
    358     if (TextUtils.isEmpty(paramString)) {
    359       return;
    360     }
    361     runTaskInUiThread(new Runnable()
    362     {
    363       public void run() {
    364         GameAgent.Reflection.invokeStaticMethod(GameAgent.access$500("crashreport.CrashReport"), "removeUserData", new Object[] { GameAgent.access$600(), this.val$key }, new Class[] { Context.class, String.class });
    365       }
    366     });
    367   }
    368 
    369   public static void setSdkConfig(String paramString1, final String paramString2)
    370   {
    371     if ((TextUtils.isEmpty(paramString1)) || (TextUtils.isEmpty(paramString2))) {
    372       return;
    373     }
    374     runTaskInUiThread(new Runnable()
    375     {
    376       public void run() {
    377         GameAgent.Reflection.invokeStaticMethod(GameAgent.access$500("crashreport.CrashReport"), "putSdkData", new Object[] { GameAgent.access$600(), "SDK_" + this.val$key, paramString2 }, new Class[] { Context.class, String.class, String.class });
    378       }
    379     });
    380   }
    381 
    382   public static void setLog(int paramInt, final String paramString1, final String paramString2)
    383   {
    384     if (TextUtils.isEmpty(paramString1))
    385       return;
    386     String str;
    387     switch (paramInt) {
    388     case 0:
    389       str = "v";
    390       break;
    391     case 1:
    392       str = "d";
    393       break;
    394     case 2:
    395       str = "i";
    396       break;
    397     case 3:
    398       str = "w";
    399       break;
    400     case 4:
    401       str = "e";
    402       break;
    403     default:
    404       str = null;
    405     }
    406 
    407     if (str != null)
    408       runTaskInUiThread(new Runnable()
    409       {
    410         public void run() {
    411           GameAgent.Reflection.invokeStaticMethod(GameAgent.access$500("crashreport.BuglyLog"), this.val$method, new Object[] { paramString1, paramString2 }, new Class[] { String.class, String.class });
    412         }
    413       });
    414   }
    415 
    416   private static void postCocosException(int paramInt, String paramString1, final String paramString2, String paramString3, final boolean paramBoolean)
    417   {
    418     try
    419     {
    420       if (paramString3.startsWith("stack traceback")) {
    421         paramString3 = paramString3.substring(paramString3.indexOf("
    ") + 1, paramString3.length()).trim();
    422       }
    423 
    424       int i = paramString3.indexOf("
    ");
    425       if (i > 0) {
    426         paramString3 = paramString3.substring(i + 1, paramString3.length());
    427       }
    428 
    429       i = paramString3.indexOf("
    ");
    430       str2 = paramString3;
    431       if (i > 0) {
    432         str2 = paramString3.substring(0, i);
    433       }
    434 
    435       int j = str2.indexOf("]:");
    436       if ((paramString1 == null) || (paramString1.length() == 0)) {
    437         if (j != -1)
    438           paramString1 = str2.substring(0, j + 1);
    439         else
    440           paramString1 = paramString2;
    441       }
    442     }
    443     catch (Throwable localThrowable)
    444     {
    445       if ((paramString1 == null) || (paramString1.length() == 0)) {
    446         paramString1 = paramString2;
    447       }
    448     }
    449     final String str1 = paramString1;
    450     final String str2 = paramString3;
    451     runTaskInUiThread(new Runnable()
    452     {
    453       public void run() {
    454         GameAgent.Reflection.invokeStaticMethod(GameAgent.access$500("crashreport.inner.InnerApi"), "postCocos2dxCrashAsync", new Object[] { Integer.valueOf(this.val$category), str1, paramString2, str2 }, new Class[] { Integer.TYPE, String.class, String.class, String.class });
    455 
    456         if (paramBoolean)
    457           GameAgent.delayExit(3000L);
    458       }
    459     });
    460   }
    461 
    462   private static void postUnityException(String paramString1, final String paramString2, final String paramString3, final boolean paramBoolean)
    463   {
    464     runTaskInUiThread(new Runnable()
    465     {
    466       public void run() {
    467         GameAgent.Reflection.invokeStaticMethod(GameAgent.access$500("crashreport.inner.InnerApi"), "postU3dCrashAsync", new Object[] { this.val$type, paramString2, paramString3 }, new Class[] { String.class, String.class, String.class });
    468 
    469         if (paramBoolean)
    470           GameAgent.delayExit(3000L);
    471       }
    472     });
    473   }
    474 
    475   public static void postException(int paramInt, String paramString1, String paramString2, String paramString3, boolean paramBoolean)
    476   {
    477     switch (paramInt) {
    478     case 5:
    479     case 6:
    480       postCocosException(paramInt, paramString1, paramString2, paramString3, paramBoolean);
    481       break;
    482     case 4:
    483       postUnityException(paramString1, paramString2, paramString3, paramBoolean);
    484       break;
    485     default:
    486       printLog(4, new StringBuilder().append("The category of exception posted is unknown: ").append(String.valueOf(paramInt)).toString());
    487     }
    488   }
    489 
    490   private static class Reflection
    491   {
    492     private static Object getStaticField(String paramString1, String paramString2, Object paramObject)
    493     {
    494       try
    495       {
    496         Class localClass = Class.forName(paramString1);
    497 
    498         Field localField = localClass.getDeclaredField(paramString2);
    499         localField.setAccessible(true);
    500         return localField.get(paramObject);
    501       } catch (ClassNotFoundException localClassNotFoundException) {
    502         localClassNotFoundException.printStackTrace();
    503       } catch (NoSuchFieldException localNoSuchFieldException) {
    504         localNoSuchFieldException.printStackTrace();
    505       } catch (IllegalAccessException localIllegalAccessException) {
    506         localIllegalAccessException.printStackTrace();
    507       }
    508 
    509       return null;
    510     }
    511 
    512     private static Object invokeStaticMethod(String paramString1, String paramString2, Object[] paramArrayOfObject, Class<?>[] paramArrayOfClass)
    513     {
    514       try
    515       {
    516         Class localClass = Class.forName(paramString1);
    517         Method localMethod = localClass.getDeclaredMethod(paramString2, paramArrayOfClass);
    518         localMethod.setAccessible(true);
    519         return localMethod.invoke(null, paramArrayOfObject);
    520       } catch (ClassNotFoundException localClassNotFoundException) {
    521         localClassNotFoundException.printStackTrace();
    522       } catch (NoSuchMethodException localNoSuchMethodException) {
    523         localNoSuchMethodException.printStackTrace();
    524       } catch (InvocationTargetException localInvocationTargetException) {
    525         localInvocationTargetException.printStackTrace();
    526       } catch (IllegalAccessException localIllegalAccessException) {
    527         localIllegalAccessException.printStackTrace();
    528       } catch (Exception localException) {
    529         localException.printStackTrace();
    530       }
    531       return null;
    532     }
    533 
    534     private static Object newInstance(String paramString, Object[] paramArrayOfObject, Class<?>[] paramArrayOfClass)
    535     {
    536       try
    537       {
    538         Class localClass = Class.forName(paramString);
    539         if (paramArrayOfObject == null) {
    540           return localClass.newInstance();
    541         }
    542         Constructor localConstructor = localClass.getConstructor(paramArrayOfClass);
    543         return localConstructor.newInstance(paramArrayOfObject);
    544       }
    545       catch (ClassNotFoundException localClassNotFoundException) {
    546         localClassNotFoundException.printStackTrace();
    547       } catch (NoSuchMethodException localNoSuchMethodException) {
    548         localNoSuchMethodException.printStackTrace();
    549       } catch (InstantiationException localInstantiationException) {
    550         localInstantiationException.printStackTrace();
    551       } catch (IllegalAccessException localIllegalAccessException) {
    552         localIllegalAccessException.printStackTrace();
    553       } catch (InvocationTargetException localInvocationTargetException) {
    554         localInvocationTargetException.printStackTrace();
    555       } catch (Exception localException) {
    556         localException.printStackTrace();
    557       }
    558       return null;
    559     }
    560   }
    561 }
    View Code
     1 private static readonly string GAME_AGENT_CLASS = "com.tencent.bugly.agent.GameAgent";
     2     private static readonly int TYPE_U3D_CRASH = 4;
     3     private static readonly int GAME_TYPE_UNITY = 2;
     4     private static bool hasSetGameType = false;
     5     private static AndroidJavaClass _gameAgentClass = null;
     6     
     7     public static AndroidJavaClass GameAgent {
     8         get {
     9             if (_gameAgentClass == null) {
    10                 _gameAgentClass = new AndroidJavaClass(GAME_AGENT_CLASS);
    11 //                using (AndroidJavaClass clazz = new AndroidJavaClass(CLASS_UNITYAGENT)) {
    12 //                    _gameAgentClass = clazz.CallStatic<AndroidJavaObject> ("getInstance");
    13 //                }
    14             }
    15             if (!hasSetGameType) {
    16                 // set game type: unity(2).
    17                 _gameAgentClass.CallStatic ("setGameType", GAME_TYPE_UNITY);
    18                 hasSetGameType = true;
    19             }
    20             return _gameAgentClass;
    21         }
    22     }
    View Code
  • 相关阅读:
    383. Ransom Note
    598. Range Addition II
    453. Minimum Moves to Equal Array Elements
    492. Construct the Rectangle
    171. Excel Sheet Column Number
    697. Degree of an Array
    665. Nondecreasing Array
    视频网站使用H265编码能提高视频清晰度吗?
    现阶段的语音视频通话SDK需要解决哪些问题?
    企业远程高清会议平台视频会议系统在手机端使用的必备要求有哪些?
  • 原文地址:https://www.cnblogs.com/mttnor/p/6409849.html
Copyright © 2011-2022 走看看