5

我正在按照这个 tesseract 教程中的教程进行操作,并且在我实际运行 Java 代码之前,一切都很顺利。当我尝试

new TessBaseApi();

它抛出以下错误

Error Code: 2
Output:
In file included from tesstwo/src/main/jni/com_googlecode_leptonica_android/box.cpp:17:0:
tesstwo/src/main/jni/com_googlecode_leptonica_android/common.h:22:24: fatal error: allheaders.h: No such file or directory
 #include <allheaders.h>
           ^
compilation terminated.
make: *** 

我已经查看/jni/com_googlecode_leptonica_android/src/src并在那里找到了allheaders.h文件。我有一种感觉,我的路径是错误的,但我几乎尝试了一切,但无济于事。有什么问题?

4

5 回答 5

1

我也遇到了 Android Studio 的这个问题。在谷歌搜索了一些之后,我发现了这个问题。 https://code.google.com/p/android/issues/detail?id=74132

显然 NDK 插件会生成它自己的 Android.mk 文件并忽略任何现有文件,因此推荐的方法是运行 ndk-build 来生成本机 .so 文件。

当我在 tess-two 目录中使用 ndk-build 时,它编译得很好,并创建了 .so 文件。

这篇文章描述了如何在 gradle 和 android studio 中包含本机库:Add pre-built .so files in project using Android Gradle plugin 0.7.3

于 2015-03-04T01:59:21.297 回答
1

这对我有用:https ://coderwall.com/p/eurvaq/tesseract-with-andoird-and-gradle

但不要删除 libs 目录!

compileSdkVersionbuildToolsVersion和设置为minSdkVersiontargetSdkVersio项目中相同的值buil.gradle

我也classpath 'com.android.tools.build:gradle:0.9.+'改成classpath 'com.android.tools.build:gradle:1.0.+'

于 2015-05-13T20:31:39.433 回答
1

在某些时候 Android Studio 建议设置 jni.srcDirs = []

导致在我的 tess-two 库项目的 gradle.build 中遵循 sourceSets

sourceSets.main {
    manifest.srcFile 'src/main/AndroidManifest.xml'
    java.srcDirs = ['src/main/java']
    resources.srcDirs = ['src/main/java']
    res.srcDirs = ['src/main/res']
    jni.srcDirs = []
    jniLibs.srcDirs = ['src/main/libs']
}

在此处输入正确的 src 路径后,这实际上有效

于 2015-10-08T15:09:46.527 回答
0

我不确定它是否适合你,但就我而言,这就是我所做的:

1. in common.h:#include <allheaders.h>改成#include <src/src/allheaders.h>.

2.在库项目build.gradle中:添加这个

sourceSets{
    main {
        manifest.srcFile 'AndroidManifest.xml'
        jni.srcDirs = []
        jniLibs.srcDirs = ['src/main/jniLibs']
        resources.srcDirs = ['src']
        res.srcDirs = ['res']

    }
}
于 2015-09-20T21:34:29.347 回答
0

Ppl,经过一天的努力..终于找到了解决方案

在 tess-two 模块的 build.gradle 中添加以下代码:

  sourceSets.main {
    manifest.srcFile 'src/main/AndroidManifest.xml'
    java.srcDirs = ['src/main/java']
    resources.srcDirs = ['src/main/java']
    res.srcDirs = ['src/main/res']
    jni.srcDirs = []
    jniLibs.srcDirs = ['src/main/jniLibs']
}

主要是请手动检查以上代码中指定的所有文件路径是否存在于 tess-two 模块中!

检查 tess -two 库中存在哪个路径“liblept.so”和其他“.so”文件。对我来说,它在 /tesstwo/src/main/jniLibs/armeabi-v7a 里面。因此我在上面的代码中制作了 jniLibs.srcDirs = ['src/main/jniLibs'] 。希望能帮助到你 !!

于 2015-10-16T06:53:42.903 回答