【Unity】Androidビルドで見かけるJDK、SDK、NDKのワードを解説
Unityでゲームを作る分には結構情報が充実していていいのですが、実際に各プラットフォーム向けにビルドするとなると、覚えることが多かったりします。
AndroidだとJDK、SDK、NDKなんて言葉をまず目にするかもしれません。「全部Kついてるけどなんだよこれ……」と似たような3文字のアルファベットが並んでいるのは面食らう部分ではないかと。
このページではこれらのワードについてざっくりと解説します。すでにAndroidでの開発に慣れている人は既知の情報になるかも。
Androidビルドで見かけるJDK、SDK、NDK
Unityで「Android Build Support」のモジュールをインストールすると、PreferencesのExternal Toolsの項目にJDK、SDK、NDKの設定が並んでいます。
Unity Hubを使って必要なパッケージをインストールする場合はあまり意識しないでさらっと追加されていて一体何者……? ということもあるかもしれませんので、簡単に解説していきます。
JDK(Java Development Kit)とは
JDK(Java Development Kit)とはプログラミング言語のJavaで開発を行うための開発キットです。Android向けのソフトウェアではJavaまたはKotlinを使って開発していきます。
Unityの「Android Build Support」のモジュールではOpenJDKがインストールされます。これはオープンソース版のJDKで、無料で使えるものです。実は無料じゃないOracle JDKもあったりしてややこしいところ。2019年の4月にOracle JDKの商用利用が有償化されたので、Unity2018.3以降はOpenJDKが使われるようになりました。
JDKにはJavaのコンパイラやデバッガ、JARの圧縮ツールなどさまざまなものが入っています。まさにJavaを使って開発を行うために便利なツールが入っているんです。
SDK(Software Development Kit)とは
SDK(Software Development Kit)とは、ソフトウェアの開発キットのこと。Android SDKといった場合には、Android端末向けのソフトウェアを開発するために必要なパッケージやライブラリをまとめたツールを指します。
Android端末上で動作するプログラムを自分で1から作るのは地獄めいた行為なので、「この処理を呼び出してもらえばすぐに文字列表示しますよ!」とあらかじめ作ってくれている処理を使うことで作業時間を大幅に減らすことができます。文字を表示する、音を鳴らす、画像を表示する、といった処理を実現するために、SDKにあらかじめ用意されているメソッドを使えば簡単に実現できるイメージです。(これらの処理はあくまで例です)
また、呼び出すための処理(API)に加えて、デバッグ用のツールだったり、フォントが入っていたり、エミュレータ用のスキン画像が入っていたりと、Androidアプリの開発全般に役立つツールが入っています。
Unityを使っている場合は、私たちが直接SDKに含まれるAPIなどを使って処理を実装するわけではありませんが、私たちがC#で書いた「やってほしいこと」をAndroidの端末で動くように、Unityがコンパイルするするときに使っています。
SDKはAndroidのOSがバージョンアップするにつれ、どんどんバージョンアップしていきます。各バージョンのOSの仕様に合わせて機能が強化されていくため、それに対応した開発キットが用意されます。
Androidの場合「APIレベル」という言葉も出てくるので、SDKとの関連を掴みたい時には以下の記事もご参照くださいな。
NDK(Native Development Kit)とは
NDK(Native Development Kit)とはAndroidでCやC++のコードを使用できるようにするツールキットです。
「UnityではC#を使っているのになんでCやC++の話が?」と思われたかもしれません。
UnityではAndroid向けにビルドする際、スクリプティングバックエンドとして「mono」と「IL2CPP」を選択することができます。スクリプティングバックエンドはUnityのスクリプティングを強化するツール……って説明だと情報が増えていないですね(笑) ビルドするときにいい感じでコンパイルしてくれる便利なツール、ぐらいのイメージです。
このうち「IL2CPP」では、
- C#のコードを共通中間言語(CIL: Common Intermediate Language)にコンパイル
- CILをC++にコンパイル
- C++をマシンのネイティブコードにコンパイル
という流れになっています。ネイティブコードというのがAndroidの場合はAndroid向けのC++プラグインで、これを作るためにNDKを使用します。
まとめ
このページではAndroidビルドで見かけるJDK、SDK、NDKのワードを解説しました。ざっくり言えばUnityがAndroid向けにアプリをビルドするために使うツールです。
これらのツールは自動的にインストールされるので、インストールされたパスを意識するくらいかも。ただ、それぞれの役割を知っておくことでAndroidアプリが作成されるイメージもしやすくなるかもしれません。
おまけ: NDKが見つからない!
Unity2020.1でなんとなくAndroidでビルドしてみたら、NDKが見つからないとのエラーが。いやいや、ちゃんとUnity Hubがインストールした時のパスのままにしてるよーと思ってPreferencesを眺めていたのですが、嫌な予感がしたので該当のパスにあるファイルを見に行きました。
するとそこにあったのは「NDK」のフォルダ。ただしフォルダの中身が空に……。
Unity Hubのモジュール追加で「Android Build Support」を選択していたのですが、なぜかNDKだけ入っていなかったようです。
NDKを再インストール……と思いきや、モジュールの追加画面ではもうインストール済みの扱いなのでチェックを入れられないし「実行」ボタンも押せなくなっていました。おぅふ。
正常にできた雰囲気で失敗していることはたまにあるらしく、ググってみるとUnity Hub経由でインストールする際にコケる人も案外いるみたいでした。
私がやったのは別のバージョンをインストールしてそちらで「Android Build Support」をインストールすること。使っていたバージョンがUnity2020.1.14f、この時の最新版がUnity2020.1.17fだったので新しい方を入れてしまいましたが、最新版を使っている場合はエディタを再インストールするのがいいかもしれません。
Android DeveloperのページからNDKをインストールしようかとも思いましたが、Unityで指定しているバージョン(19.0.x)のものがなく、19.2.xのものしかダウンロードできず、こちらも断念しました。
私のネットワーク環境だとWi-Fiを使っているので安定性の問題もあるかもしれませんが、途切れたタイミングによってはパッケージが足りていないのに成功扱いになってインストールできなくなることもあるのかなと。あ、これは私の想像ですが。
パスが設定されているのにビルドがうまくいかない時にはSDKやNDKのファイルがちゃんと存在していることも確かめると良さそうです。
ゲーム開発の攻略チャートを作りました!
-
前の記事
メンタルの状態に応じて取り入れる言葉を変えることも必要【ゲーム開発】 2020.12.18
-
次の記事
【Unity】Android向けにビルドするときに見かけるGradle(グレイドル)って? 2020.12.20
情報ありがとうございます。
NDKのバージョン違いですが、source.properties というファイルの Pkg.Revision を、エラーダイヤログが要求する数値に書き換えたら通るようになりました。
なんと!
教えていただいてありがとうございます!