Skip to content

sdk接入

fangyuxiong edited this page Dec 11, 2019 · 51 revisions

Android接入

1. gradle配置如下:

打开build.gradle配置:

android {  
    defaultConfig {
        ndk {
            abiFilters "armeabi-v7a"
        }
    }
}  
dependencies {  
    implementation 'androidx.appcompat:appcompat:1.1.0+' //引入包的版本需在1.1.0以上  
    implementation "androidx.recyclerview:recyclerview:1.1.0+" //引入包的版本需在1.1.0以上  

    // 核心库
    implementation "com.immomo.mlncore:core:1.0.0"
    // view、工具桥接库
    implementation "com.immomo.mls:mln:1.0.0"
    // 代码生成库
    annotationProcessor "com.immomo.mls:processor:1.0.0"
    // 热重载,配合IDEA插件使用
    debugImplementation "com.immomo.luanative:hotreload:1.0.0"
    releaseImplementation "com.immomo.luanative:hotreload_empty:1.0.0"
    // 配合热重载使用
    debugImplementation "com.google.protobuf:protobuf-lite:3.0.1"
}

2.Application中初始化Lua Engine:

新建一个全局类继承Application,并在onCreate中初始化Lua Engine,如下:

MLSEngine.init(application, BuildConfig.DEBUG)
                .setLVConfig(new LVConfigBuilder(application)
                        .setRootDir(rootDir)    //设置lua根目录
                        .setImageDir(imageDir)  //设置lua图片根目录
                        .setCacheDir(cacheDir)  //设置lua缓存目录
                        .setGlobalResourceDir(gResDir)    //设置资源文件目录
                        .build())
                .setImageProvider(new GlideImageProvider())//lua加载图片工具,不实现的话,图片无法展示
                .build(true);

注意:

  • 需正确配置LVConfig中各目录地址。

  • ImageProvider需自行定义图片加载类。

    可执行命令:git clone https://github.com/momotech/MLN,参考项目中MLN-Android的GlideImageProvider类实现。

  • 记得在AndroidManifest.xml中注册该Application。

3.在Activity、Fragment或任意view中显示LuaView:

FrameLayout frameLayout = new FrameLayout(this);
setContentView(frameLayout);
instance = new MLSInstance(this);
instance.setContainer(frameLayout);
InitData initData = new InitData("file://android_asset/demo.lua"); //MLSBundleUtils.parseFromBundle(bundle);MLSBundleUtils.createBundle(url)
instance.setData(initData);
if (!instance.isValid()) {
   //非法url
}
// instance三个生命周期记得调用:
instance.onResume();
instance.onPause();
instance.onDestroy();

4.如果需要支持热重载,并能够通过wifi连接,则在二维码扫描结果中,增加:

if (HotReloadHelper.isIPPortString(code)) {
	HotReloadHelper.setUseWifi(code);
}

注意:

  • instance三个生命周期记得调用
  • 在InitData初始化中传入lua路径,项目run起来即可展示对应lua界面。
  • 屏幕上会多出一个lua标识,此时我们便可以通过热重载进行更加便捷的开发。

iOS接入

接入SDK

  1. pod配置:
pod 'MLN','1.0.0'
  1. 创建一个MLN Lua页面
//在工程里新建一个lua页面,命名为demo.lua,然后在启动页中加载demo.lua
NSString *entryfile = @"demo.lua";
MLNKitViewController *kvc = [[MLNKitViewController alloc] initWithEntryFilePath:entryfile];
  1. push页面
[self presentViewController:kvc animated:YES completion:nil];
  1. 运行后设备会显示我们如上加载的lua文件

接入热重载

  1. pod配置:
pod 'MLNDevTool' , '0.1.0'
  1. 创建一个支持的HotReload的MLN Lua页面
// 创建一个Lua页面
MLNHotReloadViewController *vc = [[MLNHotReloadViewController alloc] initWithNavigationBarTransparent:YES]  
  1. push页面
[self presentViewController:vc animated:YES completion:nil];
  1. 运行后设备屏幕上会多出一个lua标识,此时我们便可以通过热重载进行更加便捷的开发

注意:

  • Xcode版本或手机系统版本差异可能运行后出现黑屏现象。解决方案:在AppDelegate.h文件中声明UIWindow @property (strong, nonatomic) UIWindow *window; 即可。
  • 如果遇到无法present页面的情况,请检查是否设置了导航控制器
Clone this wiki locally