6.3.6 Kotlin/Native 二进制选项

原文链接: https://kotlinlang.org/docs/native-binary-options.html

6.3.6 Kotlin/Native 二进制选项

本页列出有用的 Kotlin/Native 二进制选项,你可以用它们配置 Kotlin/Native 最终二进制文件,以及在项目中设置二进制选项的方式。

如何启用

你可以在 gradle.properties 文件、构建文件中启用二进制选项,也可以把它们作为编译器参数传入。

在 Gradle 属性中

你可以使用 kotlin.native.binary 属性在项目的 gradle.properties 文件中设置二进制选项。例如:

kotlin.native.binary.latin1Strings=true

在你的构建文件中

你可以在 build.gradle.kts 文件中为项目设置二进制选项:

  • 使用 binaryOption 属性为特定二进制文件设置。例如:
1
2
3
4
5
6
7
8
9
  kotlin {
      iosArm64 {
          binaries {
              framework {
                  binaryOption("smallBinary", "true")
              }
          }
      }
  }
  • 在 freeCompilerArgs 属性中作为 -Xbinary=$option=$value 编译器选项设置。例如:
1
2
3
4
5
6
7
8
9
  kotlin {
      iosArm64 {
          compilations.configureEach {
              compilerOptions.configure {
                  freeCompilerArgs.add("-Xbinary=smallBinary=true")
              }
          }
      }
  }

在命令行编译器中

在执行 Kotlin/Native 编译器时,你可以直接在命令行中把二进制选项作为 -Xbinary=$option=$value 传入。例如:

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

二进制选项

注意: 这张表并不是所有现有选项的完整列表,只列出了最值得注意的那些。

选项取值说明状态
enableReleaseBinaryCachetrue false(默认)让编译器在发布模式下使用缓存,以牺牲部分编译器优化为代价加快构建。自 2.4.20 起为实验性
objcExportBlockExplicitParameterNamestrue false(默认)为导出的 Objective-C 头文件中的函数类型添加显式参数名。自 2.2.20 起为实验性
smallBinarytrue false(默认)减小发布版二进制文件的体积。自 2.2.20 起为实验性
stackProtectoryes strong all no(默认)启用栈金丝雀:对易受攻击的函数使用 yes,对所有函数使用 all,使用 strong 则采用更强的启发式规则。自 2.2.20 起可用
pagedAllocatortrue(默认) false控制分配的分页(缓冲)。当为 false 时,内存分配器按对象逐个预留内存。自 2.2.0 起为实验性
latin1Stringstrue false(默认)控制对 Latin-1 编码字符串的支持,以减小应用二进制体积并调整内存消耗。自 2.2.0 起为实验性
mmapTagUInt控制内存标记,这是 Apple 平台上跟踪内存消耗所必需的。可用取值为 240-255(默认是 246);0 表示禁用标记。自 2.2.0 起可用
disableMmaptrue false(默认)控制默认分配器。当为 true 时,使用 malloc 内存分配器而不是 mmap。自 2.2.0 起可用
gccms(默认) pmcs stwms noop控制垃圾回收行为: cms 使用并发标记清除 pmcs 使用并行标记并发清除 stwms 使用简单的停止世界标记清除 noop 禁用垃圾回收自 2.4.0 起 cms 为默认值
gcMarkSingleThreadedtrue false(默认)禁用垃圾回收标记阶段的并行化。在大堆上可能增加 GC 暂停时间。自 1.7.20 起可用
enableSafepointSignpoststrue false(默认)在项目中启用对 GC 相关暂停的跟踪,以便在 Xcode Instruments 中调试。自 2.0.20 起可用
preCodegenInlineThresholdUInt配置 Kotlin IR 编译器中的内联优化过程,该过程发生在实际代码生成阶段之前(默认禁用)。 推荐的 token 数(编译器解析的代码单元)是 40。自 2.1.20 起为实验性
objcDisposeOnMaintrue(默认) false控制 Swift/Objective-C 对象的反初始化。当为 false 时,反初始化发生在专门的 GC 线程上而不是主线程。自 1.9.0 起可用
appStateTrackingenabled disabled(默认)控制应用在后台运行时基于定时器调用垃圾回收器的行为。 当为 enabled 时,只有在内存消耗过高时才会调用 GC。自 1.7.20 起为实验性
bundleIdString在 Info.plst 文件中设置 bundle ID(CFBundleIdentifier)。自 1.7.20 起可用
bundleShortVersionStringString在 Info.plst 文件中设置短的 bundle 版本(CFBundleShortVersionString)。自 1.7.20 起可用
bundleVersionString在 Info.plst 文件中设置 bundle 版本(CFBundleVersion)。自 1.7.20 起可用
sourceInfoTypelibbacktrace coresymbolication(Apple 目标) noop(默认)为异常堆栈轨迹添加文件位置和行号。 coresymbolication 仅适用于 Apple 目标,并且在 macOS 和 Apple 模拟器的调试模式下默认启用。自 1.6.20 起为实验性

提示: 关于稳定性级别的更多信息,请参阅稳定性级别。

接下来学什么

了解如何构建最终的 native 二进制文件。