使用neo4j构建应用程序作为Android中的库

时间:2017-05-05 09:46:57

标签: java android neo4j

我正在尝试编写一个Android应用程序,它将使用 neo4j嵌入式 API用于图形数据库。为了开发应用程序,我使用支持Java 8的Android Studio preview version。正在进行构建。但是,当我尝试在目标上运行应用程序时,我在gradle控制台中收到以下错误:

Error:Error converting bytecode to dex:
Cause: InvokeDynamic not supported
Error:java.lang.RuntimeException: com.android.dx.cf.iface.ParseException: InvokeDynamic not supported
Error:  at com.android.ide.common.internal.WaitableExecutor.waitForTasksWithQuickFail(WaitableExecutor.java:183)
Error:  at com.android.builder.dexing.DexArchiveBuilder.processOutputs(DexArchiveBuilder.java:95)
Error:  at com.android.builder.dexing.DexArchiveBuilder.convert(DexArchiveBuilder.java:78)
Error:  at com.android.build.gradle.internal.transforms.DexArchiveBuilderTransformCallable.lambda$cacheMissAction$0(DexArchiveBuilderTransformCallable.java:240)
Error:  at com.android.builder.utils.FileCache.lambda$createFile$1(FileCache.java:260)
Error:  at com.android.builder.utils.FileCache.lambda$null$5(FileCache.java:443)
Error:  at com.android.builder.utils.SynchronizedFile.doActionWithMultiProcessLocking(SynchronizedFile.java:265)
Error:  at com.android.builder.utils.SynchronizedFile.write(SynchronizedFile.java:232)
Error:  at com.android.builder.utils.FileCache.lambda$queryCacheEntry$6(FileCache.java:415)
Error:  at com.android.builder.utils.SynchronizedFile.doActionWithMultiProcessLocking(SynchronizedFile.java:265)
Error:  at com.android.builder.utils.SynchronizedFile.read(SynchronizedFile.java:215)
Error:  at com.android.builder.utils.FileCache.queryCacheEntry(FileCache.java:391)
Error:  at com.android.builder.utils.FileCache.createFile(FileCache.java:273)
Error:  at com.android.build.gradle.internal.transforms.DexArchiveBuilderTransformCallable.getFromCacheAndCreateIfMissing(DexArchiveBuilderTransformCallable.java:187)
Error:  at com.android.build.gradle.internal.transforms.DexArchiveBuilderTransformCallable.call(DexArchiveBuilderTransformCallable.java:149)
Error:  at com.android.build.gradle.internal.transforms.DexArchiveBuilderTransformCallable.call(DexArchiveBuilderTransformCallable.java:53)
Error:  at java.util.concurrent.FutureTask.run(FutureTask.java:266)
Error:  at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
Error:  at java.util.concurrent.FutureTask.run(FutureTask.java:266)
Error:  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
Error:  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
Error:  at java.lang.Thread.run(Thread.java:745)
Error:Caused by: com.android.dx.cf.iface.ParseException: InvokeDynamic not supported
Error:  at com.android.dx.cf.cst.ConstantPoolParser.determineOffsets(ConstantPoolParser.java:226)
Error:  at com.android.dx.cf.cst.ConstantPoolParser.parse(ConstantPoolParser.java:132)
Error:  at com.android.dx.cf.cst.ConstantPoolParser.parseIfNecessary(ConstantPoolParser.java:124)
Error:  at com.android.dx.cf.cst.ConstantPoolParser.getPool(ConstantPoolParser.java:115)
Error:  at com.android.dx.cf.direct.DirectClassFile.parse0(DirectClassFile.java:491)
Error:  at com.android.dx.cf.direct.DirectClassFile.parse(DirectClassFile.java:406)
Error:  at com.android.dx.cf.direct.DirectClassFile.parseToInterfacesIfNecessary(DirectClassFile.java:388)
Error:  at com.android.dx.cf.direct.DirectClassFile.getMagic(DirectClassFile.java:251)
Error:  at com.android.builder.dexing.DexArchiveBuilderCallable.parseClass(DexArchiveBuilderCallable.java:80)
Error:  at com.android.builder.dexing.DexArchiveBuilderCallable.call(DexArchiveBuilderCallable.java:66)
Error:  at com.android.builder.dexing.DexArchiveBuilderCallable.call(DexArchiveBuilderCallable.java:40)
Error:  ... 6 more
Error:Execution failed for task ':app:transformClassesWithDexBuilderForDebug'.
> com.android.build.api.transform.TransformException: java.lang.RuntimeException: java.lang.RuntimeException: java.util.concurrent.ExecutionException: java.util.concurrent.ExecutionException: com.android.builder.utils.FileCache$FileCreatorException: com.android.builder.dexing.DexArchiveBuilder$DexBuilderException: Unable to convert input to dex archive.

我在互联网上搜索并发现InvokeDynamic not supported错误主要发生在我的应用程序试图使用依赖于lambda的第三方库时。但是,由于我使用的是支持Java 8的Android工作室的预览版,所以lambda不应该有效吗?

Neo4j有没有人遇到过这个问题?关于如何解决这个问题的任何想法?

1 个答案:

答案 0 :(得分:0)

看起来Android Studio中对Java 8功能的支持尚未完整。

我已经尝试使用Android Studio 2.4 Preview 7,当我使用方法参考功能链接包含此简单类的库时,我的项目编译失败并出现相同的错误:

public class LambdaTest {

    public void test() {
        Runnable runnable = this::run;
        runnable.run();
    }

    public void run() {
    }

}

解决方法是将库的源代码直接放入主Android模块中(如果这些源可用且许可证允许)。或者,等待应解决此问题的Android Studio更新。