Androidで使用可能なJavaのバージョン一覧
導入
Androidアプリの開発をしており,Java SE 8で導入されたjava.time
パッケージによる日時処理を行おうとしたら,minSdkVersion
を26にしないといけないという警告が出ていることに気付いた。
minSdkVersion
に指定するAndroid APIに応じて使用可能なJavaのバージョンが異なることに気付いた。せっかく新しいJavaの機能を勉強しても,使えないのならば意味がない。
そこで,Android APIとJavaのバージョンの対応を調べた。
対応一覧
最初に調査結果のバージョンの対応一覧を以下に掲載する。
Date | Android version | Android API level | Java version |
---|---|---|---|
2008-09-23 | 1.0-1.1 | 01-02 | 1.4? |
2009-04-27 | 1.5-2.2 | 03-08 | 5? |
2010-12-06 | 2.3-4.3 | 09-18 | 6? |
2013-10-31 | 4.4-6.0 | 19-23 | 7 |
2016-08-22 | 7.0- | 24- | 8 |
Android 4.4が安定しているという話を聞くので,だいたいAPIレベル19のJava 7が使用可能と考えてよさそうだ。
上記の一覧表の情報の調査過程を次節から記す。
Java 8はAndroid APIレベル24以上
軽く調べたくらいでは,Androidの公式サイトではバージョンの対応の情報がまとまっていない。唯一あるのが,Java 8に関する情報 (Java 8 言語機能の使用 | Android デベロッパー | Android Developers) だ。
Android Studio 3.0.0からJava 8に対応するようになったようだ。上記の情報にある通り,Android API 24以上でJava 8が対応している。
ただし,APIレベル24でJava 8の全機能が使えるわけではない。Android API 26以上であればだいたいの機能を使えるようだ。
Java 7はAndroid APIレベル19以上
上記の公式サイトの情報からはJava 8がAndroid API 24から使用可能ということだけが分かる。必然的に,Android API 23以下はJava 7ということになる。今度はJava 6とJava 7の境界が気になる。
調べたところ「java 7 – Does Android support JDK 6 or 7 – Stack Overflow」の回答が参考になった。
元々AndroidはJava 6しか対応していなかった。2013-10-31のAndroid Studio 0.3.2のアナウンス時 (Android Studio 0.3.2 Released – Android Studio Project Site) に,API 19からJava 7のtry-with-resources
が使用可能との情報が出たようだ。
従って,APIレベル19以上でJava 7が対応している。
Java 6はAndroid APIレベル09以上,Java 5は03以上?
それでは今度はJava 5とJava 6の境界が気になる。調査を調べたところ,公式のAndroidのビルドページ「Supporting Older Versions | Android Open Source Project」を見つけた。
ここによると,Android 2.3.xから4.4.xまでJava JDK 6に対応しているとある。そのため,Android 2.3.xのAPIレベル09以上でJava 6が対応しているとみなしてよいだろう。
加えて,Android 1.5-2.2.xまでJava JDK 5に対応しているともあるので,Android 1.5のAPIレベル03以上でJava 5が対応しているのだろう。
ただ,Android 5.x-6.0までOpenJDK 7に対応しているとある。Andorid 5.xのAPIレベルは21であり,前節のAPIレベル19以上でJava 7が使用可能という情報と整合性が取れていないことが気になる。
そのため,Java 6以下のバージョンの対応については目安程度に考えることにする。
Java 4はAndroid APIレベル01以上?
「Supporting Older Versions | Android Open Source Project」にはAndroid 1.5-2.2.xでJava JDK 5が対応していると記載されていた。では,それ以前のAndroid 1.0と1.1 (APIレベル01, 02) はどうなのかというのが最後の疑問として残る。
いろいろ探してみたのだが,根拠となる情報源が見つからなかった。そのため,あくまで憶測となるがAndroidの初期リリースの1.0 (APIレベル01) 以上ではJava 4 (1.4) に対応していると推測する。
情報源
最後に今回のバージョンの調査で参照したWebサイトや,直接参照しなかったが参考になりそうだったページのリンクを掲載する。
開発ブログでリリースがアナウンスされるが,記事のラベルに規則性がなくて,リリース日の根拠ページの特定手間がかかる。そのため,Wikipediaのリリース日を参考にした。
SDKのバージョンとAndroid APIレベルが対応していることが調査中にわかった。
結論
Android APIレベルに対応するJavaのバージョンを調査した。調査の結果,Android 4.4 (APIレベル19) に対応しているJava 7をベースに考えて開発すればよいということがわかった。
Java 8の日時APIを使えないのは開発者の視点としては少々残念だ。ただし,利用者の視点としては,少しでも多くのAndroid端末で動作するほうが重要だろう。
今後はJava 7の機能でAndroidアプリを開発する。
Hi there! I’m a reader of your blog post about the versions of Java that are available for Android. I’m wondering if you could recommend a specific Java version for Android development? I’m currently using Java 8, but I’m interested
記事に書いた通り、Android 4.4に対応しているJava 7をベースすると、ほとんどの端末に対応できます。ただ、この記事公開後から年月が経ち、今ならもうJava 8ベースでもいいかもしれません。