* [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;
         }

Reply via email to