* [android] fix on android 4.0.* platform cannot startup multiprocess since on android 4.1 use ANDROID_PIE to ensure safety on android api 15 or below use libweexjst.so to startup new process
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/7fcfd9fd Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/7fcfd9fd Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/7fcfd9fd Branch: refs/heads/master Commit: 7fcfd9fdb5f07ec9510963d5426249fc6d06b769 Parents: 0ea259d Author: yuhun-alibaba <tomcat...@gmail.com> Authored: Tue Oct 17 19:48:54 2017 +0800 Committer: gurisxie <279483...@qq.com> Committed: Tue Oct 17 22:09:45 2017 +0800 ---------------------------------------------------------------------- android/sdk/libs/armeabi/libweexjsb.so | Bin 22556 -> 22620 bytes android/sdk/libs/armeabi/libweexjsc.so | Bin 335100 -> 335324 bytes android/sdk/libs/armeabi/libweexjss.so | Bin 6754016 -> 6754016 bytes android/sdk/libs/armeabi/libweexjst.so | Bin 0 -> 22552 bytes .../java/com/taobao/weex/bridge/WXBridge.java | 6 ++--- .../com/taobao/weex/bridge/WXBridgeManager.java | 16 +++++--------- .../java/com/taobao/weex/common/IWXBridge.java | 2 +- .../taobao/weex/utils/WXSoInstallMgrSdk.java | 22 ++++++++++++++++--- .../taobao/weex/bridge/WXWebsocketBridge.java | 2 +- 9 files changed, 30 insertions(+), 18 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/7fcfd9fd/android/sdk/libs/armeabi/libweexjsb.so ---------------------------------------------------------------------- diff --git a/android/sdk/libs/armeabi/libweexjsb.so b/android/sdk/libs/armeabi/libweexjsb.so index c46e857..cb739b4 100755 Binary files a/android/sdk/libs/armeabi/libweexjsb.so and b/android/sdk/libs/armeabi/libweexjsb.so differ http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/7fcfd9fd/android/sdk/libs/armeabi/libweexjsc.so ---------------------------------------------------------------------- diff --git a/android/sdk/libs/armeabi/libweexjsc.so b/android/sdk/libs/armeabi/libweexjsc.so index ec98d07..7a9d85b 100755 Binary files a/android/sdk/libs/armeabi/libweexjsc.so and b/android/sdk/libs/armeabi/libweexjsc.so differ http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/7fcfd9fd/android/sdk/libs/armeabi/libweexjss.so ---------------------------------------------------------------------- diff --git a/android/sdk/libs/armeabi/libweexjss.so b/android/sdk/libs/armeabi/libweexjss.so index 5a8809c..3efefa5 100755 Binary files a/android/sdk/libs/armeabi/libweexjss.so and b/android/sdk/libs/armeabi/libweexjss.so differ http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/7fcfd9fd/android/sdk/libs/armeabi/libweexjst.so ---------------------------------------------------------------------- diff --git a/android/sdk/libs/armeabi/libweexjst.so b/android/sdk/libs/armeabi/libweexjst.so new file mode 100755 index 0000000..099256c Binary files /dev/null and b/android/sdk/libs/armeabi/libweexjst.so differ http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/7fcfd9fd/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 b95c7a6..9586f2a 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 @@ -50,7 +50,7 @@ class WXBridge implements IWXBridge { * * @param framework assets/main.js */ - public native int initFramework(String framework, WXParams params, String cacheDir, boolean onSdcard); + public native int initFramework(String framework, WXParams params, String cacheDir, boolean pieSupport); /** @@ -78,9 +78,9 @@ class WXBridge implements IWXBridge { public native void takeHeapSnapshot(String filename); - public int initFrameworkEnv(String framework, WXParams params, String cacheDir, boolean onSdcard){ + public int initFrameworkEnv(String framework, WXParams params, String cacheDir, boolean pieSupport){ if (MULTIPROCESS) { - return initFramework(framework, params, cacheDir, onSdcard); + return initFramework(framework, params, cacheDir, pieSupport); } else { return initFramework(framework, params); } http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/7fcfd9fd/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 c44d7af..96f47d9 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 @@ -21,6 +21,7 @@ package com.taobao.weex.bridge; import android.content.Context; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; +import android.os.Build; import android.os.Handler; import android.os.Handler.Callback; import android.os.Looper; @@ -1571,27 +1572,22 @@ public class WXBridgeManager implements Callback, BactchExecutor { long start = System.currentTimeMillis(); String crashFile = ""; - boolean installOnSdcard = false; try { crashFile = WXEnvironment.getApplication().getApplicationContext().getCacheDir().getPath(); } catch (Exception e) { e.printStackTrace(); } - + boolean pieSupport = true; 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; + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) { + pieSupport = false; } } catch (Exception e) { e.printStackTrace(); } - + WXLogUtils.d("[WXBridgeManager] initFrameworkEnv crashFile:" + crashFile + " pieSupport:" + pieSupport); // extends initFramework - if (mWXBridge.initFrameworkEnv(framework, assembleDefaultOptions(), crashFile, installOnSdcard) == INIT_FRAMEWORK_OK) { + if (mWXBridge.initFrameworkEnv(framework, assembleDefaultOptions(), crashFile, pieSupport) == 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/7fcfd9fd/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 9e83dde..92b1585 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 @@ -45,7 +45,7 @@ public interface IWXBridge extends IWXObject { * @param framework assets/main.js * @return */ - int initFrameworkEnv(String framework, WXParams params, String cacheDir, boolean onSdcard); + int initFrameworkEnv(String framework, WXParams params, String cacheDir, boolean pieSupport); /** * execute javascript function http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/7fcfd9fd/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 e402ee7..d202954 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 @@ -70,6 +70,7 @@ public class WXSoInstallMgrSdk { private final static String X86 = "x86"; private final static String MIPS = "mips"; private final static String STARTUPSO = "/libweexjsb.so"; + private final static String STARTUPSOANDROID15 = "/libweexjst.so"; private final static int ARMEABI_Size = 3583820; private final static int X86_Size = 4340864; @@ -192,20 +193,35 @@ public class WXSoInstallMgrSdk { // } // } catch (Throwable e) { // } + if (installOnSdcard) { String cacheFile = WXEnvironment.getApplication().getApplicationContext().getCacheDir().getPath(); - File newfile = new File(cacheFile + STARTUPSO); + // if android api < 16 copy libweexjst.so else copy libweexjsb.so + boolean pieSupport = true; + File newfile; + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) { + pieSupport = false; + newfile = new File(cacheFile + STARTUPSOANDROID15); + } else { + newfile = new File(cacheFile + STARTUPSO); + } if (newfile.exists()) { return; } - String path = "/data/data/" + pkgName + "/lib";; + String path = "/data/data/" + pkgName + "/lib"; if (cacheFile != null && cacheFile.indexOf("/cache") > 0) { path = cacheFile.replace("/cache", "/lib"); } - String soName = path + STARTUPSO; + String soName; + if (pieSupport) { + soName = path + STARTUPSO; + } else { + soName = path + STARTUPSOANDROID15; + } + File oldfile = new File(soName); if (oldfile.exists()) { //è·å¾åæä»¶æµ http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/7fcfd9fd/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 5576de3..1343f60 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,7 +204,7 @@ public class WXWebsocketBridge implements IWXBridge,WXWebSocketManager.JSDebugge } @Override - public int initFrameworkEnv(String scriptsFramework,WXParams params, String cacheDir, boolean onSdcard) { + public int initFrameworkEnv(String scriptsFramework,WXParams params, String cacheDir, boolean pieSupport) { if (!mInit) { return -1; }