Skip to content

Kotlin/Native 二進位選項

本頁列出了實用的 Kotlin/Native 二進位選項,您可以用它們來設定 Kotlin/Native 最終二進位檔,以及在您的專案中設定二進位選項的方式。

如何啟用

您可以在 gradle.properties 檔案、建置檔案中啟用二進位選項,或將其作為編譯器引數傳遞。

在 Gradle 屬性中

您可以使用 kotlin.native.binary 屬性在專案的 gradle.properties 檔案中設定二進位選項。例如:

none
kotlin.native.binary.gc=cms
kotlin.native.binary.latin1Strings=true

在您的建置檔案中

您可以在 build.gradle.kts 檔案中為您的專案設定二進位選項:

  • 使用 binaryOption 屬性針對特定二進位檔。例如:
kotlin
kotlin {
    iosArm64 {
        binaries {
            framework {
                binaryOption("smallBinary", "true")
            }
        }
    }
}
  • 作為 freeCompilerArgs 屬性中的 -Xbinary=$option=$value 編譯器選項。例如:
kotlin
kotlin {
    iosArm64 {
        compilations.configureEach {
            compilerOptions.configure {
                freeCompilerArgs.add("-Xbinary=smallBinary=true")
            }
        }
    }
}

在命令列編譯器中

您可以在執行 Kotlin/Native 編譯器時,直接在命令列中將二進位選項作為 -Xbinary=$option=$value 傳遞。例如:

bash
kotlinc-native main.kt -Xbinary=enableSafepointSignposts=true

二進位選項

此表格並非所有現有選項的詳盡列表,僅列出最值得注意的選項。

選項描述狀態
smallBinary
  • true
  • false (預設)
減少發行版二進位檔的大小。從 2.2.20 起為實驗性功能
stackProtector
  • yes
  • strong
  • all
  • no (預設)
啟用堆疊保護(stack canaries):`yes` 用於易受攻擊的函式,`all` 用於所有函式,`strong` 則使用更強的啟發式方法。從 2.2.20 起可用
pagedAllocator
  • true (預設)
  • false
控制分配的分頁(緩衝)。當 `false` 時,記憶體分配器會按物件保留記憶體。從 2.2.0 起為實驗性功能
latin1Strings
  • true
  • false (預設)
控制對 Latin-1 編碼字串的支援,以減少應用程式二進位檔大小並調整記憶體消耗。從 2.2.0 起為實驗性功能
mmapTagUInt控制記憶體標記,這對於 Apple 平台上的記憶體消耗追蹤是必需的。值 `240`-`255` 可用(預設為 `246`);`0` 禁用標記。從 2.2.0 起可用
disableMmap
  • true
  • false (預設)
控制預設的分配器。當 `true` 時,使用 `malloc` 記憶體分配器而不是 `mmap`。從 2.2.0 起可用
gc控制垃圾回收行為:
  • pmcs 使用平行標記並行清除(parallel mark concurrent sweep)
  • stwms 使用簡單的停頓世界標記清除(stop-the-world mark and sweep)
  • cms 啟用並行標記,有助於減少 GC 暫停時間
  • noop 禁用垃圾回收
cms 從 2.0.20 起為實驗性功能
gcMarkSingleThreaded
  • true
  • false (預設)
禁用垃圾回收中標記階段的平行化。可能會增加大型堆積上的 GC 暫停時間。從 1.7.20 起可用
enableSafepointSignposts
  • true
  • false (預設)
啟用追蹤專案中與 GC 相關的暫停,以便在 Xcode Instruments 中進行除錯。從 2.0.20 起可用
preCodegenInlineThresholdUInt

設定 Kotlin IR 編譯器中的內嵌優化傳遞,此傳遞在實際程式碼生成階段之前進行(預設為禁用)。

建議的令牌(編譯器解析的程式碼單元)數量為 40。

從 2.1.20 起為實驗性功能
objcDisposeOnMain
  • true (預設)
  • false
控制 Swift/Objective-C 物件的解除初始化。當 `false` 時,解除初始化會在一個特殊的 GC 執行緒上進行,而不是在主執行緒上。從 1.9.0 起可用
appStateTracking
  • enabled
  • disabled (預設)

控制應用程式在背景執行時基於計時器的垃圾回收器調用。

當 `enabled` 時,GC 僅在記憶體消耗過高時才被調用。

從 1.7.20 起為實驗性功能
bundleId
  • String
在 `Info.plst` 檔案中設定 bundle ID (`CFBundleIdentifier`)。從 1.7.20 起可用
bundleShortVersionString
  • String
在 `Info.plst` 檔案中設定簡短 bundle 版本 (`CFBundleShortVersionString`)。從 1.7.20 起可用
bundleVersion
  • String
在 `Info.plst` 檔案中設定 bundle 版本 (`CFBundleVersion`)。從 1.7.20 起可用
sourceInfoType
  • libbacktrace
  • coresymbolication (Apple 目標)
  • noop (預設)

將檔案位置和行號添加到例外堆疊追蹤中。

`coresymbolication` 僅適用於 Apple 目標,並且在偵錯模式下預設為 macOS 和 Apple 模擬器啟用。

從 1.6.20 起為實驗性功能

有關穩定性等級的更多資訊,請參閱 文件

接下來是什麼

了解如何 建置最終原生二進位檔