2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Java8 と Lombokの併用 @Android Studio

Last updated at Posted at 2018-11-13

結論 (ここだけ読めば十分です)

  • 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のバージョンアップで解決することもある模様です。
2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?