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目录!
将 compileSdkVersion
、buildToolsVersion
、minSdkVersion
和 targetSdkVersio
设置为与项目 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'] 。希望对您有所帮助!!
我正在按照 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目录!
将 compileSdkVersion
、buildToolsVersion
、minSdkVersion
和 targetSdkVersio
设置为与项目 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'] 。希望对您有所帮助!!