Javaラムダ関数を多用するコードを統合する必要があります。 Android Studioではなく最新のADTプラグインを使用してEclipseMarsを使用してプロジェクトを開発することを要求するいくつかの制限があります。
問題は、Lambda関数を使用するには1.8 JDK準拠を使用する必要があることですが、そのように設定すると、次のメッセージが表示されます。
Android requires compiler compliance level 5.0 or 6.0. Found '1.8' instead.
二人はどうやって調和して生きることができますか?
編集:これは、ADT Eclipseについて質問しているので、提案された質問の複製ではありません。その質問の最後の更新以降、AndroidはJava 8をサポートしているので、これだけではありません。重複していますが、その質問は現在(最後の更新から1。5年後)廃止されています。
これはAndroid Gradle Plugin 3.0以降の機能であり、ラムダは他のAndroid 8言語機能の一部として古いJava OSバージョンにバックポートされています。
これをGradleビルドスクリプトに追加して、機能を有効にします。
Android {
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
詳細については、 Java 8言語機能を使用 および Android 'Java 8サポート を参照してください。
@dhkeが言ったように、JavaではAndroid 8はまだサポートされていません。
ただし、JDK8を使用してAndroidアプリケーションを開発することはできます。 minSDKVersion
に応じて、ソースの互換性を6または7に設定する必要があります。したがって、Java 8で導入された新機能、たとえばラムダは失われます。
ラムダを多用しているので、 Retrolambda が選択肢になるかもしれません。 Java8より前のバージョンのラムダのバックポートを提供します。サポートを有効にするためのMaven/Gradle /コマンドラインプラグインがあります。
他のJava 8機能、AFAIKが必要な場合、 ThreeTen ABP はJava 8 Date TimeAPIのバックポートサポートを提供します。
現在(少なくともAndroid 5.1.1)Androidでラムダ関数を使用することはできません。
Lambda関数には、DalvikもARTも現在サポートしていない新しいDalvik(必ずしもJVMではありません!)opcode(liberate-variable、box-lambda、unbox-lambda、capture-variable、create-lambda、invoke-lambda)が必要です。
グーグルがスケジュールしたようです(まだ公式なものはないようですが)Java 8ポスト5.1.1(APIレベル23以降)のサポート)少なくともsmali disassemblerAPIレベルへの明確な参照を含むサポートがすでに追加されています。
https://github.com/JesusFreke/smali/commit/144951a9e9e6c87866245f2bdeebf0ebedaa0e38 :
新しい-X/-experimentalフラグを追加して、まだアートにないオペコードを[分解]アセンブルします
- 新しいオペコードを追加するliberate-variable、box-lambda、unbox-lambda、capture-variable、create-lambda、invoke-lambda
- 25x命令のエンコードのサポートを追加
- LambdaTestを追加して、新しいオペコードが正しくアセンブル/逆アセンブルされることを確認します
そしてまた
options.apiLevel = 23; // since we need at least level 23 for lambda opcodes
これはオペコードのみをマークし、必要なライブラリの変更はマークしません。また、Android自体については何も教えてくれないので、これを公式のリリーススケジュールと見なさないことをお勧めします。
AndroidはJava 8をサポートしているので、これが重複していないだけではありません
現在Android NプレビューリリースAndroidサポート制限付き機能Java 8Java 8言語機能 を参照してください
これらの機能の使用を開始するには、 Android Studio 2.1 およびAndroid NプレビューSDK、必要な ジャック を含む)をダウンロードしてセットアップする必要があります。 =ツールチェーンと更新Android Gradle用プラグイン。Android NプレビューSDKをまだインストールしていない場合は、 開発のためのセットアップAndroid N 。
サポートされているJava 8つの言語機能とAPI
Androidは現在、すべてのJava 8言語機能をサポートしているわけではありません。ただし、Android Nプレビューを対象とするアプリを開発するときに、次の機能を利用できるようになりました。
いくつかの追加のJava 8つの機能がありますAndroidサポート、 Java 8言語機能 から完全な詳細を見ることができます
更新:数日後、 Android Studio 3.0は安定版になりました 。 Java 8機能のサブセット、それらの間のラムダ式 を公式にサポートします。
this Android Developers Blogpost 2017年3月14日、googleによると
Java 8言語機能のサポートを現在のjavacおよびdxツールセットに直接追加し、Jackツールチェーンを廃止することを決定しました。この新しい方向性により、Javaクラスファイル形式に依存する既存のツールとプラグインは引き続き機能するはずです。今後、Java 8言語機能は、Androidビルドシステムによってネイティブにサポートされる予定です。今後数週間でAndroid Studioの一部としてこれをリリースすることを目指しており、この決定を早い段階で皆さんと共有したいと思いました。
したがって、JavaStudioでAndroid8を待つ必要はおそらくありません。
私の知る限り、新しいJava 8 Lambda構文で行われることはすべて、匿名内部クラスなどの古い学校のJavaコードを使用して行うことができます。(- Oracelチュートリアル )( Oracleクイックスタート )
Lambda構文を元に戻す負担を軽減するために、 NetBeans などの一部のIDEは、Lambda構文との間でコードの自動改訂を提案できます。承認を1回クリックするだけで、構文が自動的に魔法のように交換されます。 Lambda式サポートの使用 に関するNetBeansドキュメントを参照してください。
これは、 Vaadin ボタンの _Button.ClickListener
_ をLambda構文から匿名内部クラスに変換するために提供しているNetBeansのスクリーンショットです。行#107の電球アイコンをクリックするマウスポインタに注目してください。
IDEでこの機能を有効にするには、プロジェクトでJava 8を一時的に有効にする必要があります。すべてのLambda構文を元に戻した後、プロジェクトをJava = 6 /7。NetBeansでJava 8を有効にする方法はプロジェクトにあります> Properties > Sources > Source/Binary Format (popup menu) > 1.8
。