J'ai téléchargé Tesseract OCR pour Android de here et j'essaye de le construire comme projet de bibliothèque pour ma propre application en utilisant le NDK. J'ai reçu des commentaires utiles sur la façon de le faire here. Tout d'abord, je le fais sur la ligne de commande ([path] est un raccourci pour le chemin du projet tess-deux):UnsatisfiedLinkError - Tesseract pour Android
> cd [path]\tess-two
> C:\android-ndk-r8b-windows\android-ndk-r8b\ndk-build -j8
"Compile thumb : lept <= adaptmap.c
[...]
"Compile++ thumb : lept <= writefile.cpp
Prebuilt : libgnustl_static.a <= <NDK>/sources/cxx-stl/gnu-libstdc++/4.6/libs/armeabi/
"Compile++ thumb : tess <= applybox.cpp
[...]
"Compile++ thumb : tess <= tessbaseapi.cpp
"Compile thumb : lept <= adaptmap.c
[...]
"Compile++ thumb : lept <= pixa.cpp
Prebuilt : libgnustl_static.a <= <NDK>/sources/cxx-stl/gnu-libstdc++/4.6/libs/armeabi-v7a/
"Compile++ thumb : lept <= jni.cpp
[...]
"Compile++ thumb : tess <= tessbaseapi.cpp
"Compile x86 : lept <= affine.c
[...]
"Compile++ x86 : lept <= readfile.cpp
Prebuilt : libgnustl_static.a <= <NDK>/sources/cxx-stl/gnu-libstdc++/4.6/libs/x86/
"Compile++ x86 : tess <= baseapi.cpp
[...]
"Compile++ x86 : tess <= wordclass.cpp
SharedLibrary : liblept.so
SharedLibrary : liblept.so
"Compile++ x86 : tess <= tessbaseapi.cpp
SharedLibrary : liblept.so
"Compile++ x86 : tess <= wordrec.cpp
SharedLibrary : libtess.so
Install : liblept.so => libs/x86/liblept.so
Install : liblept.so => libs/armeabi/liblept.so
SharedLibrary : libtess.so
Install : liblept.so => libs/armeabi-v7a/liblept.so
SharedLibrary : libtess.so
Install : libtess.so => libs/armeabi/libtess.so
Install : libtess.so => libs/armeabi-v7a/libtess.so
Install : libtess.so => libs/x86/libtess.so
> C:\Users\User\android-sdk\tools\android.bat update project --path .
Failed to convert path to a short DOS path: C:\Windows\system32\java.exe
'javaw_exe' is not recognized as an internal or external command,
operable program or batch file.
Updated local.properties
Updated file [path]\tess-two\proguard-project.txt
It seems that there are sub-projects. If you want to update them
please use the --subprojects parameter.
> set JAVA_HOME=C:\Java\JDK
> Buildfile: [path]\tess-two\build.xml
-set-mode-check:
-set-release-mode:
-release-obfuscation-check:
[echo] proguard.config is ${proguard.config}
-check-env:
[checkenv] Android SDK Tools Revision 20.0.3
[checkenv] Installed at C:\Users\User\android-sdks
-setup:
[echo] Project Name: tess-two
[gettype] Project Type: Android Library
-build-setup:
[echo] Resolving Build Target for tess-two...
[gettarget] Project Target: Google APIs
[gettarget] Vendor: Google Inc.
[gettarget] Platform Version: 4.1
[gettarget] API level: 16
[echo] ----------
[echo] Creating output directories if needed...
[echo] ----------
[echo] Resolving Dependencies for tess-two...
[dependency] Library dependencies:
[dependency] No Libraries
[dependency]
[dependency] ------------------
[dependency] API<=15: Adding annotations.jar to the classpath.
[echo] ----------
[echo] Building Libraries with 'release'...
[subant] No sub-builds to iterate on
-pre-build:
-code-gen:
[mergemanifest] Found Deleted Target File
[mergemanifest] Merging AndroidManifest files into one.
[mergemanifest] Manifest merger disabled. Using project manifest only.
[echo] Handling aidl files...
[aidl] No AIDL files to compile.
[echo] ----------
[echo] Handling RenderScript files...
[renderscript] No RenderScript files to compile.
[echo] ----------
[echo] Handling Resources...
[aapt] Found new input file
[aapt] Generating resource IDs...
[echo] ----------
[echo] Handling BuildConfig class...
[buildconfig] No need to generate new BuildConfig.
-pre-compile:
-compile:
[echo] Creating library output jar file...
-post-compile:
-obfuscate:
-dex:
[echo] Library project: do not convert bytecode...
-crunch:
[crunch] Crunching PNG Files in source dir: [path]\tess-two\res
[crunch] To destination dir: [path]\tess-two\bin\res
[crunch] Crunched 0 PNG files to update cache
-package-resources:
[echo] Library project: do not package resources...
-package:
[echo] Library project: do not package apk...
-post-package:
-release-prompt-for-password:
-release-nosign:
[echo]
[propertyfile] Updating property file: [path]\tess-two\bin\build.prop
[propertyfile] Updating property file: [path]\tess-two\bin\build.prop
[propertyfile] Updating property file: [path]\tess-two\bin\build.prop
[propertyfile] Updating property file: [path]\tess-two\bin\build.prop
-release-sign:
-post-build:
release:
BUILD SUCCESSFUL
Total time: 1 second
Alors, je fais ceci: Fichier -> Importer -> Android -> Code existant dans l'espace de travail -> Parcourir -> Sélectionner le répertoire actuel de l'espace de travail -> Assurez-vous que tess-two est sélectionné dans la liste qui apparaît -> Terminer. Puis je fais un clic droit sur ma propre application, allez dans Propriétés -> onglet Android -> Ajouter ... (sous la section Bibliothèque) -> sélectionnez tess-two -> Cliquez sur OK -> Cochez "Est la bibliothèque" - > OK.
Cependant, après tout cela, je encore obtenir l'erreur follwing lors de l'exécution de mon application:
09-23 13:02:42.532: E/AndroidRuntime(675): Caused by: java.lang.UnsatisfiedLinkError: Couldn't load lept: findLibrary returned null
09-23 13:02:42.532: E/AndroidRuntime(675): at java.lang.Runtime.loadLibrary(Runtime.java:365)
09-23 13:02:42.532: E/AndroidRuntime(675): at java.lang.System.loadLibrary(System.java:535)
09-23 13:02:42.532: E/AndroidRuntime(675): at com.googlecode.tesseract.android.TessBaseAPI.<clinit>(TessBaseAPI.java:47)
Les project.properties pour mon application est:
target=android-16
android.library.reference.1=..\\OpenCV\\sdk\\java
android.library.reference.2=../Tesseract/tess-two
android.library=true
Qu'est-ce qui se passe ?
Si quelqu'un peut me donner des commentaires sur les autres informations que je devrais inclure pour aider les autres à répondre à la question, je l'apprécierais vraiment. –
Incluez aussi project.properties. – rmtheis
Ne cochez pas "is Library" pour votre propre projet. Tess-two devrait être le projet de la bibliothèque. – rmtheis