You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@weex.apache.org by gu...@apache.org on 2017/10/09 08:39:03 UTC

[22/50] incubator-weex git commit: * [android] add init jsf exception collection if init framework fail, will collect info and upload

 * [android] add init jsf exception collection
 if init framework fail, will collect info and upload


Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/e0fea169
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/e0fea169
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/e0fea169

Branch: refs/heads/release
Commit: e0fea1699c3529fd4ddd21d44ab6ff9b7826cfdd
Parents: 122aae1
Author: yuhun-alibaba <to...@gmail.com>
Authored: Tue Oct 3 15:04:44 2017 +0800
Committer: yuhun-alibaba <to...@gmail.com>
Committed: Tue Oct 3 15:04:44 2017 +0800

----------------------------------------------------------------------
 .../com/taobao/weex/bridge/WXBridgeManager.java | 122 +++++++++++++------
 1 file changed, 88 insertions(+), 34 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/e0fea169/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridgeManager.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridgeManager.java b/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridgeManager.java
index 16ac34b..d1ea794 100644
--- a/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridgeManager.java
+++ b/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridgeManager.java
@@ -64,7 +64,9 @@ import com.taobao.weex.utils.batch.Interceptor;
 
 import java.io.BufferedReader;
 import java.io.File;
+import java.io.FileInputStream;
 import java.io.FileReader;
+import java.io.InputStreamReader;
 import java.lang.reflect.Constructor;
 import java.text.DateFormat;
 import java.text.SimpleDateFormat;
@@ -139,6 +141,7 @@ public class WXBridgeManager implements Callback,BactchExecutor {
 
   private static String crashUrl = null;
   private static long lastCrashTime = 0;
+  public static final String INITLOGFILE = "/jsserver_start.log";
 
 
   /**
@@ -433,7 +436,7 @@ public class WXBridgeManager implements Callback,BactchExecutor {
     // if (WXEnvironment.isApkDebugable()) {
       mLodBuilder.append("[WXBridgeManager] callNative >>>> instanceId:").append(instanceId)
           .append(", tasks:").append(tasks).append(", callback:").append(callback);
-      WXLogUtils.e(mLodBuilder.substring(0));
+      WXLogUtils.d(mLodBuilder.substring(0));
       mLodBuilder.setLength(0);
     // }
 
@@ -495,7 +498,7 @@ public class WXBridgeManager implements Callback,BactchExecutor {
   public int callCreateBody(String instanceId, String tasks, String callback) {
     if (TextUtils.isEmpty(tasks)) {
       // if (WXEnvironment.isApkDebugable()) {
-        WXLogUtils.e("[WXBridgeManager] callCreateBody: call CreateBody tasks is null");
+        WXLogUtils.d("[WXBridgeManager] callCreateBody: call CreateBody tasks is null");
       // }
       commitJSBridgeAlarmMonitor(instanceId, WXErrorCode.WX_ERR_DOM_CREATEBODY,"[WXBridgeManager] callCreateBody: call CreateBody tasks is null");
       return IWXBridge.INSTANCE_RENDERING_ERROR;
@@ -987,7 +990,7 @@ public class WXBridgeManager implements Callback,BactchExecutor {
     long time = System.currentTimeMillis();
     if (crashUrl == null ||
             (crashUrl != null && !crashUrl.equals(aUrl)) ||
-            ((time - lastCrashTime) > 10000)) {
+            ((time - lastCrashTime) > 15000)) {
       crashUrl = aUrl;
       lastCrashTime = time;
       return true;
@@ -1263,7 +1266,7 @@ public class WXBridgeManager implements Callback,BactchExecutor {
         }
         String err = "[WXBridgeManager] invokeRefreshInstance: framework.js uninitialized.";
         commitJSBridgeAlarmMonitor(instanceId, WXErrorCode.WX_ERR_INVOKE_NATIVE,err);
-        WXLogUtils.e(err);
+        WXLogUtils.d(err);
         return;
       }
       long start = System.currentTimeMillis();
@@ -1581,8 +1584,8 @@ public class WXBridgeManager implements Callback,BactchExecutor {
           commitJSFrameworkAlarmMonitor(IWXUserTrackAdapter.JS_FRAMEWORK, WXErrorCode.WX_SUCCESS, reinitInfo + "success");
         }else{
           if (reInitCount > 1) {
-            WXLogUtils.e("[WXBridgeManager] invokeInitFramework  ExecuteJavaScript fail");
-            String err="[WXBridgeManager] invokeInitFramework  ExecuteJavaScript fail reinit FrameWork";
+            WXLogUtils.e("[WXBridgeManager] invokeReInitFramework  ExecuteJavaScript fail");
+            String err="[WXBridgeManager] invokeReInitFramework  ExecuteJavaScript fail reinit FrameWork";
             commitJSFrameworkAlarmMonitor(IWXUserTrackAdapter.JS_FRAMEWORK, WXErrorCode.WX_ERR_JS_REINIT_FRAMEWORK, err);
           } else {
             WXLogUtils.e("[WXBridgeManager] invokeInitFramework  ExecuteJavaScript fail");
@@ -1777,7 +1780,7 @@ public class WXBridgeManager implements Callback,BactchExecutor {
   private void invokeRegisterModules(Map<String, Object> modules, List<Map<String, Object>> failReceiver) {
     if (modules == null || !isJSFrameworkInit()) {
       if (!isJSFrameworkInit()) {
-        WXLogUtils.e("[WXBridgeManager] invokeRegisterModules: framework.js uninitialized.");
+        WXLogUtils.d("[WXBridgeManager] invokeRegisterModules: framework.js uninitialized.");
       }
       failReceiver.add(modules);
       return;
@@ -1835,41 +1838,92 @@ public class WXBridgeManager implements Callback,BactchExecutor {
    */
   public void reportJSException(String instanceId, String function,
                                 String exception) {
-    if (WXEnvironment.isApkDebugable()) {
       WXLogUtils.e("reportJSException >>>> instanceId:" + instanceId
-                   + ", exception function:" + function + ", exception:"
-                   + exception);
-    }
-    WXSDKInstance instance;
-    if (instanceId != null && (instance = WXSDKManager.getInstance().getSDKInstance(instanceId)) != null) {
-      instance.onJSException(WXErrorCode.WX_ERR_JS_EXECUTE.getErrorCode(), function, exception);
+              + ", exception function:" + function + ", exception:"
+              + exception);
+	  WXSDKInstance instance = null;
+      if (instanceId != null && (instance = WXSDKManager.getInstance().getSDKInstance(instanceId)) != null) {
+          instance.onJSException(WXErrorCode.WX_ERR_JS_EXECUTE.getErrorCode(), function, exception);
 
-      if (METHOD_CREATE_INSTANCE.equals(function)) {
-        try {
-          if (reInitCount > 1 && !instance.isNeedReLoad()) {
-            // JSONObject domObject = JSON.parseObject(tasks);
-            WXDomModule domModule = getDomModule(instanceId);
-            Action action = Actions.getReloadPage(instanceId, true);
-            domModule.postAction((DOMAction)action, true);
-            instance.setNeedLoad(true);
-            return;
+          if (METHOD_CREATE_INSTANCE.equals(function)) {
+              try {
+                  if (reInitCount > 1 && !instance.isNeedReLoad()) {
+                      // JSONObject domObject = JSON.parseObject(tasks);
+                      WXDomModule domModule = getDomModule(instanceId);
+                      Action action = Actions.getReloadPage(instanceId, true);
+                      domModule.postAction((DOMAction) action, true);
+                      instance.setNeedLoad(true);
+                      return;
+                  }
+              } catch (Exception e) {
+                  e.printStackTrace();
+              }
           }
-        } catch (Exception e) {
-          e.printStackTrace();
-        }
+          String err = "function:" + function + "#exception:" + exception;
+          commitJSBridgeAlarmMonitor(instanceId, WXErrorCode.WX_ERR_JS_EXECUTE, err);
       }
-      String err = "function:" + function + "#exception:" + exception;
-      commitJSBridgeAlarmMonitor(instanceId, WXErrorCode.WX_ERR_JS_EXECUTE, err);
 
       IWXJSExceptionAdapter adapter = WXSDKManager.getInstance().getIWXJSExceptionAdapter();
       if (adapter != null) {
-        WXJSExceptionInfo jsException = new WXJSExceptionInfo(instanceId, instance.getBundleUrl(), WXErrorCode.WX_ERR_JS_EXECUTE.getErrorCode(), function, exception, null);
-        adapter.onJSException(jsException);
-        if (WXEnvironment.isApkDebugable()) {
-          WXLogUtils.d(jsException.toString());
-        }
+          String bundleUrl;
+          String exceptionId = instanceId;
+
+          if (instanceId == "" || instanceId == null) {
+              exceptionId = "instanceIdisNull";
+          }
+
+          if (instance == null) {
+              if (("initFramework").equals(function)) {
+                  bundleUrl = "jsExceptionBeforeRenderInstanceNull";
+                  String exceptionExt = null;
+                  try {
+                      if (WXEnvironment.getApplication() != null) {
+                          final String fileName = WXEnvironment.getApplication().getApplicationContext().getCacheDir().getPath() + INITLOGFILE;
+                          try {
+                              File file = new File(fileName);
+                              if (file.exists()) {
+                                  if (file.length() > 0) {
+                                      StringBuilder result = new StringBuilder();
+                                      try {
+                                          InputStreamReader read = new InputStreamReader(new FileInputStream(file), "UTF-8");
+                                          BufferedReader br = new BufferedReader(read);
+                                          String s = null;
+                                          while ((s = br.readLine()) != null) {
+                                              result.append(s + "\n");
+                                          }
+                                          exceptionExt = result.toString();
+                                          br.close();
+                                      } catch (Exception e) {
+                                          e.printStackTrace();
+                                      }
+                                  }
+                                  file.delete();
+                              }
+                          } catch (Throwable throwable) {
+
+                          }
+                      }
+                  } catch (Throwable e) {
+                      e.printStackTrace();
+                  }
+                  exception += "\n" + exceptionExt;
+                  WXLogUtils.e("reportJSException:" + exception);
+
+              } else if (function == null) {
+                  bundleUrl = "jsExceptionInstanceAndFunctionNull";
+              } else {
+                  bundleUrl = "jsExceptionInstanceNull" + function;
+              }
+          } else {
+              bundleUrl = instance.getBundleUrl();
+          }
+
+          WXJSExceptionInfo jsException = new WXJSExceptionInfo(exceptionId, bundleUrl, WXErrorCode.WX_ERR_JS_EXECUTE.getErrorCode(), function, exception, null);
+          adapter.onJSException(jsException);
+          if (WXEnvironment.isApkDebugable()) {
+              WXLogUtils.d(jsException.toString());
+          }
       }
-    }
   }
 
   public static class TimerInfo {