Java8 と Lombokの併用 ＠Android Studio

# 結論 (ここだけ読めば十分です)
- Java8とLombokを同時に利用したい場合、以下の環境で動作する。
    - AndroidStudio 3.3
    - com.android.tools.build:gradle:3.3.0-beta04 **@build.gradle**
    - distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.1-all.zip **@gradle-wrapper.properties**

# java8とLombokの併用
- 当初、Javaバージョンの指定なし(=Java7)で開発しておりましたが、やっぱり~~lamda~~lambdaしたいと思いました。
- そこで、素直にJavaのバージョンをJava8に変更したところ、ビルドエラーが発生。

``` java
Caused by: java.lang.RuntimeException: 
com.android.build.api.transform.TransformException: java.lang.RuntimeException: 
java.lang.RuntimeException at com.android.builder.profile.Recorder$Block.handleException(Recorder.java:55)
```

ライブラリの依存関係が問題とアタリをつけ、
dependencies を一つずつ削除した所、原因がLombokにある事が判明しました。


```build.gradle
dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'androidx.appcompat:appcompat:1.0.2'
    implementation 'com.google.android.material:material:1.0.0-alpha1'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    implementation 'com.squareup.okhttp3:okhttp:3.11.0' // OKHttp3
    implementation group: 'org.yaml', name: 'snakeyaml', version: '1.23' // SnakeYaml
    compileOnly 'org.projectlombok:lombok:1.18.2' // Lombok ←こいつが今回の問題
    annotationProcessor 'org.projectlombok:lombok:1.18.2'
    implementation 'com.jakewharton:butterknife:8.0.0' // ButterKnife
    annotationProcessor 'com.jakewharton:butterknife-compiler:8.0.0'
    implementation 'frankiesardo:icepick:3.2.0' //Icepick
    compileOnly 'frankiesardo:icepick-processor:3.2.0'
    annotationProcessor 'frankiesardo:icepick-processor:3.2.0'
}
```

## 利用環境
- Android Studio 3.2.1
- JDK 1.8.0

## 原因について
- [Lombokのissues](https://github.com/rzwitserloot/lombok/issues/1882)を調べた所、Android Gradle 3.2系の問題であり、
Android Gradle 3.3で改修されていることが判明。

### Android Gradle 3.3をいれてみる
- しかないでしょう。(2018/11/13現在、Stableは3.2.1です)

```build.gradle
buildscript {
    dependencies {
-        classpath 'com.android.tools.build:gradle:3.2.1'
+        classpath 'com.android.tools.build:gradle:3.3.0-beta02'
}
```

```gradle-wrapper.properties
- distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip
+ distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.1-all.zip
```

### コンパイルは通るし、実行できるようになったけど。。。Rの解決ができない。

```MainActivity.java
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main); //Cannot Resolve Symbol R
    }
```

って、Rよ…お前さっき(Gradele 3.2.1)までは問題なかったやんけ。

### Android Gradle 3.4をいれてみる
よろしい。ならば更なるバージョンアップだ。
Android Gradle 3.4.0-alpha03なるモノがあるらしいのでそっちにアップグレード。
あわせてgradleを5.0-milestone-1に、android studioを[3.4](https://developer.android.com/studio/archive)にアップグレード。


```build.gradle
buildscript {
    dependencies {
-        classpath 'com.android.tools.build:gradle:3.3.0-beta02'
+        classpath 'com.android.tools.build:gradle:3.4.0-alpha03'
}
```

```gradle-wrapper.properties
- distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.1-all.zip
+ distributionUrl=https\://services.gradle.org/distributions/gradle-5.0-milestone-1-all.zip
```

Android Studio 3.4は、そもそもの問題としてLombok Pluginが未対応だった。。。うーん
~~(というよりも対応方針が明らかに間違ってます)~~

### Android Studio 3.3を入れてみる。
- [Android Studio Preview](https://developer.android.com/studio/preview/)より、Android Studio 3.3 beta4 (2018/11/12版)を導入してみる。
- Android Gradle 3.3 が beta02じゃなくて、beta04が使える。

```build.gradle
buildscript {
    dependencies {
        classpath 'com.android.tools.build:gradle:3.3.0-beta04'
}
```

```gradle-wrapper.properties
distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.1-all.zip
```

ようやく正常に動きました。。。

#まとめ
- ライブラリ導入時にエラーが起きた場合、IDEやIDE-Pluginのバージョンアップで解決することもある模様です。