Androidアプリ開発探求記（その２）

# はじめに
今回も[前回](https://qiita.com/beyondseeker/items/09534d05837dde0d54a0)同様、行き当たりばったりでまったりと実験しつつ、その過程を綴ってみようと思います。

# misc.xml の怪

前回は、GitHub 上に repository を作成し、そこに Android project を作ってみました。

Android Studio から生成された直後の Android project を commit したわけなのですが、その後 *misc.xml* というファイルが何やら妙な差分を生成しているようなのです。

## ◆ 勝手に書き換わるコード
いろいろ実験してみたところ、どうも *Reimport Gradle Project* と *sync* にて書き換えのピンポンが起こっているようでした。

### ☆ Android project 生成直後
*languageLevel* が ***JDK_1_7*** となっている。

```xml:misc.xml
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_7" project-jdk-name="1.8" project-jdk-type="JavaSDK">
  <output url="file://$PROJECT_DIR$/build/classes" />
</component>
```

### ☆ Reimport Gradle Project 直後
*languageLevel* が ***JDK_1_8*** に変化する。

```xml:misc.xml
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" project-jdk-name="1.8" project-jdk-type="JavaSDK">
  <output url="file://$PROJECT_DIR$/build/classes" />
</component>
```

### ☆ sync 直後
sync や Rebuild Project を実行すると、*languageLevel* が ***JDK_1_7*** に戻る。

```xml:misc.xml
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_7" project-jdk-name="1.8" project-jdk-type="JavaSDK">
  <output url="file://$PROJECT_DIR$/build/classes" />
</component>
```

## ◆ JDKバージョンを設定してみる
現状では JDK のバージョン情報を指定している個所が無いので、各々の機能が異なる default 値を採用しているという可能性はあり得そうです。ということで、以下のように build.gradle に JDK の設定を入れてみたところ、sync 時に languageLevel が JDK_1_8 になるようになりました。

```groovy
android {
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}
```

ちなみに、kotlinOptions を単独で設定しても効果はありませんでした。

```groovy
android {
    kotlinOptions {
        jvmTarget = '1.8'
    }
}
```

# 考察

## ◆ JDK バージョン
とりあえずは、JDK のバージョンを設定すればOKすればよさそうです。

しかし、複数のモジュールで異なる  JDK のバージョンを指定している場合どうなんだろうとか、そもそも *.gitignore* に含めてしまえばいいじゃんとか、いろいろと思うところはあります。

## ◆ .gitignore
おそらく *misc.xml* を *.ignore* に含めてしまっても良さそうに思えるのですが、現状では JDK のバージョンを設定ている状態での実害が確認されているわけではないので、*.gitignore* に含めるのはやめておくこととします。

# コード変更
前回 *create_new_android_project* ブランチで作業したままなので、新規ブランチを作成して JDK バージョン対応用の差分を作成したいと思います。

## ◆ pull

### ☆ pull 失敗例
*git pull* を実行した時点でエラーになります。

```
$ git fetch -p
$ git checkout develop
$ git pull
There is no tracking information for the current branch.
Please specify which branch you want to merge with.
See git-pull(1) for details.

    git pull <remote> <branch>

If you wish to set tracking information for this branch you can do so with:

    git branch --set-upstream-to=origin/<branch> develop
```

### ☆ upstream の設定
毎回 *git pull origin develop* とするのはめんどくさいので、develop の upstream を設定します。

```
$ git branch --set-upstream-to=origin/develop develop
Branch 'develop' set up to track remote branch 'develop' from 'origin'.
```

## ◆ コード追加

### ☆ feature branch の作成
```
$ git pull
$ git checkout -b set_jdk_1_8
```

### ☆ 変更差分
前回と同様、ちゃんと Pull Request を行ってコード追加を実施します。

- [変更差分(GitHub)](https://github.com/beyondseeker/chrono0015/pull/2/commits/c7f13ab0d28b7f26f046d8c1ff03246df7219708)

# branchの後掃除
Pull Request を merge した後に、以下のように後掃除します。

```
$ git fetch -p
$ git checkout develop
$ git pull
$ git branch -d create_new_android_project # 前回消し忘れてた local branch
$ git branch -d set_jdk_1_8                # 今回削除すべきな local branch
```

お掃除後の branch の状況。
※ fetch に -p を付けないと、*remotes/origin/set_jdk_1_8* のようなリモートへの参照が残り続けます。

```
$ git branch -a
* develop
  master
  remotes/origin/HEAD -> origin/master
  remotes/origin/develop
  remotes/origin/master
```

# おわりに
ということで、今回は JDK のバージョンを設定してみました。

次回も行き当たりばったりで、まったりと実験しつつ、その過程を綴ってみようと思います。