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

1 回复

更多关于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()

回到顶部