-
Notifications
You must be signed in to change notification settings - Fork 115
更新历史
更新内容:
- 增加线程安全机制
- lua核心升级至5.3.5版本
- 修复Android平台下使用
ArrayList
作为参数传入callMethod
中无效问题。 - 允许Android、Unity平台下使用泛型作为参数传入lua。
- 修复Android平台下map中设置null元素转换失败问题
- Android和Unity平台下的
LuaExportTypeConfig
和LuaExportTypeAnnotation
标注过期(后续版本将移除),使用LuaExclude
注解(特性)来代替:
Android平台
//调整前
@LuaExportTypeConfig(excludeExportInstanceMethodsNames = {"method1", "method2"})
class TargetClass implements LuaExportType
{
public void method1 () {}
public void method2 () {}
}
//调整后
class TargetClass implements LuaExportType
{
@LuaExclude
public void method1 () {}
@LuaExclude
public void method2 () {}
}
Unity平台
//调整前
[LuaExportTypeAnnotation(excludeExportInstanceMethodNames=new string[]{"method1", "method2"})]
class TargetClass : LuaExportType
{
public void method1 () {}
public void method2 () {}
}
//调整后
class TargetClass : LuaExportType
{
[LuaExclude]
public void method1 () {}
[LuaExclude]
public void method2 () {}
}
本次更新内容包括:
- 修复访问属性时导致堆栈错乱引发的一些未知问题
- 修复框架中的内存泄漏问题
- 优化抛出异常接口
raiseException
- 修复一些不必现的崩溃问题
- 优化执行效率
本次更新内容包括:
- 废弃原有构造函数
create
,使用类型()
方式构造对象; - 统一使用冒号来进行类方法和实例方法的声明和调用(之前版本类方法用点语法,实例方法用冒号语法)。
- 优化类型加载逻辑,提升执行效率。
-
Object
类型新增typeMapping
方法,用于为原生类型定义别名。 -
LuaContext
新增raiseException
原生方法,用于抛出Lua执行异常。 - 修复iOS、OSX下Function类型传入原生层后释放时崩溃问题。
- 修复iOS、OSX下32位设备返回布尔类有误问题。
- 修复Windows下编译Android项目报错问题。
注:由于本次更新涉及语法变更,更新后需要调整变更的语法,请使用旧版本的同学谨慎升级
本次更新内容包括:
- 修复iOS / OSX平台下调用方法导致内存泄漏问题。
- 修复Android平台下,类型方法的参数使用Object类型来声明参数时,强转报错问题。
更新内容如下:
- LuaValue增加Class类型
- 完善异常捕获检测,让问题定位更加准确
- 修复继承Object对象的Lua类型操作异常问题。
- 优化查找属性和获取属性值业务逻辑
- 优化GC回收处理
- 异常捕获优化,修正原生方法执行异常后无lua异常报告问题。
- 增加TmpValue,用于解决Table类型原生转换后再回传lua产生的变化问题。
- 修复父类属性在子类重写后无法正常调用问题。
- 修复Unity下多个LuaContext相互影响问题。
- 修复对象创建时在init方法中调用self相关的属性和方法导致栈溢出问题。
- 修复Lua中直接调用subclass派生类型无法进行扩展类型属性定义问题。
LuaScriptCore迎来一次重大更新!本次更新主要涉及对象映射部分功能,其中包括:
- 导出类型更加自由,取消强制继承
Module
或者ObjectClass
类型的导出机制,只要类型实现ExportType
则可以在Lua脚本中进行使用。在原生代码定义如下:
iOS
@interface LuaType : NSObject <LSCExportType>
// 定义属性和方法...
@end
Android
class LuaType implements LuaExportType
{
// 定义属性和方法...
}
Unity3D
class LuaType : LuaExportType
{
// 定义属性和方法...
}
则可以在Lua中进行使用,如:
local obj = LuaType.create();
print (obj);
- 导出类型的属性访问更加简单易用,如果的原生类有一个name的属性定义如下:
iOS
@interface LuaType : NSObject <LSCExportType>
@property (nonatomic, copy) NSString *name;
@end
Android
class LuaType implements LuaExportType
{
public String name;
}
Unity3D
class LuaType : LuaExportType
{
private string _name;
public string name
{
get
{
return _name;
}
set
{
_name = value;
}
}
}
以前的版本在Lua中的调用形式如下:
local obj = LuaType.create();
obj:setName("vim");
print (obj:name());
新版本中调用形式如下:
local obj = LuaType.create();
obj.name = "vim";
print (obj.name);
- 现在可以支持类型方法的重载了!!假设你的原生类型方法有多个重载:
iOS
@interface LuaType : NSObject <LSCExportType>
- (void)test;
- (void)testWithMsg:(NSString *)msg;
@end
Android
class LuaType implements LuaExportType
{
public void test () {};
public void test(String msg) {};
}
Unity3D
class LuaType : LuaExportType
{
public void test () {};
public void test (string msg) {};
}
在Lua中可以根据传参来调用到不同方法重载,如:
local obj = LuaType.create();
obj.test();
obj.test("Hello World");
- 本次更新为了满足部分同学的需要,对Lua 5.1版本核心进行了支持(适用于iOS、OSX、Android平台),但是没有直接制作relase包,有需要的同学可以直接使用源码工程打包。具体打包步骤如下:
iOS
- 打开
Source/iOS_OSX/LuaScriptCore_5_1.xcodeproj
工程 - 选择
LuaScriptCore-iOS-output
或者LuaScriptCore-iOS-Swift-output
scheme编译输出iOS包 - 在
Release/iOS
或者Release/iOS-Swift
中可找到导出包
OSX
- 打开
Source/iOS_OSX/LuaScriptCore_5_1.xcodeproj
工程 - 选择
LuaScriptCore-OSX-output
或者LuaScriptCore-OSX-Swift-output
shcme编译输出OSX包 - 在
Release/OSX
或者Release/OSX-Swift
中可找到导出包
Android
- 使用Android Studio 打开
Source/Android
工程 - 打开
build.gradle(Module:luascriptcore)
文件,将apply from: './compile.gradle'
改为apply from: './compile-5.1.5.fradle'
- 然后重新编译
- 在
Source/Android/luascriptcore/build/intermediates/bundles/release/
目录下找到导出包
- 除了上述更新内容外,本次还优化了内部的一些处理逻辑和流程,同时修复了一些已的bug。具体内容包括:
- 优化iOS/OSX下addSearchPath接口逻辑处理
- 修复iOS/OSX平台在Xcode9下打包出错问题
- 修复Context销毁时出现崩溃的问题。
- 修复在Lua协程操作时访问异常问题。
修复Lua协程中调用原生方法异常问题
-
LuaContext
增加retainValue
和releaseValue
,允许原生层对Lua层对象进行内存上的管理。 - 新增
LuaManagedValue
类型,使用该类型可以延长Lua对象生命周期,使其在类型被释放之后进行。 - 改进框架,优化执行效率
-
新增类型导入功能,让原生类型直接导入到Lua中使用,如
Person = ClassImport('Person')
。 -
新增iOS的Swift版本和Unity3D下获取和设置全局变量功能。
-
调整动态声明类方法和实例方法形式,类方法声明不变,实例方法由原来如
function Person:init () end
改为function Person.prototype:init () end
-
修复Android内存泄露问题
-
OSX和iOS平台下增加Swift版本,可以使用Swift来开发LuaScriptCore了。
-
Android平台下增加onException方法用于捕获Lua运行时异常。
-
Unity3D下增加导出模块和类到Lua中。
-
面向对象模块增加实例对象的super属性可以访问类的父类实例方法,用于重载方法时使用,如:self.super.init(self);
-
面向对象模块增加检查对象类型方法instanceOf和检测继承关系方法subclassOf
-
面向对象模块中的Lua类型增加类型名称name属性。
-
修复OSX和iOS平台下Lua传入包含二进制数据的字符串无法自动转换为NSData问题。
-
允许面向对象模块的创建对象方法create传入参数并在实例对象的init方法中取得。
-
修复Android平台下Lua数组元素或者字典元素超过512个时栈溢出问题。感谢John的反馈^_^
-
修复Table类型作为参数传入时,不是作为最后一个参数传入时发生异常。
-
修复Android平台下报告没有找到localeconv符号问题。
-
优化对象实例调用时不采用:号调用方法产生异常的提示。
-
修复Android平台下无法在低于Api19的机器运行问题。
-
修复Android平台下对象实例方法没有继承问题。
-
iOS、OSX、Android平台增加设置和获取全局变量接口方法。
-
优化方法返回值的实现,允许Lua->原生以及原生->Lua返回多个返回值。
-
修复Android平台下,调用类的方法或实例方法时,如果传入类型与声明类型不匹配导致崩溃问题。
-
修复iOS、OSX平台下的evalScript、callMethod接口以及Function的invoke接口设计不统一问题。
-
修复Android平台下Module的方法传入Table类型时崩溃问题
-
修复Android平台下调用evalScript无法require资源包中的文件
-
修复Android平台下多个模块和类中同名存静态方法调用失效问题。
-
修复从lua回传多层级table时崩溃问题。
-
修复原生对象传入lua时没有调用init方法问题。
-
修复对象释放时出栈问题。
-
修复一些已知问题和优化性能。
-
修复Android平台下使用evalScriptFromFile方法返回值为nil问题。
-
优化evalScriptFromFile方法,允许可以只传入资源目录下的lua文件名称来解析指定脚本。
-
增加Unity平台的接入,支持导出iOS、OSX以及Android应用,目前只支持Mac OS X下编辑器的开发调试。
1、优化Function和Object的内存使用,提升执行效率。
2、允许Object的实例对象可以动态添加属性或者方法。
1、修复Function对象invoke时导致脚本终止执行问题。
2、修复iOS中Object释放时崩溃问题。
3、优化内存使用,修复内存泄露问题。
修复对象在lua和原生层中相互传递时,部分方法处理行为不一致问题。
1、在面向对象模块中的类型映射使用新的方法实现。
2、让原生类型可以轻松地穿越在lua层和原生层中。
3、允许在lua中可以扩展类型的方法和属性,例如为Object添加一个printObject的方法。
4、允许lua中的方法传入原生层中,并且允许原生层触发方法的调用和传递参数。
5、为类实例添加两个默认参数init和destroy方法,分别在对象初始化和释放时被触发(子类可改写)。
-
支持iOS、Android 和 OS X三个平台。
-
支持Lua与原生层的数据交互。