システムプロパティから取得
単純にシステムプロパティから判定できる。
val os = System.getProperty("os.name") val targetOs = when { os == "Mac OS X" -> "macos" os.startsWith("Win") -> "windows" os.startsWith("Linux") -> "linux" else -> throw Error("Unsupported OS: $os") } val arch = System.getProperty("os.arch") var targetArch = when (arch) { "x86_64", "amd64" -> "x64" "aarch64" -> "arm64" else -> error("Unsupported arch: $arch") }
OS Detector Plugin
OS Detector Plugin で取得することもできる。
os.name
や os.arch
の名前を正規化した形で取得できる。
例えば、os.arch
は x8664|amd64|ia32e|em64t|x64 -> x86_64
のようになる。
plugins { id("com.google.osdetector") version "1.7.3" } val targetOs = when(osdetector.os) { "osx" -> "macos" "linux" -> "linux" "windows" -> "windows" else -> throw Error("Unsupported OS: $osdetector.os") } var targetArch = when (osdetector.arch) { "x86_64" -> "x64" "aarch64" -> "arm64" else -> error("Unsupported arch: $osdetector.arch") }
どのように正規化されるかは、Detector.java を見るのが手っ取り早い。
DefaultNativePlatform
Gradle の内部APIから取得することができる。
val os = org.gradle.nativeplatform.platform.internal .DefaultNativePlatform.getCurrentOperatingSystem() val arch = org.gradle.nativeplatform.platform.internal .DefaultNativePlatform.getCurrentArchitecture() val artifact = when { os.isMacOsX && arch.isArm64 -> "macos-arm64" os.isMacOsX && arch.isAmd64 -> "macos-x64" os.isLinux && arch.isAmd64 -> "linux-x64" os.isWindows && arch.isAmd64 -> "windows-x64" else -> throw Error("Unsupported OS: $os, ARCH: $arch") }
タイプセーフに判定できるので、Gradle側で対応している範囲についてはこちらの対応が良い。
グラフィックライブラリなどの、プラットフォームに依存するライブラリ利用時に、以下のようにして利用できる。
dependencies { implementation("io.github.humbleui:${artifact}:0.109.2") }
なお、OSだけであれば以下で取得することも可能。
org.gradle.internal.os.OperatingSystem.current()