uni-app打包报错 UTS插件报错
uni-app打包报错 UTS插件报错
| 开发环境 | 版本号 | 项目创建方式 |
|---|---|---|
| Windows | win11 | HBuilderX |
操作步骤:
- 打包报错
预期结果:
- 打包报错
实际结果:
- 打包报错
bug描述:
- Appid:
UNI9EFB5DE - HBuilderX版本号:4.76
- uniapp-cli版本: 4.15-alpha
- uniapp 编译器版本: 4.15
- 云打包服务器SDK版本: 4.82
e: file://[PackagePath]/wgtRoot/UNI9EFB5DE/uni_modules/gy-camera/utssdk/app-android/src/index.kt:714:10 Property must be initialized, be final, or be abstract.
FAILURE: Build failed with an exception.
更多关于uni-app打包报错 UTS插件报错的实战教程也可以访问 https://www.itying.com/category-93-b0.html
更多关于uni-app打包报错 UTS插件报错的实战教程也可以访问 https://www.itying.com/category-93-b0.html
简单来说,uts代码里面的class定义,需要给字段初始化默认值。
参考Kotlin2.2.0升级说明里面提到
https://doc.dcloud.net.cn/uni-app-x/plugin/uts-for-android.html
带有 open 的字段必须立即初始化。
具体来说,如果有以下uts代码:
export class SomeData {
address : InetAddress
host : String
port : Int
size : Int
msg : String
constructor(address : InetAddress, host : String, port : Int, size : Int, msg : String) {
this.address = address;
this.host = host;
this.port = port;
this.size = size;
this.msg = msg;
}
}
那么升级之后将会报错,因为它会编译出类似这样的kotlin代码:
open class SomeData (
open var address: InetAddress
open var host: String
open var port: Int
open var size: Int
open var msg: String
constructor(address : InetAddress, host : String, port : Int, size : Int, msg : String) {
this.address = address;
this.host = host;
this.port = port;
this.size = size;
this.msg = msg;
}
}
以上代码在kotlin 2.0会报错,因为上面的字段在定义的时候没有初始化值。
也就是说必须要 open var port: Int = 0 这样在字段上初始化默认值,构造器不算。
另外,这个SomeData的class定义没有意义,只是为了和JS进行数据交互。
不如直接定义一个type
export type SomeData = {
address: InetAddress
host: String
port: Int
size: Int
msg: String
}
然后它会编译出以下没问题的代码:
open class SomeData (
@JsonNotNull
open var address: InetAddress,
@JsonNotNull
open var host: String,
@JsonNotNull
open var port: Int = 0,
@JsonNotNull
open var size: Int = 0,
@JsonNotNull
open var msg: String,
) : UTSObject()

