Android Studio 项目中缺少 allheaders.h

Missing allheaders.h in Android Studio Project

我正在按照 this tesseract tutorial 中的教程进行操作,并且一切顺利,直到我实际 运行 的 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 文件。我觉得我的路径是错误的,但我几乎尝试了所有方法但无济于事。有什么问题?

我也 运行 使用 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 中包含本机库,在此 post 中有描述:Add pre-built .so files in project using Android Gradle plugin 0.7.3

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

但是不要删除libs目录!

compileSdkVersionbuildToolsVersionminSdkVersiontargetSdkVersio 设置为与项目 buil.gradle

中相同的值

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

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

1、在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']

    }
}

在某些时候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 路径后,这实际上有效

各位,折腾了一天..终于找到解决办法了

在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 模块中!!

检查哪个路径 "liblept.so" 和其他 ".so" 文件 存在于 tess-two 库中。对我来说它在 /tesstwo/src/main/jniLibs/armeabi-v7a 里面。因此我在上面的代码中做了 jniLibs.srcDirs = ['src/main/jniLibs'] 。希望对您有所帮助!!