Java で Spresense の開発をしてみる(1)

# この記事について
2019/12/2 に、Spresense開発ボードでJavaをサポートする旨のプレスリリースが行われました。
→ [Spresense development board from Sony now also supports Java](https://developer.sony.com/ja/posts/spresense-development-board-from-sony-now-also-supports-java/)
ということで、実際に試してみます。

今回は、やってみたら意外と面倒で時間がかかった、開発環境の構築についてをまとめてみます。

# Spresense Java 開発環境について
Spresense の Java の開発には、 [MicroEJ](https://developer.microej.com/sony-spresense-getting-started-sdk.html) という組み込み向けのJava開発環境を使用します。

開発環境の構築手順は https://github.com/MicroEJ/Platform-Sony-Spresense に書かれていますので、手順通りに進めます。ただし、この手順が意外と不親切というか絵が全く無く文字だけの説明なので非常にわかりにくいです。
今回は、この開発環境の構築手順を以下にまとめてみます。

## 前提
MicroEJ での開発は Windows10上でしか動かないようです。
Mac/Linux使いの人は現時点では諦めましょう。
Windows7使いの人はもうサポート切れ間近ですので、これを機にWindows10に移行しましょう。

## 事前に必要なモジュールをインストールする
gcc-arm-none-eabi v7.3.1 をダウンロードしてインストールします。
→ https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm/downloads

## MicroEJ のファイルをダウンロードしておく
以下ファイルをダウンロードしておきます。
(ファイルのリンク先は 2019/12/12時点の情報です。詳細は https://github.com/MicroEJ/Platform-Sony-Spresense を参照のこと）

- Download MicroEJ architecture 7.11  
  https://repository.microej.com/architectures/com/microej/architecture/CM4/CM4hardfp_GCC48/flopi4G25/7.11.0/flopi4G25-7.11.0-eval.xpf
- Download Pack FS 5.0  
  https://repository.microej.com/architectures/com/microej/architecture/generic/fs/fs-pack/5.0.0/fs-5.0.0.xpfp
- Download Pack UI 12.0  
  https://repository.microej.com/architectures/com/microej/architecture/CM4/CM4hardfp_GCC48/flopi4G25-ui-pack/12.0.0/flopi4G25UI-12.0.0.xpfp
- Download Pack HAL 2.0.1  
  https://repository.microej.com/architectures/com/microej/architecture/generic/hal/hal-pack/2.0.1/hal-2.0.1.xpfp

## Spresense SDKをインストールする
基本的には、[Windows10(WSL)でSpresense SDKを使用する](https://qiita.com/nara256/items/b50542cb9d782ba05232) のとおりに進めればOKですが、いくつか注意点があります。

- Spresense SDK は最新版(2019/12/12時点でv1.4.2)ではなく、v1.3.1を使う必要があります。そのため、githubからSpresense SDKを取得する際に以下のようにバージョンを指定します。

```bash
$ git clone https://github.com/sonydevworld/spresense.git
$ cd spresense/
$ git submodule update --init --recursive
$ git checkout --recurse-submodules v1.3.1
```

- Spresense SDK 取得後に、MicroEJのファイルも取得します。Spresense SDKを取得したディレクトリにて、以下のとおりMicroEJを取得します。

```bash
$ git submodule add https://github.com/MicroEJ/Platform-Sony-Spresense.git MicroEJ
```

## MicroEJの開発ツールを設定する

### MicroEJ SDKをインストールする
https://developer.microej.com/packages/SDK/19.05/ から MicroEJ SDKのインストーラーをダウンロードし、インストールします。

### SDKを起動する
SDKを起動して、いらない画面を閉じたりしていると、こんな感じの画面になると思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/169018/ae2f7580-7497-a89d-7550-0e44908bb3d7.png)

### Architecture packs をインストールする
メニューから `Window` → `Preference` を選択します。
表示されたダイアログ内、`MicroEJ` → `Architectures` を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/169018/1662e6ec-8369-8b1c-e315-230d430cff3c.png)
`Import` のボタンを押し、表示されるダイアログの `Select directory` の部分から `Browse...` ボタンを押します。
事前にダウンロードしておいた `flopi4G25-7.11.0-eval.xpf` `fs-5.0.0.xpfp` `flopi4G25UI-12.0.0.xpfp` `hal-2.0.1.xpfp` (※記載のファイル名は2019/12/12時点のものです) の各ファイルが保存されているディレクトリを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/169018/74f95cd7-95b2-bc3a-7588-8d6b0291ad1f.png)

ファイルを選択すると、こんな感じで`Target` のエリアに表示されます。　ダイアログ下部の `I agree ～` のチェックボックにチェックを付けて、`Finish` ボタンを押します。

### ライセンス登録する
#### UIDを取得する
上記で Architecture packs をインポートできたと思いますが、License の表示がバツ印になっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/169018/4bdc1a76-25d1-b129-b695-382dd4a6b802.png)
ここで、表示されている `ARM Cortex-M4 GCC EVAL` を選択すると、画面の `Get UID` のボタンが enable になりますので、ボタンを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/169018/172fabe1-eb64-2830-8e9b-5254bb6d4e06.png)
こんな感じで`UID` が表示されますので、どこかにコピーしておきます。

#### ライセンスファイルを取得する
ライセンスファイルを取得するために、 http://license.microej.com/ にアクセスします。アカウントを作成してログインします。
ログイン後の画面から `Activate License` をクリックすると、以下のような表示になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/169018/3165a02f-1acf-25f5-6a81-f0a1a3711ecd.png)
`P/N` の欄には https://developer.microej.com/getting-started-sdk-40.html に記載されているP/Nを入力します。（リンク先の画面を `P/N` で文字列検索するとそこに書いてあります。）
`UID` の欄には先程メモしたUIDを入力します。
`Activate`ボタンを押すと、ライセンス情報が記載されたzipファイルがダウンロードできるようになりますので、ダウンロードしておきます。

#### ライセンスをインポートする
再びSDKに戻ります。
メニューから `Window` → `Preference` を選択します。
表示されたダイアログ内、`MicroEJ` を選択します。
`Licenses`の部分の`Add`ボタンをクリックし、`Select an activation key archive`から先ほどダウンロードしたライセンスファイルのzipファイルを選択し、`OK`を押すと、ライセンスが有効になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/169018/cce0d63a-497c-f316-e791-7634a5c597d8.png)

これで、めでたく MicroEJ SDK が使えるようになりました。

### Spresense開発に必要なファイルをインポートする
メニューの `File` → `Import...`を選択します。
表示されたダイアログから、`General` → `Existing Projects into Workspace`を選択して `Next`ボタンを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/169018/1565304b-cf6f-9043-93d8-4f68346608a1.png)

ファイル選択のダイアログが表示されますので、下記のように Spresense SDK 配下にある `MicroEJ`ディレクトリを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/169018/cda1940e-1557-6d3b-9017-be6e9d6ed54c.png)
`Projects` の欄に3つ表示されますので、すべてインポートします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/169018/8562be44-7f83-cee2-f6dc-04f36ddec28e.png)
インポートされました。 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/169018/b29e16c7-3e9a-3fca-608b-83bfb7c389ad.png)
最上位の `Sony-Spresense-CM4hardfp_GCC48-configuration` を開き、表示される `Spresense.platform` ファイルをダブルクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/169018/ccba36c6-2d34-2c99-94db-e22032c6193c.png)

Overviewの画面が表示されますので、`Build Platform`のリンクをポチッとします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/169018/9b688f92-3ea7-617b-fc5c-49c7e8c3a509.png)
`BUILD SUCCESSFUL` と表示されればOKです。

これで、やっっっっっっっっっとSDKの準備が完了です。

# 次回予告
長くなってしまったので、今回はここで一旦区切ります。
次回は、Spresense SDKの設定をしつつ、実際に Java で Spresense のアプリを作って、コンパイルして、Spresense上 で動作させてみます。