Kotlin 1.3.30改進彙總

JetBrains不久前發佈了Kotlin 1.3.30。此版本主要針對Kotlin 1.3修復bug並更新功能。Kotlin 1.3.30改進了Kotlin/Native和KAPT,支持更多對無符號類型和數組的操作,並改進了IntelliJ IDEA的調試功能,等等。

Kotlin/Native現在支持Windows 32位目標(mingw_x86)。此外,macOS和Windows用戶可以將Kotlin/Native程序交叉編譯到Linux x86-64、arm32、Android和樹莓派等設備上。

Kotlin/Native還爲蘋果平臺帶來了一系列改進。針對異常處理,開發者可以在iOS崩潰日誌中找到未處理的異常,新版的異常回溯功能在調試模式下還包含iOS和macOS上的符號集。

蘋果開發者還可以使用-Xstatic-framework命令行參數生成靜態框架,或者爲跨平臺項目生成以下Gradle腳本:
kotlin {
    macosX64 {
        binaries {
            framework {
                isStatic = true
            }
        }
    }
}

蘋果開發者還能用到一項實驗性功能,其使用Gradle插件提供與CocoaPods的集成。此功能可將Kotlin/Native項目轉換爲.podfile依賴項,可將其包含在Podfile中。這樣以來,開發者就可以獲得與XCode的Swift pod或Objective-C pod相同的體驗。此外還可以將CocoaPods依賴項導入Kotlin/Native項目。提供該功能的gradle插件負責處理將框架導入Kotlin/Native項目的所有必要配置。

// Apply plugins.
plugins {
    id("org.jetbrains.kotlin.multiplatform") version "1.3.30"
    /// the new plugin for CocoaPods support
    id("org.jetbrains.kotlin.native.cocoapods") version "1.3.30"
}

// CocoaPods requires the podspec to have a version.
version = "1.0"

kotlin {
    cocoapods {
        summary = "a Kotlin/Native module"
        homepage = "homepage"

        pod("AFNetworking", "~> 3.2.0")
    }
}

在已有Xcode項目中導入Kotlin/Native模塊需要執行以下步驟:

  • 安裝CocoaPods
  • 配置gradle項目:應用org.jetbrains.kotlin.native.cocoapods插件,添加並配置目標,並指定所需的podspec字段
  • 運行podspec任務,生成上文描述的podspec文件。
  • 在Xcode項目的Podfile中添加對生成的podspec的引用
target 'my-ios-app' do
    pod 'my_kotlin_library', :path => 'path/to/my-kotlin-library'
end
  • 爲Xcode項目運行pod install。

之前通過KAPT編譯插件在Kotlin中支持的註釋處理器(JSR 269)也得到了改進。KAPT增加了一項實驗性功能,可以實現增量註釋處理器;開發者若想嘗試該功能,可在gradle.properties中添加下面這行代碼:

kapt.incremental.apt=true

KAPT的另一個有趣的特性是Compile Avoidance(避免編譯),它只在更改方法主體時跳過註釋處理。只有在註釋處理類路徑中顯式聲明所有KAPT依賴項時纔可以避免編譯。要啓用避免編譯,需在gradle.properties中添加下面這行代碼:

kapt.include.compile.classpath=false

Kotlin 1.3.30支持更多對無符號類型和無符號類型數組的操作:

fun main() {
    val u1 = 2_147_483_649u
    val u2 = 4_000_000_000u
    println(u1.toDouble())
    println(minOf(u1, u2))

    val array: UIntArray = uintArrayOf(u1, u2)
    println(array.max())
    println(array.all { it > Int.MAX_VALUE.toUInt() })
}

由於無符號數組實現了Collection(例如用於UIntArray的Collection),開發者現在可以使用filter和map等操作。

IntelliJ IDEA對Kotlin 1.3.30的支持也得到了改進。現在可以更容易地調試協程;新增獨立的“異步堆棧跟蹤”功能顯示暫停時存儲的變量。

IntelliJ IDEA調試功能的另一項改進是“Kotlin”模式,它使開發者能夠通過Kotlin名稱而不是輔助JVM名稱來查看變量:


(圖片來自 https://blog.jetbrains.com

IntelliJ IDEA的其它重要功能和錯誤修復包括:

  • 新增用來替換isEmpty/isNotEmpty方法否定語句的意圖。例如,!isEmpty() -> isNotEmpty(),!isNotEmpty() -> isEmpty()
  • 新增用.size替換Collection.count()的語法檢查和快速修正。例如,listOf(1, 2).count() -> listOf(1, 2).size
  • 新增用Kotlin的forEach替換Java 8的Map.forEach的語法檢查
  • 新增有關重複requireNotNull和checkNotNull用法的警告
  • 修復不正確的KT elvis表達式調試器評估
  • 支持多行TODO評論。

要查看完整的更新列表可查閱更新日誌。若要更新到Kotlin 1.3.30,IntelliJ IDEA和Android Studio用戶應進入工具> Kotlin>配置Kotlin插件更新,然後單擊“立即檢查更新”;Eclipse用戶應該使用Marketplace安裝插件,或者從maven獲取更新;Gradle和npm用戶應使用1.3.30作爲編譯器和標準庫的版本號。其它文檔點此查看。

查看英文原文Kotlin 1.3.30 Brings Kotlin/Native and KAPT Improvements, and More

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章