Weex-eros Android框架工程

本部分主要面向android原生开发者,旨在介绍weex-eros-android框架的项目结构和设计思路,方便广大weex开发者进行weex原生拓展开发。

一.功能介绍

weex-eros是在weex原生拓展的基础上,结合我团队具体项目业务场景,总结出来的一套易用性强,侵入性低,快速集成开发的框架,框架中集成内置module,包括路由,本地存储,网络请求,全局参数配置,事件发布订阅,调用摄像头等,基本涵盖大部分业务场景需求,且提供了自定义接口,方便开发者自定义实现。

二.项目依赖

目前提供了源码依赖的方式,这是我们比较推荐的方式。如果你使用Android Studio进行开发,你可将项目源码做为Moudle导入项目中,在app的build.gradle中添加如下依赖:

compile project(':wxframework')

关于gradle和maven的依赖方式,我们将以迅雷不及掩耳之势在后续更新放出。

三.项目目录结构

Eros项目的目录结构如下:

项目目录结构
·
|-- BMInitConfig                      initConfig
|-- BMWXApplication                   封装的Application
|-- BMWXEngine                        框架初始化引擎
|-- BMWXEnvironment                   框架上下文
|-- activity                          封装的activity,包括提供weex渲染和一些默认实现页面
   |-- AbstractWeexActivity
|-- adapter                           框架对功能模块具体实现类
   |-- router
   |-- DefaultImageAdapter
   |-- DefaultStorageAdapter
|-- constant                          常量类
|-- event                             处理与js交互的自定义事件
|-- extend                            weex原生的拓展
   |-- adapter
      |-- DefaultWXHttpAdapter        拓展weex原生IWXHttpAdapter
      |-- DefaultWXImageAdapter       拓展weex原生IWXImgLoaderAdapter
   |-- components                     自定义weex组件
   |-- module                         自定义weex module
|-- http                              http实现(默认使用okhttp)
|-- manager                           业务处理管理类
|-- model                             java beans
|-- utils                             utils

四.关键类

总览Eros项目的工程目录,有些类是我们需要特别注意的:

DefaultWXHttpAdapter

此类是weex原生暴露接口IWXHttpAdapter 的子类,在官方介绍中,重写IWXHttpAdaptersendRequest可以拦截JsBundle资源的加载,自定义JsBundle 的加载策略。在Eros中,DefaultWXHttpAdapter 在自定义JsBundle 资源的加载方式之外,还实现了对本地资源和远端资源的加载策略。

   public void sendRequest(final WXRequest request, final OnHttpListener listener) {
        if (listener != null) {
            listener.onHttpStart();
        }
        execute(new Runnable() {
            @Override
            public void run() {
                if (!(Constant.INTERCEPTOR_ACTIVE.equals(SharePreferenceUtil.getInterceptorActive
                        (mContext))) || !isInterceptor(request
                        .url)) {
                    fetchUrl(request, listener);
                } else {
                    doInterceptor(request, listener);
                }

            }
        });
    }

可以看到,当激活资源拦截器时,JsBundle的加载将指向本地,而关闭拦截是,资源将从远端加载。通过这样的方式,满足了开发阶段js资源实时调试和项目发布后静态资源的本地加载。由于从底层拦截了整体资源的加载,很多的工作都可以优雅的完成,比如统计。DefaultWXHttpAdapter 的具体实现可以参看源码,本文最后。


DefaultWXImageAdapter

此类是weex原生暴露接口IWXImgLoaderAdapter 的子类,重写setImage方法,可以自定义整个项目图片的加载。DefaultWXImageAdapter 提供了默认的图片加载方式及缓存策略,同时还支持了gif和占位图的加载,默认的图片加载框架为Glide。Fresco和ImageLoader的粉丝也不用担心,你只需要重写DefaultWXImageAdaptersetImage方法即可自定义实现

public void setImage(final String url, final ImageView view,
                         WXImageQuality quality, final WXImageStrategy strategy) {
        if (url == null) return;
        Glide.with(WXEnvironment.getApplication()).load(url).diskCacheStrategy(DiskCacheStrategy
                .ALL).into(new
                BMGlideDrawableImageTarget
                (view, strategy, validatePlaceHolder(strategy), url));
    }

BMWXEngine

此类是Eros框架的初始化入口,请在你的项目入口调用initialize方法完成初始化。

public class App extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        BMWXEngine.initialize(this, new BMInitConfig.Builder().isActiceInterceptor(Constant
                .INTERCEPTOR_ACTIVE).build());
    }

}

BMWXEngine内部将完成weex框架的初始化和内置moudle,component的注册以Enviroment.config的参数配置。

  public static void initialize(Application context, BMInitConfig initConfig) {
        initPlatformConfig(context);
        initConing(initConfig);
        engineStart(context);
        registerBMComponentsAndModules(context);
        initHttpClient(context);
        initInterceptor(context, initConfig);
        initDispatchCenter();
    }

此外,为了方便于js端的数据交互,你可以通过BMInitConfig将一些参数放入全局环境中:

  HashMap<String,String> envs=new HashMap<>();
  envs.put("test","test");
  BMWXEngine.initialize(this, new BMInitConfig.Builder().setCustomerEnv(envs).build());

js端可以使用weex.enviroment.config获取。


AbstractWeexActivity

此类为Application的子类,将你项目的Application继承它,便可以自动完成Eros框架的初始化和内置moudle,component的注册,方便开发者快速集成。

public class BMWXApplication extends Application {

@Override
public void onCreate() {
super.onCreate();
}

private void initWeex() {
BMWXEngine.initialize(this, new BMInitConfig.Builder().isActiceInterceptor(Constant
.INTERCEPTOR_ACTIVE).build());
}
}

五 .项目地址

目前Eros项目的框架部分已经完全开源,项目地址:https://github.com/aa453509345/WeexErosFramework

另外WeexErosFramework项目所依赖的WeexSDK是我们在Weex原生SDK的基础上,修复了原生SDK的部分bug所维护的SDK,项目地址:https://github.com/aa453509345/WeexSDK

目前Eros项目还在快速开发迭代中,对于功能复杂或自定义程度高度制定的场景支持可能还不够完善,我们会在后续版本中支持完善, 也希望广大weex开发者和开源爱好者提出建议,共同完善Eros。

有任何问题和建议的童鞋,可以扫描首页二维码,加入weex-eros唯一官方微信圈交流讨论。

results matching ""

    No results matching ""