結論 (ここだけ読めば十分です)
- 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)で開発しておりましたが、やっぱり
lamdalambdaしたいと思いました。 - そこで、素直にJavaのバージョンをJava8に変更したところ、ビルドエラーが発生。
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を調べた所、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にアップグレード。
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より、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のバージョンアップで解決することもある模様です。