
システムプロパティから取得
単純にシステムプロパティから判定できる。
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()