1

Gluon/charm バージョン 3.0.0 を実行しています。Java8 でコンパイルされたライブラリを JavaFX プロジェクト (IntelliJ プラグインを介して作成) に追加しました。iOS では動作し、期待どおりにビルドされますが、gradle タスクを実行すると、androidまたはandroidInstallこのエラーが返されます。

[ant:java] Java Result: 1
:createMainDexList FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':createMainDexList'.
> Exception in thread "main" com.android.dx.cf.iface.ParseException: InvokeDynamic not supported
    at com.android.dx.cf.cst.ConstantPoolParser.determineOffsets(ConstantPoolParser.java:226)
    at com.android.dx.cf.cst.ConstantPoolParser.parse(ConstantPoolParser.java:132)
    at com.android.dx.cf.cst.ConstantPoolParser.parseIfNecessary(ConstantPoolParser.java:124)
    at com.android.dx.cf.cst.ConstantPoolParser.getPool(ConstantPoolParser.java:115)
    at com.android.dx.cf.direct.DirectClassFile.parse0(DirectClassFile.java:491)
    at com.android.dx.cf.direct.DirectClassFile.parse(DirectClassFile.java:406)
    at com.android.dx.cf.direct.DirectClassFile.parseToEndIfNecessary(DirectClassFile.java:397)
    at com.android.dx.cf.direct.DirectClassFile.getAttributes(DirectClassFile.java:311)
    at com.android.multidex.MainDexListBuilder.hasRuntimeVisibleAnnotation(MainDexListBuilder.java:191)
    at com.android.multidex.MainDexListBuilder.keepAnnotated(MainDexListBuilder.java:167)
    at com.android.multidex.MainDexListBuilder.<init>(MainDexListBuilder.java:121)
    at com.android.multidex.MainDexListBuilder.main(MainDexListBuilder.java:91)
    at com.android.multidex.ClassReferenceListBuilder.main(ClassReferenceListBuilder.java:58)
...while preparsing cst 0002 at offset 0000000f
...while parsing de/<removed>/traffic_light/library/Test.class

私が少し奇妙だと思うのは、ライブラリにも、traffic_light の Test クラスさえないことです。エラーを検索すると、Dynamic/Support Lambdas を呼び出すにはおそらく Java 8 が必要であることがわかりましたが、たとえば、Gluon の Presenter 自体は Lambdas を使用しています。

また、グーグルで同じ問題についてこのヒットを見つけましたが、残念ながらGluonはフォーラムを削除し、ページはどこにもキャッシュされていません.

4

1 に答える 1

6

通常、このエラーは、ラムダ式を使用するサード パーティの依存関係をプロジェクトに追加すると発生します。現在、retrolambda プラグインはプロジェクトのソース コードにのみ適用されているためです。

あなたが試すことができます:

  1. その依存関係を削除し、代わりにそのソース コードを追加してください。

  2. 元の依存関係に retrolambda を適用し、それをプロジェクトに追加します。

  3. または、最新の jfxmobile プラグインを使用してください。1.0.10-SNAPSHOT は、(ソース コードが提供されていなくても) ソース コードとサード パーティの依存関係の両方に retrolambda を適用します。

build.gradle最後のオプションとして、ファイルの上にある jfxmobile プラグインのバージョンを変更するだけです。

buildscript {
    repositories {
        jcenter()
        maven {
            url "https://oss.sonatype.org/content/repositories/snapshots/"
        }
    }
    dependencies {
        classpath 'org.javafxports:jfxmobile-plugin:1.0.10-SNAPSHOT'
    }
}
于 2016-10-17T07:19:21.613 に答える