在Android Studio Project中缺少allheaders.h

时间:2015-01-15 08:01:00

标签: android android-studio tesseract leptonica

我正在关注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文件。我有一种感觉,我的道路是错的,但我已经尝试了几乎所有的东西而且无济于事。问题是什么?

5 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

在某些时候Android Studio建议设置 public static void main(String[] args) { System.loadLibrary(Core.NATIVE_LIBRARY_NAME); List<Point> points = new ArrayList<>(); points.add(new Point(40, 105)); points.add(new Point(35, 475)); points.add(new Point(385, 110)); points.add(new Point(385, 485)); for (int i = 0; i < 100; i++) { Mat mask = new Mat(558, 408, CvType.CV_8UC3, new Scalar(0, 0, 0)); Imgproc.line(mask, points.get(0), points.get(1), new Scalar(255), 1); Imgproc.line(mask, points.get(0), points.get(2), new Scalar(255), 1); Imgproc.line(mask, points.get(3), points.get(1), new Scalar(255), 1); Imgproc.line(mask, points.get(3), points.get(2), new Scalar(255), 1); Mat stub = new Mat(mask.rows() + 2, mask.cols() + 2, CvType.CV_8U); Imgproc.floodFill(mask, stub, Imgproc.minAreaRect(new MatOfPoint2f(points.toArray(new Point[4]))).center, new Scalar(255, 255, 255)); Imgcodecs.imwrite("out" + i + ".png", mask); } }

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

jni.srcDirs = []

在这里输入正确的src路径,这个实际工作

答案 3 :(得分: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']

    }
}

答案 4 :(得分: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']。希望它有所帮助!!