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の設定を

スクリーンショット 2019-07-12 22.02.39.png

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

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

スクリーンショット 2019-07-12 22.06.39.png

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

スクリーンショット 2019-07-12 22.08.04.png

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


疑問

そもそも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で「新規プロジェクト作成」ってした時の設定や画面もちょっと変わっちゃってます。

これから開発するのにも英語のドキュメントの方が活躍しそうですね、頑張ろう。