w***@163.com
w***@163.com
  • 发布:2025-10-14 15:27
  • 更新:2025-11-05 00:28
  • 阅读:91

打包报错 UTS插件报错

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: win11

HBuilderX类型: 正式

HBuilderX版本号: 4.76

手机系统: Android

手机系统版本号: Android 16

手机厂商: 小米

手机机型: 小米civi

页面类型: vue

vue版本: vue3

打包方式: 云端

项目创建方式: 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.

所有的uts插件都报错了,9月初打包没有问题

2025-10-14 15:27 负责人:无 分享
已邀请:
s***@outlook.com

s***@outlook.com

简单来说,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()

要回复问题请先登录注册