Intellij IDEAでKotlinのAndroidのビルドが失敗したことの考察


はじめに

個人的な備忘録です。

前提

Android StudioではなくIntelliJ IDEAを使用
KotlinでAndroidアプリのエミュでHello,Worldまで持って行きたかった。
自分は今までwebでやってきた人間なので、なんか色々勝手がわかっていません。

状況

エミュは立ち上がるし普通にOSが起動するが、色々見ていた記事のように自分が今開発しているアプリ(Hello,worldを出力するだけのもの)がそもそもどこにもいない。

ビルド出力の欄を見てみるとJavaのコンパイルエラーが4つ。他にAndroidErrorとして

Default interface methods are only supported starting with Android N (--min-api 
24): android.view.MenuItem androidx.core.internal.view.SupportMenuItem.setContentDescription(java.lang.CharSequence)

が出ていた。
正直JavaもAndroidもど素人なので全く何を言われているかわからない。

改善策

そこでこんな記事を見つけた。
https://stackoverflow.com/questions/49512629/default-interface-methods-are-only-supported-starting-with-android-n

どうやら

app/build.gradle
android {
...
  compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
...
}

これを追加すれば良いらしい。

喜び勇んでやってみると、なんと今度はビルドまで行かずその前に同期化でエラーが出ていた。
エラーメッセージはJavaのNullPointerExceptionがどうのこうののエラーだった。(メモり忘れました、、)

原因

まぁこれ当たり前の話で、僕が追加してるJavaSDKがver12だったからなんですね。
最初の

Default interface methods are only supported starting with Android N (--min-api 
24): android.view.MenuItem androidx.core.internal.view.SupportMenuItem.setContentDescription(java.lang.CharSequence)

このエラーが出てしまった時点でJava8を使わないとダメってことらしいです。
で、Java8を入れ直してからさっきのを追加したらうまく行きました…

と言いたいところなんですけど、僕はもう一つミスをやらかしてました。

AndroidSDK

IDEA上で「cmd+;」するとプロジェクト構造が出てきてくれるんですけど、そこでAndroidなりJavaなりのSDKを追加しなければなりません。それ自体はしてたんですけど
そこのJavaSDKの設定を

こんな感じでJava8にしたり、

あとモジュールの「app」のSDKはAndroidSDKで↓

プロジェクト全体だとJavaのSDKを指定してあげないといけなかったり。↓

とにかくこんな感じで設定しないといけなかったのをできていなかったようです。

疑問

そもそもKotlinでAndroidの開発をする時にJavaのSDKが必要ってことは、Androidは最終的にJavaのシステムしか動いてくれないからJavaにコンパイルするよってことなんでしょうか。
そんでこれAndroid開発は絶対Java8のSDKとか決まってたりするんでしょうか。
だれか教えてくれると幸いです。。

まとめ

「Default interface methods are only supported starting with Android N (--min-api
24): android.view.MenuItem androidx.core.internal.view.SupportMenuItem.setContentDescription(java.lang.CharSequence)
」が出たらJava8を入れて色々切り替えてオプションつける。

結構ネットに落ちてるIntellij IDEAでKotlinでAndroidの環境構築の情報って少ない上に全体的に古くなっちゃってて、例えば今はAndroidSDKはIDEAが勝手に入れてくれますし、Kotlinで「新規プロジェクト作成」ってした時の設定や画面もちょっと変わっちゃってます。
これから開発するのにも英語のドキュメントの方が活躍しそうですね、頑張ろう。