原生拓展能力梳理

项目里如何调原生方法
LightSDK.native.callNative(key, cb) - 通用,可调用原生拓展方法
LightSDK.native.methodName(key, cb) - 仅调用原生内置方法

调用原生内置方法可以直接通过LightSDK.native.methodName()是因为node_modules/light-sdk/lib/native.js里封装了这些方法,本质上和callNative()一样是调用的bridge.call(method, params, cb)

拓展原生能力

  1. APP项目里拓展新project&方法:
// ${projectName}/src/main/java/com/hundsun/${projectName}/JSAPI/LightJSAPI.java
public class LightJSAPI implements interfaceName {
    public void methodName(){
        //blah blah blah
    }
}

案例:

  • LightSDK.native.callNative("common.openCameraOrPhoto")是调用Andriod\src\main\java\com\hundsun\common\JSAPI\LightJSAPI.java里的openCameraOrPhoto()
  • LightSDK.native.callNative("video_rec.video")是调用Andriod\video_rec\src\main\java\com\hundsun\video_rec\JSAPI\LightJSAPI.java里的video()

build.gradle最终将拓展库和原生库(xxx.arr格式引用在libs下)打包到一起
拓展库:
implementation project(path: ':filegmu') //PDF 阅读
原生库:
implementation(name: 'jsnativegmu', ext: 'aar') //JSNative容器库

  1. 拓展weex module
  • 创建dialog module (src\main\java\com\hundsun\extend\module\WXDialogModule.java)
public class WXDialogModule extends WXModule {
  //blah blah blah
}
  • 在WeexPlugins中注册(src\main\java\com\hundsun\extend\WeexPlugins.java)
WXSDKEngine.registerModule("dialog", WXDialogModule.class);
  • 在h5项目中使用:
weex.requireModule("dialog")
  1. 拓展weex 组件
  • 创建shadowview组件(src\main\java\com\hundsun\extend\components\WXShadowViewComponent.java):
public class WXShadowViewComponent extends WXVContainer<ShadowLayout> {
  //blah blah blah
}
  • 在WeexPlugins中注册(src\main\java\com\hundsun\extend\WeexPlugins.java)
WXSDKEngine.registerComponent("shadow-view", WXShadowViewComponent.class, false);
  • 在h5项目中使用(不用require,直接可用):
<component :style="shadowStyle" :is="isAndroid?'shadow-view':'div'"></component>