8

Androidライブラリモジュールでラムダ式を使用すると、コンパイラ例外com.sun.tools.javac.code.Symbol$CompletionFailure: class file for java.lang.invoke.MethodType not foundが返されます。AndroidライブラリモジュールでLambdaがコンパイラ例外を発生させる

Androidアプリケーションモジュールで使用すると、ラムダ式がエラーなしでコンパイルされます。問題を実証する

サンプルプロジェクトをここで見つけることができます:
https://github.com/adamdye/AndroidLambdaIssue

例で興味深いのクラスはMyLibrary.javaとMainActivity.javaです。各クラスには同じ式が含まれています。私はレトロなラムダを使用することに興味がない

セットアップ

Android Studio 2.2 preview 1 
min/target SDK version = android-N 
build tools version = 24.0.0.rc4 
jack compiler enabled 
source/target compatibility = 1.8 
Gradle version = 2.10 
Android Plugin Version = 2.2.0-alpha1 
JDK = java 8 

。私はこれを適切な構成で動作させたいと思っています。私はどこかのステップを欠いていると思います。

+0

参考文献[link](http s://github.com/evant/gradle-retrolambda)。これはあなたを助けるかもしれません.. – Sabari

答えて

7

ちょうど戻って、私が学んだものを追加してください。

MethodType not foundエラーを回避するには、プロジェクトのbuild.gradleファイルのJavaのHOMEランタイムjarファイルをgradleのbootclasspathに追加します。 app:transformClassesWithPreJackPackagedLibrariesForDebug Gradleのタスクが失敗したので

allprojects {  
    gradle.projectsEvaluated { 
     tasks.withType(JavaCompile) { 
      options.compilerArgs << "-Xbootclasspath/a:" + System.properties.get("java.home") + "/lib/rt.jar" 
     } 
    } 
} 

ただし、アプリがデバイスまたはエミュレータへの展開ではないでしょう。 lambaとして使用されるすべてのインタフェースがクラスパス上にあることが必要です。 bootclasspathの修正でJackコンパイラのクラスパスが設定されず、ライブラリはJackコンパイラをまだ使用していません。

私は、この問題に関するバグレポートを開く:https://code.google.com/p/android/issues/detail?id=211386

彼らはこれが近い将来に解決される予定とコメントしました。

+0

今は可能ですか? –

+0

私がGoogleで開いた問題は、依然として「割り当て済み」の状態です。つまり言い換えれば、いいえ。 同じ質問がそのスレッドで尋ねられました。それはあなたにも重要な問題であることをスレッドに追加することを傷つけることはありません。 –

0

私は、コンパイルされたJARではなく、Javaソースを含むJARを依存関係として含めることでこの問題を解決しました。これは私が私のプロジェクトの構成方法である:図書館のbuild.gradle

アプリのbuild.gradle
configurations { 
    sources 
} 

task sourcesJar(type: Jar, dependsOn: classes) { 
    classifier = 'sources' 
    from sourceSets.main.java.srcDirs 
} 

artifacts { 
    sources sourcesJar 
} 

もちろん
dependencies { 
    compile project(path: ":gdxstudio-core", configuration: "sources") 

ライブラリは、アプリケーションの外部プロジェクトとして含まれていますsettings.gradle

関連する問題