Visual Studio Team ServicesでXamarin.Androidをビルドする時に気を付ける事

# はじめに
この記事は「[Xamarin(その2) Advent Calendar 2016 - Qiita](http://qiita.com/advent-calendar/2016/xamarin2)」の2日目です。
(遅れてごめんなさい～)

(ホントは、[Visual Studio Team ServicesでXamarinをもっと楽に使う](http://qiita.com/masanori1102/items/503a102b97b7bc1c4a50)をAdvent Calendarに挙げたかったです。)

# 本記事で解決する事
Xamarin.AndroidのプロジェクトをVisual Studio Team Servicesでビルドする

## なぜ、これをネタに挙げたのか
選択肢のdefaultがビルドできない設定であり、ハマったから...

# 再現手順
Visual Studio Team ServicesでBuild definitionを作る際に、`JDK Version`を変えず、初期値`default`のままで保存し、ビルドを実行する![vsts_build_csproj.png](https://qiita-image-store.s3.amazonaws.com/0/46949/ddc7f89a-a7de-4871-8ae5-5f1bd0661355.png)

## 結果
プロジェクトのビルドに失敗する

### ログ
失敗してますね

```
2016-12-02T16:04:07.1936537Z ##[section]Starting: Build Xamarin.Android Project Phoneword.csproj
...
2016-12-02T16:04:12.9420485Z   MonoAndroid Tools: C:\Program Files (x86)\MSBuild\Xamarin\Android\
2016-12-02T16:04:12.9430481Z   MonoAndroid Binaries: C:\Program Files (x86)\MSBuild\Xamarin\Android\
2016-12-02T16:04:12.9430481Z   Android Platform API level: 24
2016-12-02T16:04:12.9430481Z   TargetFrameworkVersion: v6.0
2016-12-02T16:04:12.9430481Z   Android NDK: \
2016-12-02T16:04:12.9430481Z   Android SDK: C:\java\androidsdk\android-sdk\
2016-12-02T16:04:12.9430481Z   Android SDK Build Tools: C:\java\androidsdk\android-sdk\build-tools\24.0.2\
2016-12-02T16:04:12.9430481Z   Java SDK: C:\Program Files (x86)\Java\jdk1.6.0_45\
...
2016-12-02T16:04:31.1021909Z   C:\Program Files (x86)\Java\jdk1.6.0_45\\bin\javac.exe -J-Dfile.encoding=UTF8 -d obj\Release\android\bin\classes -classpath "C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\MonoAndroid\v6.0\mono.android.jar" -bootclasspath C:\java\androidsdk\android-sdk\platforms\android-24\android.jar -encoding UTF-8 "@C:\Users\buildguest\AppData\Local\Temp\tmp7721.tmp" 
2016-12-02T16:04:32.8878609Z   obj\Release\android\src\md509b4767b40af69f246eff6e802137e4e\MainActivity.java:5: cannot access android.app.Activity
2016-12-02T16:04:32.8898615Z   bad class file: android\app\Activity.class(android\app:Activity.class)
2016-12-02T16:04:32.8898615Z   class file has wrong version 52.0, should be 50.0
2016-12-02T16:04:32.8898615Z   Please remove or make sure it appears in the correct subdirectory of the classpath.
2016-12-02T16:04:32.8898615Z   	extends android.app.Activity
2016-12-02T16:04:32.8898615Z   	                   ^
2016-12-02T16:04:32.9118630Z ##[error]obj\Release\android\src\md509b4767b40af69f246eff6e802137e4e\MainActivity.java(5,21): Error :  cannot access android.app.Activity
bad class file: android\app\Activity.class(android\app:Activity.class)
class file has wrong version 52.0, should be 50.0
Please remove or make sure it appears in the correct subdirectory of the classpath.
	extends android.app.Activity
...
2016-12-02T16:04:32.9198620Z 
2016-12-02T16:04:32.9198620Z     0 Warning(s)
2016-12-02T16:04:32.9198620Z     1 Error(s)
2016-12-02T16:04:32.9198620Z 
2016-12-02T16:04:32.9198620Z Time Elapsed 00:00:21.55
2016-12-02T16:04:33.1828604Z ##[error]Process 'msbuild.exe' exited with code '1'.
2016-12-02T16:04:33.2048614Z ##[section]Finishing: Build Xamarin.Android Project Phoneword.csproj
```

## 原因
`Android SDK Build-tools package`のVersion 24を利用する場合、`JDK 1.8`を利用する事が期待された動作である。
しかし、ログに`Java SDK: C:\Program Files (x86)\Java\jdk1.6.0_45\`と出力されているように、`default`では`JDK 1.6`を利用している為に、Xamarin.Androidプロジェクトのビルドに失敗した。

* 情報源 : [Technical Bulletin: Android SDK Build-tools 24 | Xamarin Releases](https://releases.xamarin.com/technical-bulletin-android-sdk-build-tools-24/)
* メモ : [AndroidのAPIレベルと対応するJDKのバージョン](http://qiita.com/masanori1102/items/db791d71b15e849bfd82)

## 解決策
`Build definition`で`JDK Version`に`JDK 8`を指定する
![vsts_build_csproj2.png](https://qiita-image-store.s3.amazonaws.com/0/46949/66d3b093-8e0e-6649-b205-65a2d1793a23.png)

### ログ
成功してますね

```
2016-12-02T16:30:22.5040169Z ##[section]Starting: Build Xamarin.Android Project Phoneword.csproj
...
2016-12-02T16:30:28.1133680Z   MonoAndroid Tools: C:\Program Files (x86)\MSBuild\Xamarin\Android\
2016-12-02T16:30:28.1133680Z   MonoAndroid Binaries: C:\Program Files (x86)\MSBuild\Xamarin\Android\
2016-12-02T16:30:28.1133680Z   Android Platform API level: 24
2016-12-02T16:30:28.1133680Z   TargetFrameworkVersion: v6.0
2016-12-02T16:30:28.1133680Z   Android NDK: \
2016-12-02T16:30:28.1133680Z   Android SDK: C:\java\androidsdk\android-sdk\
2016-12-02T16:30:28.1133680Z   Android SDK Build Tools: C:\java\androidsdk\android-sdk\build-tools\24.0.2\
2016-12-02T16:30:28.1133680Z   Java SDK: C:\Program Files\Java\jdk1.8.0_102\
...
2016-12-02T16:30:49.9946759Z Done Building Project "C:\a\1\s\Phoneword.csproj" (PackageForAndroid target(s)).
2016-12-02T16:30:49.9976767Z 
2016-12-02T16:30:50.0006764Z Build succeeded.
2016-12-02T16:30:50.0006764Z     0 Warning(s)
2016-12-02T16:30:50.0016763Z     0 Error(s)
2016-12-02T16:30:50.0016763Z 
2016-12-02T16:30:50.0016763Z Time Elapsed 00:00:23.45
2016-12-02T16:30:50.0876774Z ##[section]Finishing: Build Xamarin.Android Project Phoneword.csproj
```

# まとめ
1. **「defaultを選択した時に、何が設定されるか」を正しく理解しましょう**
1. **AndroidプロジェクトのAPIレベルを確認しましょう**

そして、Visual Studio Team Services(VSTS)を使って、開発に注力しましょう