blob: 0b33c6efde80ca4fe782c7647908f1b660b07f0d [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.weex;
import android.app.Activity;
import android.app.Application;
import android.os.Bundle;
import android.support.multidex.MultiDex;
import android.text.TextUtils;
import android.util.Log;
import com.alibaba.android.bindingx.plugin.weex.BindingX;
import com.facebook.drawee.backends.pipeline.Fresco;
import com.taobao.weex.InitConfig;
import com.taobao.weex.WXEnvironment;
import com.taobao.weex.WXSDKEngine;
import com.taobao.weex.WXSDKManager;
import com.taobao.weex.bridge.WXBridgeManager;
import com.taobao.weex.common.WXException;
import com.taobao.weex.performance.WXAnalyzerDataTransfer;
import java.lang.reflect.Method;
import org.apache.weex.commons.adapter.DefaultWebSocketAdapterFactory;
import org.apache.weex.commons.adapter.ImageAdapter;
import org.apache.weex.commons.adapter.JSExceptionAdapter;
import org.apache.weex.commons.adapter.PicassoBasedDrawableLoader;
import org.apache.weex.extend.adapter.ApmGenerator;
import org.apache.weex.extend.adapter.DefaultAccessibilityRoleAdapter;
import org.apache.weex.extend.adapter.DefaultConfigAdapter;
import org.apache.weex.extend.adapter.InterceptWXHttpAdapter;
import org.apache.weex.extend.adapter.WXAnalyzerDemoListener;
import org.apache.weex.extend.component.WXComponentSyncTest;
import org.apache.weex.extend.component.WXMask;
import org.apache.weex.extend.component.WXParallax;
import org.apache.weex.extend.module.GeolocationModule;
import org.apache.weex.extend.module.MyModule;
import org.apache.weex.extend.module.RenderModule;
import org.apache.weex.extend.module.SyncTestModule;
import org.apache.weex.extend.module.WXEventModule;
import org.apache.weex.extend.module.WXTitleBar;
import org.apache.weex.extend.module.WXWsonTestModule;
public class WXApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
MultiDex.install(this);
/**
* Set up for fresco usage.
* Set<RequestListener> requestListeners = new HashSet<>();
* requestListeners.add(new RequestLoggingListener());
* ImagePipelineConfig config = ImagePipelineConfig.newBuilder(this)
* .setRequestListeners(requestListeners)
* .build();
* Fresco.initialize(this,config);
**/
// initDebugEnvironment(true, false, "DEBUG_SERVER_HOST");
WXBridgeManager.updateGlobalConfig("wson_on");
WXEnvironment.setOpenDebugLog(true);
WXEnvironment.setApkDebugable(true);
WXSDKEngine.addCustomOptions("appName", "WXSample");
WXSDKEngine.addCustomOptions("appGroup", "WXApp");
InitConfig.Builder builder = new InitConfig.Builder()
//.setImgAdapter(new FrescoImageAdapter())// use fresco adapter
.setImgAdapter(new ImageAdapter())
.setDrawableLoader(new PicassoBasedDrawableLoader(getApplicationContext()))
.setWebSocketAdapterFactory(new DefaultWebSocketAdapterFactory())
.setJSExceptionAdapter(new JSExceptionAdapter())
.setHttpAdapter(new InterceptWXHttpAdapter())
.setApmGenerater(new ApmGenerator());
if(!TextUtils.isEmpty(BuildConfig.externalLibraryName)){
builder.addNativeLibrary(BuildConfig.externalLibraryName);
}
WXSDKManager.getInstance().setWxConfigAdapter(new DefaultConfigAdapter());
WXSDKEngine.initialize(this, builder.build());
WXSDKManager.getInstance().addWXAnalyzer(new WXAnalyzerDemoListener());
WXAnalyzerDataTransfer.isOpenPerformance = false;
WXSDKManager.getInstance().setAccessibilityRoleAdapter(new DefaultAccessibilityRoleAdapter());
try {
Fresco.initialize(this);
WXSDKEngine.registerComponent("synccomponent", WXComponentSyncTest.class);
WXSDKEngine.registerComponent(WXParallax.PARALLAX, WXParallax.class);
WXSDKEngine.registerModule("render", RenderModule.class);
WXSDKEngine.registerModule("event", WXEventModule.class);
WXSDKEngine.registerModule("syncTest", SyncTestModule.class);
WXSDKEngine.registerComponent("mask",WXMask.class);
WXSDKEngine.registerModule("myModule", MyModule.class);
WXSDKEngine.registerModule("geolocation", GeolocationModule.class);
WXSDKEngine.registerModule("titleBar", WXTitleBar.class);
WXSDKEngine.registerModule("wsonTest", WXWsonTestModule.class);
BindingX.register();
/**
* override default image tag
* WXSDKEngine.registerComponent("image", FrescoImageComponent.class);
*/
//Typeface nativeFont = Typeface.createFromAsset(getAssets(), "font/native_font.ttf");
//WXEnvironment.setGlobalFontFamily("bolezhusun", nativeFont);
startHeron();
} catch (WXException e) {
e.printStackTrace();
}
registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
@Override
public void onActivityCreated(Activity activity, Bundle bundle) {
}
@Override
public void onActivityStarted(Activity activity) {
}
@Override
public void onActivityResumed(Activity activity) {
}
@Override
public void onActivityPaused(Activity activity) {
}
@Override
public void onActivityStopped(Activity activity) {
}
@Override
public void onActivitySaveInstanceState(Activity activity, Bundle bundle) {
}
@Override
public void onActivityDestroyed(Activity activity) {
// The demo code of calling 'notifyTrimMemory()'
if (false) {
// We assume that the application is on an idle time.
WXSDKManager.getInstance().notifyTrimMemory();
}
// The demo code of calling 'notifySerializeCodeCache()'
if (false) {
WXSDKManager.getInstance().notifySerializeCodeCache();
}
}
});
}
/**
*@param connectable debug server is connectable or not.
* if true, sdk will try to connect remote debug server when init WXBridge.
*
* @param debuggable enable remote debugger. valid only if host not to be "DEBUG_SERVER_HOST".
* true, you can launch a remote debugger and inspector both.
* false, you can just launch a inspector.
* @param host the debug server host, must not be "DEBUG_SERVER_HOST", a ip address or domain will be OK.
* for example "127.0.0.1".
*/
private void initDebugEnvironment(boolean connectable, boolean debuggable, String host) {
if (!"DEBUG_SERVER_HOST".equals(host)) {
WXEnvironment.sDebugServerConnectable = connectable;
WXEnvironment.sRemoteDebugMode = debuggable;
WXEnvironment.sRemoteDebugProxyUrl = "ws://" + host + ":8088/debugProxy/native";
}
}
private void startHeron(){
try{
Class<?> heronInitClass = getClassLoader().loadClass("com/taobao/weex/heron/picasso/RenderPicassoInit");
Method method = heronInitClass.getMethod("initApplication", Application.class);
method.setAccessible(true);
method.invoke(null,this);
Log.e("Weex", "Weex Heron Render Init Success");
}catch (Exception e){
Log.e("Weex", "Weex Heron Render Mode Not Found", e);
}
}
}