在android上使用lucene 4

lucene4使用了codec,搜索时通过反射加载相应codec类。与反射相关的信息放到了lucene的jar文件的META-INF\services目录下。

android由apkuilder来生成apk。生成时,第三方jar里面的META-INF会被删除。

因而,在android上面使用lucene4时codec无法被加载。(lucene3不会有此问题)

一个简单的解决方案是使用apkdb来修改apk,将lucene中META-INF下的目录services放到apk的original\META-INF下面即可。

另外一个办法是修改lucene代码,更改META-INF\services的路径

修改

public final class SPIClassIterator<S> implements Iterator<Class extends S>> {
  private static final String META_INF_SERVICES = "/services/";
  ......
}

你可能感兴趣的:(Lucene)