Skip to content
This repository has been archived by the owner on Jun 3, 2021. It is now read-only.

Commit

Permalink
[Android][iOS][WeexCore] Remove eagle from weex (#2302)
Browse files Browse the repository at this point in the history
* [core] remove eagle from weexsdk

* [iOS] add WXDataRenderHandler.h file

* [iOS] remove eagle_bridge.h from WeexSDK.h

* [core] new WeexCoreHandler when EagleBridge create

* [core] add __cplusplus in eagle_bridge.h

* [core] add GetPage interface for eagle

* [iOS] run execute js on component thread

* [core]add interface in DataRenderHandler

* [iOS] execute js on bridge thread

* [iOS] execte js code

* [core] remove eagle_bridge.h

* [core] add eagle_bridge.h

* [iOS] add WXDataRenderHandler.h

* * [Android] Fix compiling issue for android.

* * [Android] Update execJS in eagle_bridge.h

* * [Android] Add PostTaskToMsgLoop

* * [Android] Update CMakeList.txt

* * Add InitConfig.nativeLibraryList

* * [Android] Make InitConfig as private

* [iOS] public WXConvertUtility.h file

* * [Android] Update .so

* ParamsType adding two type

* add env in createpage for eagle

* support invokecallback and register component for eagle'

* [iOS]fix compile error

* run ok

* [iOS]remove eagle_bridge.h file from WeexSDK.h

* [Weex][Eagle][Qking] adapt to ios add qking source code

* update so

* [Weex][Eagle] ios eagle rax OK

* [Weex][Eagle] remove c++ static class register

* [core] hide RenderObject class

* [core] remove renderobject

* [iOS] Public headers.

* Update .so

* [iOS] remove weexeagle from playground demo

* [iOS] fix compile error when other project import weexsdk by source code

* [iOS] support js parallel download

* [iOS] support refresh event on eagle

* fix ios crash on app exit of json11 static field
  • Loading branch information
YorkShen authored and jianhan-he committed Apr 10, 2019
1 parent a0222db commit 7b46280
Show file tree
Hide file tree
Showing 129 changed files with 1,066 additions and 23,816 deletions.
5 changes: 4 additions & 1 deletion WeexSDK.podspec
Original file line number Diff line number Diff line change
Expand Up @@ -98,8 +98,10 @@ Pod::Spec.new do |s|
'ios/sdk/WeexSDK/Sources/Manager/WXInvocationConfig.h',
'ios/sdk/WeexSDK/Sources/Engine/WXSDKEngine.h',
'ios/sdk/WeexSDK/Sources/Engine/WXSDKError.h',
'ios/sdk/WeexSDK/Sources/Eagle/WXDataRenderHandler.h',
'ios/sdk/WeexSDK/Sources/Utility/WXConvert.h',
'ios/sdk/WeexSDK/Sources/Utility/WXUtility.h',
'ios/sdk/WeexSDK/Sources/Utility/WXConvertUtility.h',
'ios/sdk/WeexSDK/Sources/Utility/WXLog.h',
'ios/sdk/WeexSDK/Sources/Utility/WXDefine.h',
'ios/sdk/WeexSDK/Sources/Utility/WXType.h',
Expand All @@ -110,7 +112,8 @@ Pod::Spec.new do |s|
'ios/sdk/WeexSDK/Sources/Bridge/WXBridgeMethod.h',
'weex_core/Source/core/layout/flex_enum.h',
'weex_core/Source/core/layout/layout.h',
'weex_core/Source/core/layout/style.h'
'weex_core/Source/core/layout/style.h',
'weex_core/Source/core/bridge/eagle_bridge.h'

s.module_map = 'WeexSDK.modulemap'

Expand Down
20 changes: 19 additions & 1 deletion android/sdk/src/main/java/com/taobao/weex/InitConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,19 +18,22 @@
*/
package com.taobao.weex;

import android.support.annotation.NonNull;
import com.taobao.weex.adapter.ClassLoaderAdapter;
import com.taobao.weex.adapter.IDrawableLoader;
import com.taobao.weex.adapter.IWXJscProcessManager;
import com.taobao.weex.adapter.IWXHttpAdapter;
import com.taobao.weex.adapter.IWXImgLoaderAdapter;
import com.taobao.weex.adapter.IWXJSExceptionAdapter;
import com.taobao.weex.adapter.IWXJsFileLoaderAdapter;
import com.taobao.weex.adapter.IWXJscProcessManager;
import com.taobao.weex.adapter.IWXSoLoaderAdapter;
import com.taobao.weex.adapter.IWXUserTrackAdapter;
import com.taobao.weex.adapter.URIAdapter;
import com.taobao.weex.appfram.storage.IWXStorageAdapter;
import com.taobao.weex.appfram.websocket.IWebSocketAdapterFactory;
import com.taobao.weex.performance.IApmGenerator;
import java.util.LinkedList;
import java.util.List;

/**
* Created by sospartan on 5/31/16.
Expand All @@ -50,6 +53,7 @@ public class InitConfig {
private IApmGenerator apmGenerater;
private IWXJsFileLoaderAdapter jsFileLoaderAdapter;
private IWXJscProcessManager jscProcessManager;
private List<String> nativeLibraryList;

public IWXHttpAdapter getHttpAdapter() {
return httpAdapter;
Expand Down Expand Up @@ -111,6 +115,13 @@ public IWXJscProcessManager getJscProcessManager() {
return jscProcessManager;
}

@NonNull Iterable<String> getNativeLibraryList() {
if(nativeLibraryList == null){
nativeLibraryList = new LinkedList<>();
}
return nativeLibraryList;
}

private InitConfig() {
}

Expand All @@ -128,6 +139,7 @@ public static class Builder{
ClassLoaderAdapter classLoaderAdapter;
IApmGenerator apmGenerater;
private IWXJsFileLoaderAdapter jsFileLoaderAdapter;
private List<String> nativeLibraryList = new LinkedList<>();

public IWXJscProcessManager getJscProcessManager() {
return jscProcessManager;
Expand Down Expand Up @@ -209,6 +221,11 @@ public Builder setJsFileLoaderAdapter(IWXJsFileLoaderAdapter jsFileLoaderAdapter
return this;
}

public Builder addNativeLibrary(String name){
nativeLibraryList.add(name);
return this;
}

public InitConfig build(){
InitConfig config = new InitConfig();
config.httpAdapter = this.httpAdapter;
Expand All @@ -225,6 +242,7 @@ public InitConfig build(){
config.apmGenerater = this.apmGenerater;
config.jsFileLoaderAdapter = this.jsFileLoaderAdapter;
config.jscProcessManager = this.jscProcessManager;
config.nativeLibraryList = this.nativeLibraryList;
return config;
}
}
Expand Down
18 changes: 10 additions & 8 deletions android/sdk/src/main/java/com/taobao/weex/WXSDKEngine.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,14 +18,14 @@
*/
package com.taobao.weex;

import static com.taobao.weex.WXEnvironment.CORE_SO_NAME;

import android.app.Application;
import android.content.Context;
import android.content.Intent;
import android.content.res.Resources;
import android.support.v4.content.LocalBroadcastManager;
import android.text.TextUtils;

import android.util.Log;
import com.taobao.weex.adapter.IDrawableLoader;
import com.taobao.weex.adapter.IWXHttpAdapter;
import com.taobao.weex.adapter.IWXImgLoaderAdapter;
Expand All @@ -50,7 +50,6 @@
import com.taobao.weex.common.WXException;
import com.taobao.weex.common.WXInstanceWrap;
import com.taobao.weex.common.WXModule;
import com.taobao.weex.common.WXPerformance;
import com.taobao.weex.http.WXStreamModule;
import com.taobao.weex.ui.ExternalLoaderComponentHolder;
import com.taobao.weex.ui.IExternalComponentGetter;
Expand Down Expand Up @@ -79,7 +78,6 @@
import com.taobao.weex.ui.component.WXText;
import com.taobao.weex.ui.component.WXVideo;
import com.taobao.weex.ui.component.WXWeb;
import com.taobao.weex.ui.component.basic.WXBasicComponent;
import com.taobao.weex.ui.component.list.HorizontalListComponent;
import com.taobao.weex.ui.component.list.SimpleListComponent;
import com.taobao.weex.ui.component.list.WXCell;
Expand All @@ -98,13 +96,10 @@
import com.taobao.weex.utils.WXSoInstallMgrSdk;
import com.taobao.weex.utils.batch.BatchOperationHelper;
import com.taobao.weex.utils.cache.RegisterCache;

import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;

import static com.taobao.weex.WXEnvironment.CORE_SO_NAME;

public class WXSDKEngine implements Serializable {

public static final String JS_FRAMEWORK_RELOAD="js_framework_reload";
Expand Down Expand Up @@ -227,7 +222,14 @@ public void run() {
WXSoInstallMgrSdk.init(application,
sm.getIWXSoLoaderAdapter(),
sm.getWXStatisticsListener());
mIsSoInit = WXSoInstallMgrSdk.initSo(V8_SO_NAME, 1, config!=null?config.getUtAdapter():null);
final IWXUserTrackAdapter userTrackAdapter= config!=null?config.getUtAdapter():null;
final int version = 1;
mIsSoInit = WXSoInstallMgrSdk.initSo(V8_SO_NAME, version, userTrackAdapter);
if(config!=null) {
for (String libraryName : config.getNativeLibraryList()) {
WXSoInstallMgrSdk.initSo(libraryName, version, userTrackAdapter);
}
}
if (!mIsSoInit) {
WXExceptionUtils.commitCriticalExceptionRT(null,
WXErrorCode.WX_KEY_EXCEPTION_SDK_INIT,
Expand Down
48 changes: 46 additions & 2 deletions android/sdk/src/main/java/com/taobao/weex/bridge/WXBridge.java
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@
import com.taobao.weex.layout.ContentBoxMeasurement;
import com.taobao.weex.performance.WXInstanceApm;
import com.taobao.weex.utils.WXExceptionUtils;
import com.taobao.weex.utils.WXJsonUtils;
import com.taobao.weex.utils.WXLogUtils;
import com.taobao.weex.utils.WXUtils;
import com.taobao.weex.utils.WXWsonJSONSwitch;
Expand Down Expand Up @@ -71,8 +72,12 @@ public class WXBridge implements IWXBridge {

public native void nativeFireEventOnDataRenderNode(String instanceId, String ref, String type, String data, String domChanges);

public native void nativeInvokeCallbackOnDataRender(String instanceId, String callbackId, String data, boolean keepAlive);

public native void nativeRegisterModuleOnDataRenderNode( String data);

public native void nativeRegisterComponentOnDataRenderNode( String data);

private native void nativeTakeHeapSnapshot(String filename);

private native void nativeBindMeasurementToRenderObject(long ptr);
Expand Down Expand Up @@ -296,7 +301,23 @@ public Object callNativeModule(String instanceId, String module, String method,
WXUtils.getFixUnixTime()-start
);
}
return WXWsonJSONSwitch.toWsonOrJsonWXJSObject(object);
if (instance!=null && (instance.getRenderStrategy()== WXRenderStrategy.DATA_RENDER
|| instance.getRenderStrategy()== WXRenderStrategy.DATA_RENDER_BINARY)){
try {
if(object == null){
return new WXJSObject(null);
}
if(object.getClass() == WXJSObject.class){
return (WXJSObject) object;
}
return new WXJSObject(WXJSObject.JSON, WXJsonUtils.fromObjectToJSONString(object));
} catch (Exception e) {
// For wson use in data render mode
return WXWsonJSONSwitch.toWsonOrJsonWXJSObject(object);
}
} else {
return WXWsonJSONSwitch.toWsonOrJsonWXJSObject(object);
}
}catch (Exception e){
WXLogUtils.e(TAG, e);
return new WXJSObject(null);
Expand All @@ -316,7 +337,22 @@ public Object callNativeModule(String instanceId, String module, String method,
@CalledByNative
public void callNativeComponent(String instanceId, String ref, String method, byte[] arguments, byte[] optionsData) {
try{
JSONArray argArray = (JSONArray) WXWsonJSONSwitch.parseWsonOrJSON(arguments);
WXSDKInstance instance = WXSDKManager.getInstance().getSDKInstance(instanceId);
JSONArray argArray = null;
if (arguments != null){
// TODO use a better way
if (instance!=null && (instance.getRenderStrategy()== WXRenderStrategy.DATA_RENDER
|| instance.getRenderStrategy()== WXRenderStrategy.DATA_RENDER_BINARY)){
try {
argArray = (JSONArray) JSON.parse(new String(arguments, "UTF-8"));
} catch (Exception e) {
// For wson use in data render mode
argArray = (JSONArray) WXWsonJSONSwitch.parseWsonOrJSON(arguments);
}
} else {
argArray = (JSONArray) WXWsonJSONSwitch.parseWsonOrJSON(arguments);
}
}
Object options = WXWsonJSONSwitch.parseWsonOrJSON(optionsData);
WXBridgeManager.getInstance().callNativeComponent(instanceId, ref, method, argArray, options);
}catch (Exception e){
Expand Down Expand Up @@ -714,7 +750,15 @@ public void fireEventOnDataRenderNode(String instanceId, String ref, String type
nativeFireEventOnDataRenderNode(instanceId,ref,type,data, domChanges);
}

public void invokeCallbackOnDataRender(String instanceId, String callbackId, String data, boolean keepAlive) {
nativeInvokeCallbackOnDataRender(instanceId,callbackId,data, keepAlive);
}

public void registerModuleOnDataRenderNode(String data) {
nativeRegisterModuleOnDataRenderNode(data);
}

public void registerComponentOnDataRenderNode(String data) {
nativeRegisterComponentOnDataRenderNode(data);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,8 @@
import android.support.v4.util.ArrayMap;
import android.text.TextUtils;
import android.util.Log;
import android.util.Pair;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
Expand Down Expand Up @@ -1290,8 +1292,39 @@ void callbackJavascript(final String instanceId, final String callback,
return;
}

addJSTask(METHOD_CALLBACK, instanceId, callback, data, keepAlive);
sendMessage(instanceId, WXJSBridgeMsgType.CALL_JS_BATCH);
WXSDKInstance instance = WXSDKManager.getInstance().getAllInstanceMap().get(instanceId);
if (instance != null && (instance.getRenderStrategy() == WXRenderStrategy.DATA_RENDER_BINARY)) {
callbackJavascriptOnDataRender(instanceId, callback, data, keepAlive);
} else {
addJSTask(METHOD_CALLBACK, instanceId, callback, data, keepAlive);
sendMessage(instanceId, WXJSBridgeMsgType.CALL_JS_BATCH);
}
}

void callbackJavascriptOnDataRender(final String instanceId, final String callback, final Object data, final boolean keepAlive){
mJSHandler.postDelayed(WXThread.secure(new Runnable() {
@Override
public void run() {
try {
long start = System.currentTimeMillis();
String data_str = JSON.toJSONString(data);
if (WXEnvironment.isApkDebugable()) {
WXLogUtils.d("callbackJavascriptOnDataRender >>>> instanceId:" + instanceId
+ ", data:" + data_str);
}
if (mWXBridge instanceof WXBridge) {
((WXBridge) mWXBridge).invokeCallbackOnDataRender(instanceId, callback,data_str ,keepAlive);
}
WXLogUtils.renderPerformanceLog("callbackJavascriptOnDataRender", System.currentTimeMillis() - start);
} catch (Throwable e) {
String err = "[WXBridgeManager] callbackJavascriptOnDataRender " + WXLogUtils.getStackTrace(e);
WXExceptionUtils.commitCriticalExceptionRT(instanceId,
WXErrorCode.WX_KEY_EXCEPTION_INVOKE_BRIDGE, "callbackJavascriptOnDataRender",
err, null);
WXLogUtils.e(err);
}
}
}), 0);
}

/**
Expand Down Expand Up @@ -1768,8 +1801,19 @@ public void invokeExecJS(String instanceId, String namespace, String function,
mLodBuilder.setLength(0);
}
final long start = System.currentTimeMillis();
mWXBridge.execJS(instanceId, namespace, function, args);
WXSDKInstance instance = WXSDKManager.getInstance().getSDKInstance(instanceId);
if (instance != null && (instance.getRenderStrategy() == WXRenderStrategy.DATA_RENDER_BINARY)) {
Pair<Pair<String,Object>, Boolean> data = null;
if(args.length!=2 || !(args[0].data instanceof String)
|| !(args[1].data instanceof String)
|| (data = extractCallbackArgs((String) args[1].data))==null){
WXLogUtils.w("invokeExecJS on data render that is not a callback call");
return;
}
callbackJavascriptOnDataRender(instanceId, (String) data.first.first, data.first.second, data.second);
} else {
mWXBridge.execJS(instanceId, namespace, function, args);
}
if (null != instance){
long diff = System.currentTimeMillis()-start;
instance.getApmForInstance().updateFSDiffStats(WXInstanceApm.KEY_PAGE_STATS_FS_CALL_JS_NUM,1);
Expand All @@ -1778,6 +1822,25 @@ public void invokeExecJS(String instanceId, String namespace, String function,
}
}

private Pair<Pair<String,Object>,Boolean> extractCallbackArgs(String data) {
try {
JSONArray obj = JSON.parseArray(data);
JSONObject arg_obj = obj.getJSONObject(0);
JSONArray args = arg_obj.getJSONArray("args");
if (args.size()!=3){
return null;
}
String method = arg_obj.getString("method");
if (!"callback".equals(method)){
return null;
}

return new Pair<Pair<String,Object>, Boolean>(new Pair<String, Object>(args.getString(0), args.getJSONObject(1)),args.getBooleanValue(2));
} catch (Exception e) {
return null;
}
}

public int invokeCreateInstanceContext(String instanceId, String namespace, String function,
WXJSObject[] args, boolean logTaskDetail) {
WXLogUtils.d("invokeCreateInstanceContext instanceId:" + instanceId + " function:"
Expand Down Expand Up @@ -2249,6 +2312,15 @@ private void invokeRegisterComponents(List<Map<String, Object>> components, List
return;
}

try{
// TODO use a better way
if (mWXBridge instanceof WXBridge) {
((WXBridge) mWXBridge).registerComponentOnDataRenderNode(WXJsonUtils.fromObjectToJSONString(components));
}
} catch (Throwable e){
WXLogUtils.e("Weex [data_render register err]", e);
}

WXJSObject[] args = {WXWsonJSONSwitch.toWsonOrJsonWXJSObject(components)};
String errorMsg = null;
try {
Expand Down
1 change: 1 addition & 0 deletions ios/playground/Podfile
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ platform :ios, '8.0'

def common
pod 'WeexSDK', :path=>'../../'

pod 'WXDevtool','0.20.0'
pod 'SDWebImage', '3.7.5'
pod 'SocketRocket', '0.4.2'
Expand Down
2 changes: 1 addition & 1 deletion ios/playground/WeexDemo/WXNavigationHandlerImpl.h
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
*/

#import <Foundation/Foundation.h>
#import "WXNavigationProtocol.h"
#import <WeexSDK/WXNavigationProtocol.h>

@interface WXNavigationHandlerImpl : NSObject <WXNavigationProtocol>

Expand Down
2 changes: 1 addition & 1 deletion ios/playground/WeexDemo/WXNavigationHandlerImpl.m
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,9 @@
* under the License.
*/

#import <WeexSDK/WeexSDK.h>
#import "WXNavigationHandlerImpl.h"
#import "WXDemoViewController.h"
#import <WeexSDK/WeexSDK.h>

@implementation WXNavigationHandlerImpl

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
*/

#import <Foundation/Foundation.h>
#import "WXImgLoaderProtocol.h"
#import <WeexSDK/WXImgLoaderProtocol.h>

@interface WXImgLoaderDefaultImpl : NSObject<WXImgLoaderProtocol, WXModuleProtocol>
@end
Loading

0 comments on commit 7b46280

Please sign in to comment.