Android平台(armv7/arm64)升级Tesseract 4编译失败求助
liblept.so及Gradle兼容问题 我之前升级Tesseract到4的时候也踩过类似的坑,给你整理几个关键的解决步骤:
一、先解决liblept.so找不到的核心问题
这个错误本质是eyes-two模块编译时,找不到tess-two模块生成的Leptonica库文件,大概率是依赖配置或构建顺序的问题:
检查模块依赖与NDK配置
确认eyes-two的Android.mk里正确引用了tess-two的库路径和依赖。比如要包含类似这样的配置:# 指定tess-two的构建输出路径 TESSERACT_BUILD_PATH := ../../tess-two/build # 添加Leptonica和Tesseract的库搜索路径 LOCAL_LDFLAGS += -L$(TESSERACT_BUILD_PATH)/intermediates/ndkBuild/debug/obj/local/$(TARGET_ARCH_ABI) # 声明依赖的共享库 LOCAL_SHARED_LIBRARIES += lept tesseract同时确保
tess-two的Android.mk里正确编译了Leptonica(Tesseract 4依赖Leptonica 1.78+,要确认tess-two的子模块里Leptonica版本符合要求)。清理构建缓存
旧的构建缓存经常会导致路径或文件残留问题,先执行清理命令:gradlew clean然后再重新执行编译:
gradlew assembleDebug更换兼容的NDK版本
旧版NDK(比如你用的ndk-bundle可能是较老的版本)对Tesseract 4的编译支持不好,建议切换到NDK r21e或更高版本(比如r23b)。在Android Studio中通过File > Project Structure > SDK Location指定新的NDK路径,或者在local.properties里配置:ndk.dir=/path/to/your/ndk/r21e
二、解决Gradle版本兼容问题
提示里说构建使用了已弃用的Gradle特性,和Gradle 6.0不兼容,需要调整Gradle插件与Gradle版本的匹配:
升级Gradle插件和Gradle版本
打开项目根目录的build.gradle,将Gradle插件版本调整为与Gradle 6.0+兼容的版本,比如:buildscript { dependencies { classpath 'com.android.tools.build:gradle:4.2.2' // 对应Gradle 6.7.1 } }同时修改
gradle/wrapper/gradle-wrapper.properties里的Gradle版本:distributionUrl=https\://services.gradle.org/distributions/gradle-6.7.1-all.zip优化NDK构建配置
建议在模块的build.gradle里用externalNativeBuild的方式配置ndkBuild,替代直接调用ndk-build.cmd,这样Gradle能更好地管理构建顺序:android { externalNativeBuild { ndkBuild { path 'src/main/jni/Android.mk' } } defaultConfig { externalNativeBuild { ndkBuild { abiFilters 'armeabi-v7a', 'arm64-v8a' // 只编译你需要的架构,减少冗余 arguments 'NDK_DEBUG=1', 'APP_PLATFORM=android-16' } } } }
三、Docker编译的补充建议
如果用Docker编译,要确保:
- 镜像里安装了兼容的NDK版本(r21e+)
- 挂载的项目目录权限正确,避免Docker容器无法读写文件
- 编译时指定正确的工作目录,比如:
docker run -v /your/local/project/path:/app -w /app android-ndk-r21e ./gradlew assembleDebug
按这些步骤排查后,应该能解决大部分编译问题。如果还是有问题,可以检查tess-two模块的构建输出目录,确认是否真的生成了liblept.so文件——如果tess-two本身编译失败,那eyes-two肯定找不到这个库,这时候要先解决tess-two的编译问题。
内容的提问来源于stack exchange,提问作者Kunal Singh

