init framework and insert cacheDir for debug
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/07bc5b0d Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/07bc5b0d Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/07bc5b0d Branch: refs/heads/release-0.16 Commit: 07bc5b0dc44762603f2465835a1b3530b76f238e Parents: dbc94f4 Author: 御é <wentao....@alibaba-inc.com> Authored: Mon Oct 9 16:40:02 2017 +0800 Committer: yuhun-alibaba <tomcat...@gmail.com> Committed: Tue Oct 10 17:23:17 2017 +0800 ---------------------------------------------------------------------- .../java/com/taobao/weex/bridge/WXBridge.java | 17 ++++++ .../com/taobao/weex/bridge/WXBridgeManager.java | 25 ++++++++- .../java/com/taobao/weex/common/IWXBridge.java | 9 ++++ .../taobao/weex/utils/WXSoInstallMgrSdk.java | 56 ++++++++++++++++++++ .../taobao/weex/bridge/WXWebsocketBridge.java | 15 ++++++ 5 files changed, 121 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/07bc5b0d/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridge.java ---------------------------------------------------------------------- diff --git a/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridge.java b/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridge.java index 9d88fc2..b95c7a6 100644 --- a/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridge.java +++ b/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridge.java @@ -36,6 +36,8 @@ class WXBridge implements IWXBridge { public static final String TAG = "WXBridge"; + public static final boolean MULTIPROCESS = true; + /** * Init JSFrameWork * @@ -43,6 +45,13 @@ class WXBridge implements IWXBridge { */ public native int initFramework(String framework, WXParams params); + /** + * Init JSFrameWork + * + * @param framework assets/main.js + */ + public native int initFramework(String framework, WXParams params, String cacheDir, boolean onSdcard); + /** * Execute JavaScript function @@ -68,6 +77,14 @@ class WXBridge implements IWXBridge { */ public native void takeHeapSnapshot(String filename); + + public int initFrameworkEnv(String framework, WXParams params, String cacheDir, boolean onSdcard){ + if (MULTIPROCESS) { + return initFramework(framework, params, cacheDir, onSdcard); + } else { + return initFramework(framework, params); + } + } /** * JavaScript uses this methods to call Android code * http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/07bc5b0d/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 a949e3b..07f2381 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 @@ -19,6 +19,8 @@ package com.taobao.weex.bridge; import android.content.Context; +import android.content.pm.ApplicationInfo; +import android.content.pm.PackageManager; import android.os.Handler; import android.os.Handler.Callback; import android.os.Looper; @@ -1564,7 +1566,28 @@ public class WXBridgeManager implements Callback,BactchExecutor { } long start = System.currentTimeMillis(); - if(mWXBridge.initFramework(framework, assembleDefaultOptions())==INIT_FRAMEWORK_OK){ + String crashFile=""; + boolean installOnSdcard = false; + try { + crashFile = WXEnvironment.getApplication().getApplicationContext().getCacheDir().getPath(); + } catch (Exception e) { + e.printStackTrace(); + } + + try { + PackageManager pm = WXEnvironment.getApplication().getApplicationContext().getPackageManager(); + String pkgName = WXEnvironment.getApplication().getPackageName(); + ApplicationInfo appInfo = pm.getApplicationInfo(pkgName, 0); + if ((appInfo.flags & ApplicationInfo.FLAG_EXTERNAL_STORAGE) != 0) { + // App on sdcard + installOnSdcard = true; + } + } catch (Exception e) { + e.printStackTrace(); + } + + // extends initFramework + if(mWXBridge.initFrameworkEnv(framework, assembleDefaultOptions(), crashFile, installOnSdcard)==INIT_FRAMEWORK_OK){ WXEnvironment.sJSLibInitTime = System.currentTimeMillis() - start; WXLogUtils.renderPerformanceLog("initFramework", WXEnvironment.sJSLibInitTime); WXEnvironment.sSDKInitTime = System.currentTimeMillis() - WXEnvironment.sSDKInitStart; http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/07bc5b0d/android/sdk/src/main/java/com/taobao/weex/common/IWXBridge.java ---------------------------------------------------------------------- diff --git a/android/sdk/src/main/java/com/taobao/weex/common/IWXBridge.java b/android/sdk/src/main/java/com/taobao/weex/common/IWXBridge.java index 9d4885c..9e83dde 100644 --- a/android/sdk/src/main/java/com/taobao/weex/common/IWXBridge.java +++ b/android/sdk/src/main/java/com/taobao/weex/common/IWXBridge.java @@ -38,6 +38,15 @@ public interface IWXBridge extends IWXObject { */ int initFramework(String framework, WXParams params); + + /** + * init Weex + * + * @param framework assets/main.js + * @return + */ + int initFrameworkEnv(String framework, WXParams params, String cacheDir, boolean onSdcard); + /** * execute javascript function */ http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/07bc5b0d/android/sdk/src/main/java/com/taobao/weex/utils/WXSoInstallMgrSdk.java ---------------------------------------------------------------------- diff --git a/android/sdk/src/main/java/com/taobao/weex/utils/WXSoInstallMgrSdk.java b/android/sdk/src/main/java/com/taobao/weex/utils/WXSoInstallMgrSdk.java index a7fba8a..e402ee7 100644 --- a/android/sdk/src/main/java/com/taobao/weex/utils/WXSoInstallMgrSdk.java +++ b/android/sdk/src/main/java/com/taobao/weex/utils/WXSoInstallMgrSdk.java @@ -32,6 +32,7 @@ import com.taobao.weex.common.WXErrorCode; import com.taobao.weex.common.WXPerformance; import java.io.File; +import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; @@ -68,6 +69,7 @@ public class WXSoInstallMgrSdk { private final static String ARMEABI = "armeabi"; //default private final static String X86 = "x86"; private final static String MIPS = "mips"; + private final static String STARTUPSO = "/libweexjsb.so"; private final static int ARMEABI_Size = 3583820; private final static int X86_Size = 4340864; @@ -111,6 +113,9 @@ public class WXSoInstallMgrSdk { return false; } + // copy startup so + copyStartUpSo(); + boolean InitSuc = false; if (checkSoIsValid(libName, BuildConfig.ARMEABI_Size) ||checkSoIsValid(libName, BuildConfig.X86_Size)) { @@ -170,6 +175,57 @@ public class WXSoInstallMgrSdk { return InitSuc; } + /** + * copyStartUpSo + */ + public static void copyStartUpSo() { + try { + boolean installOnSdcard = true; + String pkgName = WXEnvironment.getApplication().getPackageName(); + // cp weexjsb any way +// try { +// PackageManager pm = WXEnvironment.getApplication().getApplicationContext().getPackageManager(); +// ApplicationInfo appInfo = pm.getApplicationInfo(pkgName, 0); +// if ((appInfo.flags & ApplicationInfo.FLAG_EXTERNAL_STORAGE) != 0) { +// // App on sdcard +// installOnSdcard = true; +// } +// } catch (Throwable e) { +// } + if (installOnSdcard) { + + String cacheFile = WXEnvironment.getApplication().getApplicationContext().getCacheDir().getPath(); + File newfile = new File(cacheFile + STARTUPSO); + if (newfile.exists()) { + return; + } + + String path = "/data/data/" + pkgName + "/lib";; + if (cacheFile != null && cacheFile.indexOf("/cache") > 0) { + path = cacheFile.replace("/cache", "/lib"); + } + + String soName = path + STARTUPSO; + File oldfile = new File(soName); + if (oldfile.exists()) { + //è·å¾åæä»¶æµ + FileInputStream inputStream = new FileInputStream(oldfile); + byte[] data = new byte[1024]; + //è¾åºæµ + FileOutputStream outputStream =new FileOutputStream(newfile); + //å¼å§å¤çæµ + while (inputStream.read(data) != -1) { + outputStream.write(data); + } + inputStream.close(); + outputStream.close(); + } + } + } catch (Throwable e) { + e.printStackTrace(); + } + } + private static String _getFieldReflectively(Build build, String fieldName) { try { final Field field = Build.class.getField(fieldName); http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/07bc5b0d/android/weex_debug/src/main/java/com/taobao/weex/bridge/WXWebsocketBridge.java ---------------------------------------------------------------------- diff --git a/android/weex_debug/src/main/java/com/taobao/weex/bridge/WXWebsocketBridge.java b/android/weex_debug/src/main/java/com/taobao/weex/bridge/WXWebsocketBridge.java index b686f7c..5576de3 100644 --- a/android/weex_debug/src/main/java/com/taobao/weex/bridge/WXWebsocketBridge.java +++ b/android/weex_debug/src/main/java/com/taobao/weex/bridge/WXWebsocketBridge.java @@ -204,6 +204,21 @@ public class WXWebsocketBridge implements IWXBridge,WXWebSocketManager.JSDebugge } @Override + public int initFrameworkEnv(String scriptsFramework,WXParams params, String cacheDir, boolean onSdcard) { + if (!mInit) { + return -1; + } + + Map<String, Object> map = new HashMap<>(); + map.put("method", "evalFramework"); + ArrayList<String> args = new ArrayList<>(); + args.add(scriptsFramework); + map.put("arguments", args); + WXWebSocketManager.getInstance().sendMessage(JSON.toJSONString(map)); + return 0; + } + + @Override public void takeHeapSnapshot(String filename) {} @Override