-
Notifications
You must be signed in to change notification settings - Fork 207
sdk接入
xu.jingyu edited this page May 18, 2020
·
51 revisions
打开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 'androidx.legacy:legacy-support-v4:1.0.0'
// 核心库
implementation "com.immomo.mlncore:core:1.0.1"
// view、工具桥接库
implementation "com.immomo.mls:mln:1.0.1"
// 代码生成库
annotationProcessor "com.immomo.mls:processor:1.0.0"
// 热重载,配合IDEA插件使用
debugImplementation "com.immomo.luanative:hotreload:1.0.1"
releaseImplementation "com.immomo.luanative:hotreload_empty:1.0.1"
// 配合热重载使用
debugImplementation "com.google.protobuf:protobuf-lite:3.0.1"
}
新建一个全局类继承Application,并在onCreate中初始化Lua Engine,如下:
MLSEngine.init(application, BuildConfig.DEBUG)
.setLVConfig(new LVConfigBuilder(application)
.setSdcardDir(sdcardDir) //设置sdcard目录
.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。
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
注意:
- 运行app时,需要在手机端手动开启存储和相机权限。
FrameLayout frameLayout = new FrameLayout(this);
setContentView(frameLayout);
instance = new MLSInstance(this, true, true);
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三个生命周期记得调用:
@Override
protected void onResume() {
super.onResume();
instance.onResume();
}
@Override
protected void onPause() {
super.onPause();
instance.onPause();
}
@Override
protected void onDestroy() {
super.onDestroy();
instance.onDestroy();
}
注意:
- instance三个生命周期记得调用
- 在InitData初始化中传入lua路径,项目run起来即可展示对应lua界面。
- 屏幕上会多出一个lua标识,此时我们便可以通过热重载进行更加便捷的开发。
// 1. 在MLSEngine初始化中设置QrCaptureAdapter,设置后可看到lua悬浮窗多出一个扫码图标
MLSEngine.init(mApplication, BuildConfig.DEBUG)
.setQrCaptureAdapter(new MLSQrCaptureAdapter() {
@Override
public void startQrCapture(Context context) {
//跳转扫码页面
}
})
// 2. 在二维码扫描结果中,设置热重载方式为wifi连接
if (HotReloadHelper.isIPPortString(result)) {
HotReloadHelper.setUseWifi(result);
}
# 注解和被注解类不混淆
-keepattributes *Annotation*
-keepattributes Exceptions
-keep class com.immomo.mls.annotation.* { *; }
-keep @com.immomo.mls.annotation.LuaClass class * {
@com.immomo.mls.annotation.LuaBridge <methods>;
}
-keep @com.immomo.mls.wrapper.ConstantClass class * {
@com.immomo.mls.wrapper.Constant <fields>;
}
-keep,allowobfuscation @interface org.luaj.vm2.utils.LuaApiUsed
-keep @com.immomo.mls.annotation.CreatedByApt class * { *; }
-keep @org.luaj.vm2.utils.LuaApiUsed class *
-keep @org.luaj.vm2.utils.LuaApiUsed class * {
native <methods>;
@org.luaj.vm2.utils.LuaApiUsed <methods>;
@org.luaj.vm2.utils.LuaApiUsed <fields>;
}
- pod配置:
pod 'MLN','1.0.0.10.beta'
- 环境处理配置
// AppDelegate中设置如下
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// 可根据需要开启预加载
[MLNKitEnvironment instancePreload];
// 设置默认的网络Handler
[MLNKitEnvironment setDefaultHttpHandler:...];
// 设置默认的ScrollRefreshHandler
[MLNKitEnvironment setDefaultScrollRefreshHandler:...];
// 设置默认的图片加载器
[MLNKitEnvironment setDefaultImageLoader:...];
// 设置默认的导航跳转工具
[MLNKitEnvironment setDefaultNavigatorHandler:...];
}
- 创建一个MLN Lua页面
//在工程里新建一个.lua文件,命名为demo.lua。键入如下lua代码
label = Label()
label:setGravity(Gravity.CENTER)
label:text("Hello World!")
window:addView(label)
//然后在启动页中加载demo.lua
NSString *entryfile = @"demo.lua";
MLNKitViewController *kvc = [[MLNKitViewController alloc] initWithEntryFilePath:entryfile];
- push页面
[self presentViewController:kvc animated:YES completion:nil];
- 运行后设备会显示我们如上加载的lua文件
- pod配置:
pod 'MLNDevTool' , '0.1.9'
- 创建一个支持的HotReload的MLN Lua页面
// 创建一个Lua页面
MLNHotReloadViewController *vc = [[MLNHotReloadViewController alloc] initWithNavigationBarTransparent:YES]
- push页面
[self presentViewController:vc animated:YES completion:nil];
-
申请相机权限
1)找到info.plist文件右键->Open As->Source Code,添加相机权限<key>NSCameraUsageDescription</key> <string>我要使用摄像机</string>
2)选中info.plist文件右键->Open As->Property List,查看相机权限是否添加成功
-
运行后设备屏幕上会多出一个lua标识,此时我们便可以通过热重载进行更加便捷的开发
注意:
- Xcode版本或手机系统版本差异可能运行后出现黑屏现象。解决方案:在AppDelegate.h文件中声明UIWindow
@property (strong, nonatomic) UIWindow *window;
即可。 - 如果遇到无法present页面的情况,请检查是否设置了导航控制器