【问题标题】:Missing allheaders.h in Android Studio ProjectAndroid Studio 项目中缺少 allheaders.h
【发布时间】:2015-03-13 13:56:57
【问题描述】:

我按照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 文件。我有一种感觉,我的路径是错误的,但我几乎尝试了一切,但无济于事。有什么问题?

【问题讨论】:

  • 顺便提一下 - 错误消息中的路径与您引用的补丁不匹配“/src/src”
  • 对不起,如果不清楚,但错误发生在 common.h 中,但它正在寻找的 allheaders.h 文件(至少我怀疑)在“/src/src”文件夹中.
  • 您使用的是什么操作系统,您使用的是哪个版本的 Android NDK?您是否完全遵循了构建说明?您在什么时候看到此错误?
  • 我正在运行 OS X 10.9.5;我正在使用 android-ndk-r10d;所以,我确实有一次偏离了指示。在命令android update project --path . 上它说它不知道要设置哪个项目并推荐了一个附加标签,我在另一个 StackOverflow 上找到了解决方案。在此之后,因为我没有使用 Eclipse,所以我假设 Eclipse 项目类似于 IntelliJ 模块,所以我使用了Import Module 并将模块添加到我的项目中。当我开始编写 Java 代码时,这就是发生错误的地方。谢谢

标签: android android-studio tesseract leptonica


【解决方案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

【讨论】:

    【解决方案2】:

    这对我有用: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.+'

    【讨论】:

      【解决方案3】:

      在某些时候 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 路径后,这实际上可以工作

      【讨论】:

      • 非常感谢!!!但是上面代码的轻微修改对我有用。我已将其发布为下面的答案。
      【解决方案4】:

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

      1.在common.h中:将#include &lt;allheaders.h&gt;改成#include &lt;src/src/allheaders.h&gt;。 2.在库项目build.gradle中:添加这个
      sourceSets{
          main {
              manifest.srcFile 'AndroidManifest.xml'
              jni.srcDirs = []
              jniLibs.srcDirs = ['src/main/jniLibs']
              resources.srcDirs = ['src']
              res.srcDirs = ['res']
      
          }
      }
      

      【讨论】:

        【解决方案5】:

        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'] 。希望有帮助!!

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2023-04-03
          • 2016-10-13
          • 1970-01-01
          • 2021-10-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多