Skip to content

Kotlin/Nativeバイナリオプション

このページでは、Kotlin/Nativeの最終バイナリを設定するために使用できる、役立つKotlin/Nativeバイナリオプションと、プロジェクトでバイナリオプションを設定する方法を一覧表示します。

有効化する方法

バイナリオプションは、gradle.propertiesファイル、ビルドファイルで有効にするか、コンパイラ引数として渡すことができます。

Gradleプロパティでの設定

プロジェクトのgradle.propertiesファイルで、kotlin.native.binaryプロパティを使用してバイナリオプションを設定できます。例:

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 (デフォルト)
スタックカナリアを有効にします。脆弱な関数にはyes、すべての関数にはall、より強力なヒューリスティックを使用する場合はstrongを使用します。2.2.20から利用可能
pagedAllocator
  • true (デフォルト)
  • false
アロケーションのページング(バッファリング)を制御します。falseの場合、メモリアロケーターはオブジェクトごとにメモリを予約します。2.2.0から実験的
latin1Strings
  • true
  • false (デフォルト)
アプリケーションのバイナリサイズを削減し、メモリ消費量を調整するために、Latin-1エンコードされた文字列のサポートを制御します。2.2.0から実験的
mmapTagUIntAppleプラットフォームでのメモリ消費量追跡に必要なメモリータグ付けを制御します。値240-255が利用可能です(デフォルトは246)。0はタグ付けを無効にします。2.2.0から利用可能
disableMmap
  • true
  • false (デフォルト)
デフォルトのアロケーターを制御します。trueの場合、mmapではなくmallocメモリアロケーターを使用します。2.2.0から利用可能
gcガベージコレクションの動作を制御します。
  • pmcsは並行マーク同時スイープを使用します
  • stwmsはシンプルなストップ・ザ・ワールドマークアンドスイープを使用します
  • cmsはGCの一時停止時間を短縮するのに役立つ同時マークを有効にします
  • noopはガベージコレクションを無効にします
cmsは2.0.20から実験的
gcMarkSingleThreaded
  • true
  • false (デフォルト)
ガベージコレクションのマークフェーズの並列化を無効にします。大規模なヒープではGCの一時停止時間が増加する可能性があります。1.7.20から利用可能
enableSafepointSignposts
  • true
  • false (デフォルト)
Xcode Instrumentsでのデバッグのために、プロジェクト内のGC関連の一時停止の追跡を有効にします。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ファイルにバンドルID(CFBundleIdentifier)を設定します。1.7.20から利用可能
bundleShortVersionString
  • String
Info.plstファイルに短いバンドルバージョン(CFBundleShortVersionString)を設定します。1.7.20から利用可能
bundleVersion
  • String
Info.plstファイルにバンドルバージョン(CFBundleVersion)を設定します。1.7.20から利用可能
sourceInfoType
  • libbacktrace
  • coresymbolication (Appleターゲット)
  • noop (デフォルト)

例外のスタックトレースにファイルの位置と行番号を追加します。

coresymbolicationはAppleターゲットでのみ利用可能であり、デバッグモードではmacOSおよびAppleシミュレータでデフォルトで有効になります。

1.6.20から実験的

安定性レベルの詳細については、ドキュメントを参照してください。

次のステップ

最終ネイティブバイナリをビルドする方法を学びましょう。