在Android上运行Apache Lucene遇API兼容问题,求解决方案
Android下使用Apache Lucene的兼容性问题咨询
我尝试在Android应用中集成Apache Lucene 9.9.1库,相关的build.gradle.kts配置如下:
android { compileOptions { isCoreLibraryDesugaringEnabled = true sourceCompatibility = JavaVersion.VERSION_17 targetCompatibility = JavaVersion.VERSION_17 } kotlinOptions { jvmTarget = "17" } } dependencies { // Lucene implementation("org.apache.lucene:lucene-core:9.9.1") // Core library desugaring coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.0.4") }
我按照文档要求配置了Java 17并启用核心库脱糖以支持扩展Java特性,但调用val indexDirectory: Directory = FSDirectory.open(indexPath)时触发如下错误:
FATAL EXCEPTION: DefaultDispatcher-worker-1 Process: com.example.myapp, PID: 2444 java.lang.NoSuchMethodError: No static method version()Ljava/lang/Runtime$Version; in class Ljava/lang/Runtime; or its super classes (declaration of 'java.lang.Runtime' appears in /apex/com.android.art/javalib/core-oj.jar) at org.apache.lucene.util.Constants.<clinit>(Constants.java:40) at org.apache.lucene.store.FSDirectory.open(FSDirectory.java:161) at org.apache.lucene.store.FSDirectory.open(FSDirectory.java:156) ...
错误提示找不到java.lang.Runtime.version()方法。虽然Lucene官方说明支持Java 11及以上版本,但Android的Java环境缺失该特性。
我尝试将Lucene版本降级至8.11.2、7.7.3、6.6.6和5.5.5,上述错误消失,但出现新的错误:
FATAL EXCEPTION: DefaultDispatcher-worker-2 Process: com.example.myapp PID: 5143 java.lang.NoClassDefFoundError: Failed resolution of: Ljava/lang/ClassValue; at org.apache.lucene.analysis.standard.StandardAnalyzer.createComponents(StandardAnalyzer.java:103) at org.apache.lucene.analysis.Analyzer.tokenStream(Analyzer.java:198) at org.apache.lucene.document.Field.tokenStream(Field.java:574) at org.apache.lucene.index.DefaultIndexingChain$PerField.invert(DefaultIndexingChain.java:740) at org.apache.lucene.index.DefaultIndexingChain.processField(DefaultIndexingChain.java:447) at org.apache.lucene.index.DefaultIndexingChain.processDocument(DefaultIndexingChain.java:403) at org.apache.lucene.index.DocumentsWriterPerThread.updateDocument(DocumentsWriterPerThread.java:232) at org.apache.lucene.index.DocumentsWriter.updateDocument(DocumentsWriter.java:478) at org.apache.lucene.index.IndexWriter.updateDocument(IndexWriter.java:1571) at org.apache.lucene.index.IndexWriter.addDocument(IndexWriter.java:1316) ...
错误提示找不到ClassValue类,该类仅在Android API 34及以上版本中提供,而我无法将应用的minSdkVersion设置为34。
请问是否有可行的解决方法?Lucene是否完全不兼容Android?
内容的提问来源于stack exchange,提问作者sweak
相关产品推荐
相关产品推荐

