Windows + PowerShell + ChocolateyによるRPGツクールMVのAndroid向けビルド環境準備

# ツクールMVのAndroid向けビルドの準備がめんどい。そうだ、パッケージマネージャ使おう！～Chocolatey編～
Android向けビルド環境準備については[ここ](http://fanblogs.jp/tabirpglab/archive/155/0)や[ここ](http://lucky-duet.com/archives/1353)を初めとして多くの先輩方たちによって詳しい解説がされているのでここにはあまり書かない。
だが正直手順が多すぎて面倒だ。一体何回PATH設定をさせる気なのだ。
## そもそもWindows用パッケージマネージャはあるのか？
パッケージマネージャとは、ユーザーが希望するパッケージのインストール/アンインストール、PATHの設定、パッケージのアップデートまでを自動で行ってくれるソフトウェアだ。
Linuxなら、多くのディストーションにaptやyum、あるいはpacmanといったパッケージマネージャが用意されている。
ではWindowsにはパッケージマネージャは無いのか？

### 存在している。
2016年現在、Windows用のパッケージマネージャはPackage-Management、Chocolateyのニ種類がよく知られている。
Package-Managementはまんまの名前だが、PowerShellにデフォルトで用意されたMicrosoft公式のパッケージマネージャだ。
しかし、以下の問題がある。

* 初期のリポジトリはパッケージが少なすぎて、結局Chocolateyのリポジトリを登録して使用することが一般的。
* PATHの自動設定がされない場合が少なからずある。

特に後者はパッケージマネージャとしては失格だと言わざる得ない…。
前者についても、Package-Managementを使う場合でも
ここで必要になるパッケージは全てChocolateyのリポジトリから取得することになるので、
正直Package-Managementである必要性は全く無く、私個人としてはオススメはできない。
ここではChocolateyを使ったビルド環境の準備を解説する。

## コマンドについて
基本的に一行づつコピペするだけで動くように書いたつもりなので、一行づつゆっくりと確実にコピペするように。

```PS1
PS > hoge aaa
```

の、`PS > `はPowerShellのコマンドであることを示しているだけの文字なので、コピペする際には避ける。
この場合は`hoge aaa`のみをコピーすればよい。
逆に言えば、`PS > `がついていない行はコマンドでないので入力してもエラーが出るだけなので注意。
二行以上を同時にコピペしてもやっぱりエラーが出るので、横着せずに一行づつコピペしてください。
## 用意するモノ
1. Windows 7以降
2. PowerShell(5.0以上)
3. 管理者権限
4. ネット環境

Power Shell 5はWindows10では初期状態でインストールされているのだが、
7や8.1では別途インストールする必要がある。[こちらの先輩方の記事](http://qiita.com/bu-son/items/2ebca42866833516c772)を参考に。
それ以外は特別不思議なものは無いはず。

なお、ここではGoogle Play Storeへのアップロード・管理は取り扱わない。
ここで取り扱っているのはapkの生成までである。
## Chocolateyの準備
Chocolateyは基本的に管理者権限を要求する。
しばらくは管理者権限で実行したPowerShellからコマンドを実行していこう。
### セキュリティ
というわけで早速インストール、と行きたいところだが、
PowerShellは初期状態だとセキュリティ上の理由からシェルスクリプトの実行を制限しているらしい。
セキュリティを緩めるわけなので、当然リスクも生じる。[ここ](https://technet.microsoft.com/ja-JP/library/hh847748.aspx)に詳細があるので各自確認してほしい。
まずPowerShellを"管理者として実行"、以下のコマンドを実行する。

```PS1
PS > Set-ExecutionPolicy RemoteSigned
```

これでシェルスクリプトの実行が可能になる。
PowerShellを一度閉じて、管理者権限としてPowerShellを開きなおそう。

### chocolateyのインストール

```PS1
PS > iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
```
これでChocolatey本体のインストールが完了する。
## Chocolatey必要なパッケージをまとめてダウンロード

```PS1
PS > cinst -y jdk8 python-x86_32 ant android-sdk
```
インストールされるのはjdk8、python-x86_32、ant、android-sdkの4つ。
python-x86_32でいっぱいエラーが出るけどとりあえず問題なく動くっぽい(殴
pythonとだけ入れてもダウンロードはされるのだが、64bitなOSだと問題が起こるらしい。

今回は必要なものだけインストールしているが、Chocolateyには他にも様々なアプリが用意されている。
Chocolatey自身の更新は勿論、FirefoxやChromeからFlashPlayerPlugin、SkypeやGit、7-zip等、多くのパッケージが用意されている。
実はPowerShellの更新もここから行えるのだが、試していないので今回は書いていない。
パッケージは[こちら](https://chocolatey.org/packages)から検索できるので興味があるなら覗いてみると良い。

処理が終わったら一度PowerShellを閉じ、一般ユーザー権限でPowerShellを開き直す。
なお、今回インストールしたものは

```PS1
PS > choco upgrade all -y
```

で纏めて更新できるので覚えておくと良い。
`all`のところにパッケージ名を入れればそのパッケージ単体の更新も可能だ。
## Android-SDKから必要なパッケージをダウンロード
一般ユーザー権限で実行する。
これも本当はCUIで一本で可能なのだが、今後の更新で問題が起きると嫌なのでGUIで。

```PS1
PS > android
```

android-sdkが起動する。以下のものにだけチェックを入れてInstall X packages...をクリック。
同名のものがある場合は最新のバージョンのもの一つのみで良い。

* Android SDK Tools
* Android SDK Platform-tools
* Android SDK Build-tools
* Android 6.0(API 23)の中のSDK Platform
* Google USB Driver

Android X (API XX)(最新版)が初期状態でチェックが入っていると思うが、これは確実にチェックを外しておく。
中にはAndroidエミュレータ用のデータ等が同梱されており、そのままだと10GB単位で容量が消し飛ばされることになる。
最後のGoogle USB Driverはビルド作業そのものには不要なのだが一応残す。サイズも小さいし。
これはAndroid端末のUSBドライバで、スマホやタブレットの開発者向けの汎用ドライバである。

ライセンスを確認しAccept Licenseにチェックを入れ、Install。
Stopping ADB server failed (code -1).と出ると思うが、これはADBサーバーの停止に失敗したことを示すもの。
ADBを使ったことのない人はそもそもADBサーバなど起動していないので全く問題ない。
終わったらウィンドウを閉じ、PowerShellに戻ってこよう。
## crosswalkの安定版を入手
現在のところ、安定板は10.39.235.16のようなのでこれを使う。
Cドライブ直下に"dev"という名前のディレクトリ(フォルダ)を作り、その中に放り込む。
以下のコマンドだが、分かる人向けに言うと、Invoke-WebRequestはwgetに相当し、Expand-Archiveはunzipに相当する。
どちらもPowerShellが5.0以上なら最初から用意されているはず。

```PS1
PS > mkdir C:\dev
PS > Invoke-WebRequest -Uri https://download.01.org/crosswalk/releases/crosswalk/android/stable/10.39.235.16/crosswalk-10.39.235.16.zip -OutFile C:\dev\crosswalk-10.39.235.16.zip
PS > Expand-Archive -Path C:\dev\crosswalk-10.39.235.16.zip -DestinationPath C:\dev\
PS > del C:\dev\crosswalk-10.39.235.16.zip
```

## manifest.jsonのテンプレートを用意
[こちらのサイト](http://lucky-duet.com/archives/1401)に用意されていたものを使わせていただくことにした。
一応リンク切れ対策としてweb.archive.orgからダウンロードするようになっている。

```PS1
PS > Invoke-WebRequest -Uri https://web.archive.org/web/20151215032104/http://lucky-duet.com/?wpdmdl=1404 -OutFile c:\dev\manifest.json
```
勿論テンプレートでしかないので適宜カスタムしていくこと。
manifest.json内に2バイト文字(日本語とか)が含まれているとビルドに失敗するので要注意。
ゲームに含まれている素材ファイルの名前からも2バイト文字は全て除去すること。
とりあえず試してみたいだけならテンプレートのままでも全く問題ない。

以上で一通り必要な物はそろった。
# 実際にビルドしてみる
先にandroid/ios向けにデプロイしておく。
出力したゲームの中にwwwというディレクトリ(フォルダ)があるのでそこの中へ移動する。
移動はcdというコマンドで行う。
特に出力先を指定しなかったなら、

```PS1
PS > cd ~\Documents\Output\「ゲーム名」\www
```

で目的のディレクトリに入れるはずだ。
勿論「ゲーム名」のところは各自自分のゲーム名に置き換えるように。

```PS1
PS > copy c:\dev\manifest.json .
```

でテンプレートのmanifest.jsonをwwwディレクトリにコピー。

```PS1
PS > python C:\dev\crosswalk-10.39.235.16\make_apk.py --package=com.example.sample --manifest=manifest.json
```

でビルドが始まる。

初期状態のmanifest.jsonを使用した場合、ビルドに成功すれば
`Sample_0.0.1_arm.apk`と`Sample_0.0.1_x86.apk`の２つのファイルが生成されるはずだ。
arm、x86はCPUのアーキテクチャの名前である。詳しいことはWikipedia等で調べれば出てくるが、
スマートフォン・タブレットは大体arm、PCは大体x86と考えてよい。
2017年1月現在はPCでAndroidやChromeOSを使うケースは多くないのでarmさえあれば大体はOK。
しかし今後Androidがどうなるかはわからないのでx86もとっておくことを勧める。
あとはこのapkをandroidのストレージにコピーし適当なファイラーアプリからこのapkを選択すればインストールされる。
個人ブログなどで公開する場合もこのapkを公開しておけば良い。