Android開発にJava 8を使用することは可能ですか?


609

Webを検索すると、Java 8がAndroid開発でサポートされているかどうかは不明です。

Java 8をダウンロード/セットアップする前に、Java 8がAndroid開発でサポートされている、またはサポートされていないことを示す「公式」ドキュメントを参照してください。


21
公式声明についてはわかりませんが、Java 8(edit:JDK 8)をAndroid SDKで問題なく使用できます。Windows 8.1 64ビットはこちら。
Hoang Huynh 2014


2
@HoangHuynh Android開発にはJDK 6以上を使用できます。ただし、コンパイルはJavaバージョン6(およびKitKatの場合は7)をサポートします。OPの意味は、Javaバージョン(JDKではない)にも
当てはまる

13
Java 8はAndroid Nで正式に
Jay

回答:


189

Java 8

Androidは、すべてのJava 7言語機能と、プラットフォームバージョンによって異なるJava 8言語機能のサブセットをサポートしています。

サポートされているJava 8の機能を確認するには

Java 8言語機能を使用する

Java 8言語機能のサポートを現在のjavacおよびdxツールセットに直接追加し、Jackツールチェーンを廃止することを決定しました。この新しい方向性があれば、Javaクラスファイル形式に依存する既存のツールとプラグインは引き続き機能します。今後、Java 8言語機能はAndroidビルドシステムでネイティブにサポートされます。私たちはこれを今後数週間でAndroid Studioの一部としてリリースすることを目指しており、この決定を早期に共有したいと考えています。

AndroidでのJava 8言語機能サポートの将来

Eclipseユーザー:

Eclipseを好む古い開発者の場合、GoogleはEclipse Android開発者ツールのサポートを停止します

Java 8 JDKをインストールした場合は、試してみてください。問題が発生した場合は、ウィンドウメニュー→ 設定JavaコンパイラからEclipseでコンパイラを1.6に設定してみてください。Java 7も機能します。

Eclipse設定-> Java->コンパイラ

Android 5.0以降を対象とする場合は、Java 7以降が必要です。

複数のJDKをインストールして試してください。


2
Java 8はバイトコードの動作を変更しましたか?そうでない場合は、理論上、コンパイルできる限り、どのバージョンのJavaを使用しても問題ありません。
Ben Leggiero、2015年

6
正しい質問は、AndroidアプリをビルドするためにJava 7に存在しないJava 8の新機能を使用する場合はどうなりますか?安全のために、公式の指示に従ってください。
エンジニアリング サマーT

12
BenC.R.Leggiero @ Javaの8には新しいバイトコードありませんが、説明書の意味と構造が変更されたstackoverflow.com/questions/28228450/...の stackoverflow.com/questions/16143684/...
phuclv

17
回答に「Update N」を投稿しないでください。最新の情報に書き換えます。そうでなければ、SOは数年後には、取り替えたフォーラムと同じくらい情報を入手することが難しくなります。
Aleksandr Dubinsky 2016年

1
回答は更新する必要があります。Java 8は、Android Studio 3.0およびGradle Plugin 3.0以降でサポートされます。
ЮрійМазуревич

350

UPDATE 2017/11/04-Android Studio 3.0はJava 8をネイティブでサポートする gradle-retrolambdaようになりました。https://developer.android.com/studio/write/java8-support.htmlを参照してください

上記のリンクには、を使用してgradle-retrolambdaいる場合の移行手順も含まれています。以下の元の答え:


AndroidはJava 8をサポートしていません。Java7までしかサポートしていません(キットカットを使用している場合)。それでも、invokedynamicはなく、新しい構文シュガーだけがあります。

AndroidのJava 8の主要機能の1つであるラムダを使用する場合は、gradle-retrolambaを使用できます。これは、Java 8バイトコードをJava 6/7に戻すツールであるretrolambdaを統合するGradleビルド依存関係です。基本的に、Android Studioでコンパイラを設定してJava 8バイトコードをコンパイルし、ラムダを許可すると、Java 6/7バイトコードに変換され、次にdalvikバイトコードに変換されます。公式サポートの代わりにAndroidでJDK 8の機能を試してみたい場合のハックです。


13
それを機能させるのは少し苦労しましたが、私が実際に正しい指示に従えば、それはうまく機能しました。Eclipseユーザーへの注意:Eclipseはこれではうまく機能しません。AndroidStudioに移行することをお勧めします(Eclipseが欠落しますが、それは今のところ必要です)
Simon Forsberg

2
Nitpick:Java 7のマルチキャッチ句はAndroidではサポートされていません。
csvan 2014年

11
マルチキャッチはサポートされていますが、AndroidでサポートされていないJDK7機能のみがリソースの試用です
MatthieuHarlé2014

12
Androidのすべてのバージョンで動作するJava 7。1つの例外:try-with-resourcesキットカット以降のみ機能します。
ドミトリーザイツェフ2014

2
@SimonAndréForsberg(注意:恥知らずなプラグイン!)-Java 8ストリームAPIをサポートしない場合は、sourceforge.net / projects / streamsupportにある私のライブラリを使用できます。これは、Androidのサポートに明示的に対応しています。
Stefan Zobel、2015年

99

確かに、gradle-retrolambagradleビルド依存関係を使用して、Android開発にJava 8を使用できます。

以下は、Android開発用のラムダ式を実行するために最近フォローした完全なガイドです。このガイドの元のソースは最後に記載されています。

このガイドでは、特にEclipse IDEを対象として、Java 8の機能をAndroid開発ツールに組み込む方法を示します 。ただし、このガイド全体で説明する手順は、Googleの新しい蜂起開発環境であるAndroid Studioにも適用される場合があります。これは、JetBrainsによる人気のIntelliJ Idea IDEのコミ​​ュニティエディションに基づいており、このガイドが作成される少し前の2014年7月上旬に、Googleによって「ベータ」バージョンに最近アップグレードされました。Eclipseは少なくともしばらくの間は卓越した開発環境のままであり、ほとんどのAndroidプロジェクトがEclipseを使用して開発されているという事実を考えると、ラムダ式などの新しいJava 8機能をADTに導入する方法は、開発者にとって非常に役立つようです。

Android Developmentは、2011年に終了したApache Harmony Projectと呼ばれるカスタムJava実装に基づいています。AndroidDevelopmentで最もよく使用されるJava構文はJava 6(v1.6)であり、Java 7(v1.7)も部分的にサポートされていますKitKatエディション(Android 4.4。+)。したがって、ラムダ式などのJava 8機能は、開発ツールに微調整を適用しない限り、Androidアプリ開発で直接使用できません。幸いなことに、これらの構成要素は基本的にいくつかの「構文糖」の拡張機能であり、開発者に「匿名クラス」などの欠点を与え、Java 6またはJava 7クラスに変換できます。

Java 8ソースコードを下位のJavaバージョンに変換する最近のアプローチはRetroLambdaと呼ばれています。このライブラリを使用すると、開発者はJava 7以下でラムダ式を使用してJava 8コードを実行できます。残念ながら、ラムダ式以外のJava 8機能は現在のところRetroLambdaでサポートされていませんが、ラムダ式の概念はJava 8プラットフォームで最大の飛躍であり、Android開発者にとってはとにかく素晴らしいツールです。

このライブラリの詳細は、GitHubページにあります。

https://github.com/orfjackal/retrolambda#getting-started

また、別の開発者が作成したRetroLambda用のGradleプラグインを使用すると、GradleベースのビルドをJavaまたはAndroidプロジェクトに実装できます。ただし、開発者はこのプラグインをAndroid Studio環境に統合することについてのみ言及しています。詳細は、GitHubページにあります。

https://github.com/evant/gradle-retrolambda

Eclipseベースの開発環境内でこれらのインフラストラクチャを使用することは、直接アプローチすることはできませんが、実行可能であり、このガイド全体を通して示されます。

準備

このガイドは、読者がAndroid開発の基本的な知識を持っていることを前提とし、最近のADTバージョン23.0.2にはレイアウトフォルダーの作成などの問題があるように見えるため、ADTバージョン22.6.2に基づいています。この問題の詳細は、次のリンクにあります。

http://code.google.com/p/android/issues/detail?id=72591

このガイドの手順は、Windows 8.1、64ビット開発マシン用ですが、他のプラットフォームに簡単に適合させることができます。新しいビルドシステムGradleはビルド/クリーンプロセスに使用され、そのインストール手順も提供されます。また、両方JDK 8JDK 7開発マシン上で共存しなければなりません。これらをインストールするには、以下の手順に従う必要があります。

  • JDK 8早期アクセスプレビューページhttp://jdk8.java.netに移動します。
  • JDK 8u20をダウンロードしてインストールします。JRE 8のインストールは不要であり、スキップできます
  • JDK 7の最新の安定リリースページhttp://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.htmlにアクセスします
  • JDK 7u65をダウンロードしてインストールします。JRE 7のインストールは再び不要であり、スキップできます
  • JDK 8ホームフォルダーとJDK 8 binフォルダーを%PATH%変数に追加する
  • JAVA_HOMEJDK 8ホームフォルダーのパスの値で新しい環境変数を作成します。
  • JAVA8_HOMEJDK 8ホームフォルダーのパスの値を使用して、新しい環境変数を再度作成します。
  • JAVA7_HOMEJDK 7ホームフォルダーのパスの値で新しい環境変数を作成します。
  • 端末ウィンドウを開いてjava -versionコマンドを実行し、Java 8が稼働していることを確認します
  • javac -version同じウィンドウでコマンドを実行し、JDK 8 Javaコンパイラも稼働していることを確認します

ここで、ADT-22.6.2を次のリンクからダウンロードする必要があります。

http://dl.google.com/android/adt/22.6.2/adt-bundle-windows-x86_64-20140321.zip

  • ADTをダウンロードし、そのコンテンツをフォルダーに解凍します。例: D:\adt
  • ANDROID_HOMEADTインストールフォルダーのパスの値で呼び出される新しい環境変数を定義します。D:\adt\sdk
  • あなたの追加Andoid SDK Platform ToolsAndoid SDK Toolsフォルダ、例えばD:\adt\sdk\toolsそしてD:\adt\sdk\platform-toolsあなたに、%PATH%変数
  • 必要に応じて、Eclipse IDEへのショートカットを作成します。ADTインストールフォルダーの下にあります。D:\adt\eclipse
  • Eclipse IDEを実行し、ワークスペースを作成します。 D:\adt\workspace
  • Android SDK Managerツールバーにあるボタンをクリックしてください
  • 選択Android SDK Build tools Rev. 19.1してAndroid Support Libraryのみ。その他すべての選択を解除し、これら2つのパッケージをインストールします。

すべてがうまくいけば、ADTは稼働し​​ます。

次のツールのインストールも強く推奨されます。

  • Eclipse Kepler Java 8サポート:Eclipseに新しいJava 8構文拡張機能を認識させred dots、Javaコードエディターの煩わしさを解消します。Help -> Install New SoftwareEclipse を介してインストールされる場合があります。フィールドにhttp://download.eclipse.org/eclipse/updates/4.3-P-builds/と入力し、Work withインストールを続行します。

  • Nodeclipse / Enide Gradle:主にGroovy言語のキーワードを強調するために使用されます。GroovyはGradleビルドスクリプトのDSLとして使用されます。このプラグインはからインストールできますEclipse Marketplace。ただし、ADT-22.6.2内のEclipseにはが付属していませんEclipse Marketplace Client。したがって、最初にEclipse Eclipse Marketplace ClientInstall New Softwareツールを使用してインストールする必要があります。Work withフィールドにhttp //:download.eclipse.org/mpc/kepler/と入力し、インストールを続行します。をインストールした後Eclipse Marketplace Client、で検索しNodeclipse/Enide GradleEclipse Marketplace Clientインストールできます。

  • Genymotion仮想デバイス:Android Virtual DeviceADTに付属するデフォルトの優れた代替品です。AVDは煩わしく煩わしく、理由もなくクラッシュし続けます。Genymotionを使用CyanogenModすると、Oracle VirtualBoxで実行されるイメージを使用してAndroid VDを準備できます。シングルユーザーライセンスは無料で、http://www.genymotion.comからダウンロードできます。ログインのみが必要で、Eclipseに統合することもできます。詳細は以下にあります:

https://cloud.genymotion.com/page/doc/#collapse8

以下は、Android 4.3ベースのCyanogenMod仮想デバイスのスクリーンショットです。

ここに画像の説明を入力してください

これは、x86またはx64ベースのパーソナルコンピューターで実行される完全なAndroidデバイスと見なすことができます。Google PlayStoreこの仮想デバイスのようにGoogleサービスを使用するには、使用gappsするAndroidバージョンのイメージをデバイスにフラッシュする必要があります。gappsデバイスの適切なイメージは、CyanogenMod Webサイトからダウンロードできます。

http://wiki.cyanogenmod.org/w/Google_Apps

GradleのインストールはAndroid SDK自体によっても提供されるため、オプションですが、個別にインストールすることを強くお勧めします。これのインストールは、次の手順に従って行うことができます。

  • GradleのWebサイトにアクセスしますhttp : //www.gradle.org/

  • クリック Downloads

  • 以下の下では、Previous Releasesバージョン1.10を選択して、ダウンロードgradle-1.10-all.zipまたはgradle-1.10-bin.zipのいずれか
  • フォルダーにコンテンツを解凍します。 D:\adt\gradle
  • GRADLE_HOMEGradleインストールフォルダーのパスの値で呼び出される新しい環境変数を定義します。D:\adt\gradle
  • 例えば、あなたのGradleバイナリフォルダを追加しD:\adt\gradle\bin、あなたに、%PATH%変数
  • ターミナルウィンドウを開いてgradle -vコマンドを実行し、コマンドが実行されていることを確認します。この時点まで正常に起動している場合は、Java 8機能を使用して最初のAndroidアプリを作成する準備ができていることを意味します。

デモアプリ

前のセクションで説明したツールの使用法を示す簡単なアプリを作成します。以下の手順に従うだけで、Android開発者ツールでラムダ式を使用する方法を理解できます。

  • Eclipse IDEを実行し、次を選択して新しいAndroidアプリを作成します。 File -> New -> Other -> Android -> Android Application Project
  • 次のように表示されるフォームに入力します。

ここに画像の説明を入力してください

  • 単にクリックしNext、次のフォーム上のボタンをクリックし、Finish最後の上のボタンを。ADTがプロジェクトのロードを完了するまで待ちます
  • プロジェクトを右クリックして選択しNew -> Folder、名前を付けますbuilders
  • gen (Generated Java Files)フォルダを右クリックして削除します。Gradleはすぐに同じファイルをs build path. The生成し、デフォルトのAntビルダーによって作成されたプロジェクトのgen`フォルダーにそれらを追加します。そのフォルダーの下のアーティファクトは廃止されます。
  • buildersフォルダの下に次のバッチファイルを作成します。

    • gradle_build.cmd
    • gradle_post_build.cmd
    • gradle_clean.cmd
  • これらのバッチファイルに次のように入力します。

gradle_build.cmd:

ここに画像の説明を入力してください

gradle_post_build.cmd:

ここに画像の説明を入力してください

gradle_clean.cmd:

ここに画像の説明を入力してください

  • Project -> Build Automaticallyメニューオプションの選択を解除
  • プロジェクトを右クリックし、Properties -> BuildersADTによって提供されるすべてのデフォルトビルダーを選択および選択解除します。
  • New同じウィンドウでボタンをクリックし、選択ProgramしてクリックしますOK
  • 新しいビルダー設定ウィンドウが表示されます。次のようにタブに入力します。

Main 新しいビルダー設定のタブ

ここに画像の説明を入力してください

Refresh 新しいビルダー設定のタブ

ここに画像の説明を入力してください

Environment 新しいビルダー設定のタブ

ここに画像の説明を入力してください

Build Options 新しいビルダー設定のタブ

ここに画像の説明を入力してください

  • プログラムとしてGradle_Post_Build使用する2番目のビルダーを作成しますgradle_post_build.cmd。このビルダーの他のすべての設定は、以前に作成したビルダーとまったく同じでなければなりません。このビルダーは、ビルドプロセスで作成されたアーティファクトをbinフォルダーにコピーします。
  • プログラムとしてGradle_Cleaner使用するという3番目のビルダーを作成しますgradle_clean.cmdRun the builder最終タブの設定のみをとして設定する必要がありますDuring a Clean。このビルダーの他のすべての設定は、最初のビルダーとまったく同じでなければなりません。このビルダーは、名前が示すように、ビルドプロセスによって作成されたアーティファクトをクリーニングする責任があります。

HelloLambdaプロジェクトの新しいビルダー

ここに画像の説明を入力してください

  • プロジェクトを右クリックして選択します Export
  • 選択Android -> Generate Gradle Build FilesしてクリックNext
  • 次のウィンドウでプロジェクトを選択して、 Finish
  • プロジェクトのルートフォルダに移動し、ファイルgradlewとを削除しますgradlew.batgradleフォルダも削除
  • Eclipseに戻り、Project -> Cleanメニューオプションを選択します。次のように表示されるフォームに入力します。

Clean Project

ここに画像の説明を入力してください

  • クリックしてOK、クリーニングプロセスが完了するまで待ちます
  • クラスのsetContentViewfunction の呼び出しの直後に、以下に示すJavaコードスニペットを追加しますMainActivity

ここに画像の説明を入力してください

  • 次のように、build.gradleファイルの先頭をsourceCompatibilityセクションまで変更します。

ここに画像の説明を入力してください

  • プロジェクトを右クリックしてProperties -> Java Compilerオプションを選択し、すべての準拠レベルをJava 8に設定します。これにより、Eclipseはラムダ式などの新しいJava 8構成を認識します。
  • No通知ウィンドウをクリックします
  • プロジェクトを右クリックして、を選択しますBuild project。Eclipseがプロジェクトの構築を開始します。

ビルドプロセス ここに画像の説明を入力してください

  • プロジェクトを右クリックして、に移動しProperties -> Java Build Pathます。次のフォルダーをビルドパスに追加します(下の画像にも表示されています)。

    • build\source\buildConfig\debug
    • build\source\r\debug

ここに画像の説明を入力してください

これで、Eclipseはとファイルを認識できるようにR.javaなり、プロジェクトのリソースファイルに関連するエラーを示すものbuildConfig.javaは表示されなくなりますred dots

  • Run Configurationプロジェクトを右クリックしてを選択し、Androidターゲットプラットフォーム用に新しいを作成しますRun As -> Run Configurations。たとえば、このデモアプリケーションは、Genymotion VDで次のように表示されます。

HelloLambdaアプリケーション

ここに画像の説明を入力してください

あなたには観察することができるLogCat簡単なラムダ式とコードスニペットが正しく動作していること窓

ここに画像の説明を入力してください

出典:Android開発者ツールでのJava 8 Lambda式の使用


しかし、Androidデバッガーを使用してこのコードをデバッグできますか?スタック/行番号は互換性がないと思います。AndroidでJava 8を使用して開発する場合の主な欠点のようです。
ゾンビ

2
@Zombiesはい、まだデバッグできます。すべてうまくいきます。
Korniltsev Anatoly

42

新しいリンクについては、このリンクをたどってください。Java 8言語機能を使用する

古い答え

とおりAndroidのNプレビューリリースAndroidのサポート制限の機能のJava 8は、参照するJava 8言語機能を

これらの機能の使用を開始するには、Android Studio 2.1 およびAndroid N Preview SDK をダウンロードしてセットアップする必要があります。これには、必要なJackツールチェーンと更新されたAndroid Plugin for Gradleが含まれています。Android NプレビューSDKをまだインストールしていない場合は、Android N 用に開発するためのセットアップを参照してください。

サポートされているJava 8言語機能とAPI

Androidは現在、すべてのJava 8言語機能をサポートしているわけではありません。ただし、Android Nプレビューをターゲットとするアプリを開発する場合は、次の機能を利用できます。

デフォルトおよび静的インターフェースメソッド

ラムダ式(APIレベル23以下でも使用可能)

繰り返し可能な注釈

メソッド参照(APIレベル23以下でも利用可能)

Androidがサポートする追加のJava 8機能がいくつかあります。Java8言語機能から詳細を確認できます

更新

注:Android Nは、ラムダ式の実装を匿名クラスに基づいています。このアプローチにより、以前のバージョンのAndroidで下位互換性があり、実行可能になります。以前のバージョンでラムダ式をテストするには、必ずbuild.gradleファイルに移動し、compileSdkVersionおよびtargetSdkVersionを23以下に設定してください。

アップデート2

Android Studio 3.0の安定版リリースで、Java 8ライブラリとJava 8言語機能がサポートされました(Jackコンパイラーなし)。


理解できませんでした。に関する要件はありますminSdkVersionか?
WindRider 2016年

ラムダ式のみが下位互換性があると思います。他のJava 8機能はN(または将来のバージョン)でのみ機能します。私はこれをテストしていませんが、これは私がAndroidドキュメントから理解していることです。したがって、Java 8機能の場合、ラムダ式以外のminSdkVersionはNです

Nがダッシュボードのリーダーになるまであと数年。:(
WindRider 2016年

残念ながらそうです。またはAndroidがなんとかしてラムダのような下位互換性を提供するまで

1
@WindRiderでは、minSdkVersion 15以降を使用できます。現在、Lambdasを使用したAndroidプロジェクトでminSdkVersion 17を使用しており、すべてが機能しています。
YYamil 2017

22

はい、AndroidはJava 8をサポートしています(24.1.17)

今では可能です

ただし、デバイスのromをJava 1.8で実行し、「jackOptions」を有効にして実行する必要があります。ジャックは、Java 8を実行する新しいAndroidコンパイラの名前です

https://developer.android.com/guide/platform/j8-jack.html

これらの行をbuild_gradleに追加します

    android {
  ...
  defaultConfig {
    ...
    jackOptions {
      enabled true
    }
  }
  compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
  }
}

Java 8はAndroid Studio 2.0の実行中のJavaエンジンのようですが、チェックした後もJava 8の構文を受け入れず、Android Studioからコンパイラを選択することはできません。ただし、Androidクライアントで関数型プログラミングメカニズムが必要な場合は、scalaプラグインを使用できます。

ここに画像の説明を入力してください


1
Scalaはapkでパッケージ化するのが非常に重い
TechSpellBound

制限された構成オプションを更新したため、更新されたAndroid Studio 2.0については、このソリューションを参照してください。
Gaurav Sharma

19

Androidは、Java 6から分岐するJavaを使用します。

AndroidのSDKのバージョン19の時点では、Java 7の機能を使用することができ、これを行うことによって。Java 8(まだ)の完全なサポートはありません。


1
あなたは命の恩人です。同様の方法でtry-with-resourcesを実装するものがあるかどうかを知っていますか?
ガレット2014年

@galetsにはまだ方法はありませんが、将来的にはGoogleで追加することになるでしょう。追加情報は、以下を参照してください。stackoverflow.com/questions/16921337/...
chaqke

16

ネイティブJava 8がAndroidに登場!最終的に!

各モジュールのbuild.gradleファイルからRetrolambdaプラグインとretrolambdaブロックを削除します。

Jackを無効にしてデフォルトのツールチェーンに切り替えるには、モジュールのbuild.gradleファイルからjackOptionsブロックを削除するだけです

サポートされているJava 8言語機能の使用を開始するには、Androidプラグインを3.0.0(またはそれ以上)に更新します

Android Studio 3.0以降、Java 8言語機能がAndroidでネイティブにサポートされるようになりました。

  • ラムダ式
  • メソッド参照
  • 型注釈(現在、型注釈情報は実行時には利用できず、コンパイル時にのみ利用できます);
  • アノテーションの繰り返し
  • デフォルトおよび静的インターフェースメソッド(APIレベル24以上では、インスタント実行はサポートされません);

また、最小APIレベル24から、次のJava 8 APIを使用できます。

  • java.util.stream
  • java.util.function
  • java.lang.FunctionalInterface
  • java.lang.annotation.Repeatable
  • java.lang.reflect.AnnotatedElement.getAnnotationsByType(Class)
  • java.lang.reflect.Method.isDefault()

次の行をアプリケーションモジュールのbuild.gradleに追加して、プロジェクトに言語レベルを通知します。

 android {
   compileOptions {
       sourceCompatibility JavaVersion.VERSION_1_8
       targetCompatibility JavaVersion.VERSION_1_8
   }

gradle.propertiesファイルに以下を追加して、Java 8言語機能のサポートを無効にします。

android.enableDesugar=false

完了です!これで、ネイティブjava8を使用できます。


14

Android Nでは、Android 8が正式にJava 8をサポートしています。

機能の発表はこちら、Java 8言語の発表は次のとおりです。

改善されたJava 8言語サポート -Java 8言語機能をAndroidに提供できることを嬉しく思います。AndroidのJackコンパイラーを使用すると、GingerbreadまでのAndroidバージョンでラムダなどを含む多くの一般的なJava 8言語機能を使用できるようになります。新機能により、定型コードを削減できます。たとえば、ラムダは、イベントリスナーを提供するときに匿名の内部クラスを置き換えることができます。一部のJava 8言語機能(デフォルトおよび静的メソッド、ストリーム、関数インターフェースなど)も、N以降で使用できるようになりました。Jackを使用することで、下位互換性を維持しながら、Java言語をより厳密に追跡できることを楽しみにしています。


この時点ではまだかなりバグが多いです。たとえば、Instant Runはラムダで機能しません。ラムダ関数内のコードを変更しても、変更は反映されません。
-adriendenat

12

以下を使用してJava 8を使用できます。

  1. build.gradle(プロジェクト:myProject)に以下を追加します

    classpath 'me.tatarka:gradle-retrolambda:x.x.x' //x.x.x is recent version
  2. build.gradle(モジュール:myModule)に以下を追加します

    apply plugin: 'me.tatarka.retrolambda'
    
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

1
レトロなラムダを推奨した最初の回答と何が違うのですか?
Maarten Bodewes 2016年

2
@MaartenBodewesそれは受け入れられた答えよりもはるかに単純になったと指摘したようです。medium.com/android-news/…を
TechSpellBound

使用しないでください。プラグインにバグがある
Akshay Mukadam

11

2020年1月17日更新

Android Studio 4.0は、アプリに最低限のAPIレベルを必要とせずに、desugaringと呼ばれる手法を使用して、いくつかのJava 8言語APIを使用するためのサポートを含みます:https : //developer.android.com/studio/preview/features#j8-desugar

このリリースでは、次のAPIセットがサポートされています。

  • 順次ストリーム(java.util.stream
  • のサブセット java.time
  • java.util.function
  • への最近の追加 java.util.{Map,Collection,Comparator}
  • オプション(java.util.Optionaljava.util.OptionalIntおよびjava.util.OptionalDouble)および上記のAPIで役立つその他のいくつかの新しいクラス
  • java.util.concurrent.atomicAtomicIntegerAtomicLongおよびの新しいメソッドAtomicReference)へのいくつかの追加
  • ConcurrentHashMap (Android 5.0のバグ修正あり)

これらの言語APIをサポートするために、D8は、不足しているAPIの実装を含み、それをアプリに含める個別のライブラリDEXファイルをコンパイルします。脱糖プロセスは、実行時にこのライブラリを代わりに使用するようにアプリのコードを書き換えます。

これらの言語APIのサポートを有効にするには、モジュールのbuild.gradleファイルに以下を含めます。

android {
  defaultConfig {
    // Required when setting minSdkVersion to 20 or lower
    multiDexEnabled true
  }

  compileOptions {
    // Flag to enable support for the new language APIs
    coreLibraryDesugaringEnabled true
    // Sets Java compatibility to Java 8
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
  }
}

dependencies {
  coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.0.4'
}

2017年の元の投稿

Android Studio 3.0は、次のJava 8言語機能の一部に対する組み込みサポートを提供し始めました。

  • ラムダ式
  • メソッド参照
  • 型注釈(情報はコンパイル時に利用できますが、実行時には利用できません)
  • アノテーションの繰り返し
  • デフォルトおよび静的インターフェースメソッド

また、APIレベル24以降、次のJava 8 APIが利用可能です。

  • java.util.stream
  • java.util.function
  • java.lang.FunctionalInterface
  • java.lang.annotation.Repeatable
  • java.lang.reflect.AnnotatedElement.getAnnotationsByType(Class)
  • java.lang.reflect.Method.isDefault()

さらに、try-with-resourcesサポートはすべてのAndroid APIレベルに拡張されました。

さらに多くのJava 8機能が将来追加されることが約束されています。

サポートされているJava 8言語機能の使用を開始するには、Androidプラグインを3.0.0-alpha1(またはそれ以上)に更新し、モジュールのbuild.gradleファイルに以下を追加します。

android {
  ...
  compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
  }
}

詳細については、https
//developer.android.com/studio/write/java8-support.htmlをご覧ください。


私が得ていないのは、android studioがjava8サポートと何をしているのですか(intellijは以前にそれを持っていなかったのですか?)ターミナルでgradleを使用してプロジェクトをコンパイルすると、コンパイルできないということですか?
cesarferreira

1
@cesarferreira Androidプラグインを最新バージョンに更新する必要があります(現時点では2.4.0-alpha6)。回答の引用ブロックを確認してください。
Idolon

それをモジュール(アプリではなく)に追加することが難点でした。アプリモジュールに追加しても効果がありませんでした。
Surekha

6

簡単な方法

AndroidプロジェクトのJava 1.8サポートを有効にできます。

  • プロジェクト構造を開く

    • どちらかを押して Ctrl + Shift + Alt + S

    • または File > Project Structure

  • 図のように、[プロジェクト構造]ダイアログで[ ソース互換性]と[ ターゲット互換性]1.8に更新します([ファイル]> [プロジェクト構造]をクリックします)。

画像

またはgradleを使用できます

 android {
   compileOptions {
       sourceCompatibility JavaVersion.VERSION_1_8
       targetCompatibility JavaVersion.VERSION_1_8
   }

プロジェクトを同期します。以上です!

注: Java 1.8のサポートは、Android Studio 3.0.0以降で有効にできます。詳細については、ドキュメントを参照してください。


このソリューションは、私の仕事:stackoverflow.com/a/55467237/4698320
デンマーク・シャルマ

5

ほぼ2年前にこの質問をしたとき、答えは「公式に」いいえでしたが、ekcr1の答えで指摘されているように、retrolambaを使用すれば、最も期待される機能(ラムダ)の1つを機能させることができます。当時はAndroid Studioが「プレビュー」モードだったので、私はまだ日食を使用していたので、この道をたどることはありませんでした。

今日、私は「公式」の答えはまだノーだと思います。レトロランバはまだ良い方法のように思えますが、やや「非公式」の道を進んで進んで行こうとする人のための別のオプション、すなわちKotlinがあります。

今日、Kotlinは1.0.0に達しました。Kotlinに慣れていない人のために、より多くの情報はここにある彼らのウェブサイトで見つけることができます:

https://kotlinlang.org

または、Jake Whartonによるトークのutubeビデオをご覧ください

https://www.youtube.com/watch?v=A2LukgT2mKc


4

最新ニュース:

Googleは、Android NとAndroid Studio 2.1以降で、プラットフォームがJava 8をサポートすることを発表しました。また、スタジオ2.1の安定バージョンもリリースされました。

最後にラムダ式を使用できます。forループにリストフィルターはもうありません。Horeeey。


4

このconfig build.gradleを追加し、gradleを同期します。

android {
    ...
    defaultConfig {
        ...
        jackOptions {
            enabled true
        }
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
        // or
        //sourceCompatibility 1.8
        //targetCompatibility 1.8
    }
}

1
これは、Java 8 for Androidプロジェクトのサポートを追加する正しい方法です。欠点は、ジャックが有効になっていると、インスタントランが現在実行されないことです。
Ionut Negru 2016年

完全なサポートはしないでください。
Ahmad Aghazadeh 2016年

2

Googleは、Java 8がAndroidでネイティブにサポートされ、Jackツールチェーンが非推奨になることを発表しました:

Java 8言語機能のサポートを現在のjavacおよびdxツールセットに直接追加し、Jackツールチェーンを廃止することを決定しました。この新しい方向性があれば、Javaクラスファイル形式に依存する既存のツールとプラグインは引き続き機能します。今後、Java 8言語機能はAndroidビルドシステムでネイティブにサポートされます。私たちはこれを今後数週間でAndroid Studioの一部としてリリースすることを目指しており、この決定を早期に共有したいと考えています。

詳細はこちら:https : //android-developers.googleblog.com/2017/03/future-of-java-8-language-feature.html


2

はい。まもなくJava 8を使用します!

Java 8言語機能のサポートを現在のjavacおよびdxツールセットに直接追加し、Jackツールチェーンを廃止することを決定しました。この新しい方向性があれば、Javaクラスファイル形式に依存する既存のツールとプラグインは引き続き機能します。今後、Java 8言語機能はAndroidビルドシステムでネイティブにサポートされます。私たちはこれを今後数週間でAndroid Studioの一部としてリリースすることを目指しており、この決定を早期に共有したいと考えています。

https://android-developers.googleblog.com/2017/03/future-of-java-8-language-feature.html


2

この行をモジュールlvlビルドgradelに追加しました

compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 }


1

私が書いた同様の答えをする同様の質問スタックオーバーフローのが、ここではその答えの一部です。

Android Studio 2.1:

Android Studio(2.1)の新しいバージョンは、Java 8機能をサポートしています。以下は、Android Developers blogspot投稿からの抜粋です。

... Android Studio 2.1リリースには、新しいJackコンパイラのサポートとJava 8のサポートが含まれています

...

N Developer Previewで開発するときにJava 8言語機能を使用するには、Jackコンパイラーを使用する必要があります。新規プロジェクトウィザード[ファイル→新規→プロジェクト]は、Nをターゲットとするプロジェクトの正しい構成を生成します。


Android Studio 2.1より前:

AndroidはまだJava 1.8をサポートしていません(1.7までしかサポートしていません)。そのため、ラムダなどのJava 8機能を使用できません。

この回答では、Android Studioの互換性について詳しく説明しています。それは述べています:

AndroidのJava 8の主要機能の1つであるラムダを使用する場合は、gradle-retrolambaを使用できます。

の使用について詳しく知りたい場合はgradle-retrolambdaこの回答で詳細を説明します。


こんにちはFarbod!私はAndroidStudio 2.2.2を使用しています"SDK Location"(これはMac FWIWにあります)"/Users/me/Library/Android/sdk" に、Java8を使用していますか-Java8の使用方法は?ありがとう!
Fattie、2016

1

もう少し最新のものを探している人のために、更新された回答を投稿すると思いました。

現在、AndroidとAndroid StudioはJava 8機能のサブセットをサポートしています。ウェブサイトにあるAndroidのドキュメントによると、Googleは次のように述べています。

Java 8言語機能のサポートには、Jackと呼ばれる新しいコンパイラが必要です。Jackは、Android Studio 2.1以降でのみサポートされています。したがって、Java 8言語機能を使用する場合は、Android Studio 2.1を使用してアプリを構築する必要があります。

Android Studioがすでにインストールされている場合は、[ヘルプ]> [アップデートの確認]をクリックして最新バージョンにアップデートしてください(Macでは、Android Studio>アップデートの確認)。ワークステーションにIDEがまだインストールされていない場合は、こちらからAndroid Studioをダウンロードしてください。

サポートされているJava 8言語機能とAPI

Androidは、すべてのJava 8言語機能をサポートしているわけではありません。ただし、Android 7.0(APIレベル24)を対象とするアプリを開発する場合は、次の機能を使用できます。

  • デフォルトおよび静的インターフェースメソッドLambda式(APIレベル23以下でも使用可能)
  • 繰り返し可能な注釈
  • メソッド参照(APIレベル23以下でも利用可能)
  • タイプ注釈(APIレベル23以下でも使用可能)

さらに、次のJava 8言語APIも使用できます。

リフレクションおよび言語関連のAPI:

  • java.lang.FunctionalInterface
  • java.lang.annotation.Repeatable
  • java.lang.reflect.Method.isDefault()およびAnnotatedElement.getAnnotationsByType(Class)などの繰り返し可能なアノテーションに関連付けられたリフレクションAPI

ユーティリティAPI:

  • java.util.function
  • java.util.stream

新しいJava 8言語機能を使用するには、Jackツールチェーンも使用する必要があります。この新しいAndroidツールチェーンは、Java言語ソースをAndroidで読み取り可能なDEXバイトコードにコンパイルし、独自の.jackライブラリ形式を備えており、単一のツールの一部としてほとんどのツールチェーン機能を提供します:再パッケージ化、縮小、難読化、およびmultidex

以下は、Android DEXファイルの作成に使用される2つのツールチェーンの比較です。

Legacy javac toolchain:
    javac (.java  .class)  dx (.class  .dex)
    New Jack toolchain:
    Jack (.java  .jack  .dex)

1

私は3年以上前にこの質問をしましたが、明らかに答えは何年にもわたって変化しています。上記の多くがすでに回答しているように、いつか戻って、回答は[ はい]になりました。正解だったため、承認された回答を更新したことはありません。(スタックオーバーフローのポリシーが何であるかはわかりません)

このトピックをまだ検索している人のために別の答えを追加したかっただけです。2017年5月17日の時点で、Google はKotlinもAndroid開発の公式言語であることを発表しました。

公式のプレスリリースは見つかりませんでしたが、発表されたGoogle I / O ビデオをいくつか見ました。これは、発表に関するKotlinチームのブログ投稿へのリンクです。


1

次のコードを追加すると、問題が修正されました(Android studio 2.3.2)。

build.gradle(プロジェクト)

buildscript {
repositories {
    ...
    jcenter()
}
dependencies {
    ...
    classpath 'me.tatarka:gradle-retrolambda:3.4.0' // DEPENDENCY
    ...
   }
}

build.gradle(モジュール:アプリ)

apply plugin: 'com.android.application'
apply plugin: 'me.tatarka.retrolambda' //PLUGIN

android {
    ...
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    } // SET JAVA VERSION
    ...
}



0

上記のすべてのソリューションは、2019年の最新のAndroid Studio 3.4以降では機能しないようです

AndroidプロジェクトをJava 8に移行またはアップグレードするための完璧で最新のソリューションを見つけました

解決策: [ ファイル] -> [ プロジェクト構造] -> [ モジュール ] -> [ プロパティ ]タブをクリックします。

変更ソース互換ターゲットの互換性1.8(Javaの8)

ここに画像の説明を入力してください



-1

Java 8サポートを追加する最も簡単な方法

 compileOptions {
    targetCompatibility = '1.8'
    sourceCompatibility = '1.8'
 }

build.gradleファイルに追加するだけです。


回答の重複、低品質
JanPl
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.