2016-02-09 2 views
0

Я загрузил последнюю версию tesseract (tess-two), я следил за тем, что написано в основном в Интернете, как интегрировать библиотеки с проектом, однако я заметил, что в последней версии tess-two есть ndk- связанные с bulid в build.gradle, поэтому создание libarires я ушел в андроид-студию с так называемым успехом. Вот build.gradle Тесс-два:tesseract dlopen не удалось в студии android

import org.apache.tools.ant.taskdefs.condition.Os 

apply plugin: 'com.android.library' 


android { 
    compileSdkVersion 23 
    buildToolsVersion "23.0.2" 

    defaultConfig { 
     minSdkVersion 8 
     targetSdkVersion 22 
     versionCode 1 
     versionName "1.0" 
    } 

    buildTypes { 
     release { 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
    } 

    sourceSets { 
     main { 
      manifest.srcFile 'AndroidManifest.xml' 
      java.srcDirs = ['src'] 
      res.srcDirs = ['res'] 
      jni.srcDirs = [] 
      jniLibs.srcDirs = ['libs'] 

     } 
    } 

    // Call external ndk-build(.cmd) script to build the native code 
    task ndkBuild(type: Exec) { 
     def ndkBuildExt = Os.isFamily(Os.FAMILY_WINDOWS) ? ".cmd" : "" 
     commandLine "${android.ndkDirectory}/ndk-build${ndkBuildExt}", 
       '-C', file('.').absolutePath, 
       '-j', Runtime.runtime.availableProcessors() 
    } 

    tasks.withType(JavaCompile) { 
     compileTask -> compileTask.dependsOn ndkBuild 
    } 

    // Cleanup task to remove previously generated binaries 
    task ndkClean(type: Exec) { 
     def ndkBuildExt = Os.isFamily(Os.FAMILY_WINDOWS) ? ".cmd" : "" 
     commandLine "${android.ndkDirectory}/ndk-build${ndkBuildExt}", 
       '-C', file('.').absolutePath, 'clean' 
    } 

    tasks.withType(Delete) { 
     cleanTask -> cleanTask.dependsOn ndkClean 
    } 
} 

dependencies { 
    compile 'com.github.dcendents:android-maven-plugin:1.2' 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
} 


// Settings for uploading module AAR to Bintray for library distribution 

task sourcesJar(type: Jar) { 
    from android.sourceSets.main.java.srcDirs 
    classifier = 'sources' 
} 

task javadoc(type: Javadoc) { 
    source = android.sourceSets.main.java.srcDirs 
    classpath += project.files(android.getBootClasspath().join(File.pathSeparator)) 
    options { 
     links "http://docs.oracle.com/javase/7/docs/api/" 
     linksOffline "http://d.android.com/reference","${android.sdkDirectory}/docs/reference" 
    } 
} 


task javadocJar(type: Jar, dependsOn: javadoc) { 
    classifier = 'javadoc' 
    from javadoc.destinationDir 
} 

artifacts { 
    archives javadocJar 
    archives sourcesJar 
} 



Properties properties = new Properties() 
properties.load(project.rootProject.file('local.properties').newDataInputStream()) 

и здесь построить журнал:

Information:Gradle tasks [:app:assembleDebug] 
:app:preBuild UP-TO-DATE 
:app:preDebugBuild UP-TO-DATE 
:app:checkDebugManifest 
:app:preReleaseBuild UP-TO-DATE 
:libraries:tess-two:preBuild UP-TO-DATE 
:libraries:tess-two:preReleaseBuild UP-TO-DATE 
:libraries:tess-two:compileReleaseNdk UP-TO-DATE 
:libraries:tess-two:compileLint 
:libraries:tess-two:copyReleaseLint UP-TO-DATE 
:libraries:tess-two:mergeReleaseProguardFiles UP-TO-DATE 
:libraries:tess-two:packageReleaseRenderscript UP-TO-DATE 
:libraries:tess-two:checkReleaseManifest 
:libraries:tess-two:prepareReleaseDependencies 
:libraries:tess-two:compileReleaseRenderscript UP-TO-DATE 
:libraries:tess-two:generateReleaseResValues UP-TO-DATE 
:libraries:tess-two:generateReleaseResources UP-TO-DATE 
:libraries:tess-two:packageReleaseResources UP-TO-DATE 
:libraries:tess-two:compileReleaseAidl UP-TO-DATE 
:libraries:tess-two:generateReleaseBuildConfig UP-TO-DATE 
:libraries:tess-two:generateReleaseAssets UP-TO-DATE 
:libraries:tess-two:mergeReleaseAssets UP-TO-DATE 
:libraries:tess-two:processReleaseManifest UP-TO-DATE 
:libraries:tess-two:processReleaseResources UP-TO-DATE 
:libraries:tess-two:generateReleaseSources UP-TO-DATE 
:libraries:tess-two:ndkBuild 
make: Entering directory `/Users/sieciech/AndroidStudioProjects/OCRTestDwa/libraries/tess-two' 
[armeabi] Install  : libjpeg.so => libs/armeabi/libjpeg.so 
[armeabi] Install  : liblept.so => libs/armeabi/liblept.so 
[armeabi] Install  : libpng.so => libs/armeabi/libpng.so 
[armeabi] Install  : libtess.so => libs/armeabi/libtess.so 
[armeabi-v7a] Install  : libjpeg.so => libs/armeabi-v7a/libjpeg.so 
[armeabi-v7a] Install  : liblept.so => libs/armeabi-v7a/liblept.so 
[armeabi-v7a] Install  : libpng.so => libs/armeabi-v7a/libpng.so 
[armeabi-v7a] Install  : libtess.so => libs/armeabi-v7a/libtess.so 
[x86] Install  : libjpeg.so => libs/x86/libjpeg.so 
[x86] Install  : liblept.so => libs/x86/liblept.so 
[x86] Install  : libpng.so => libs/x86/libpng.so 
[x86] Install  : libtess.so => libs/x86/libtess.so 
[mips] Install  : libjpeg.so => libs/mips/libjpeg.so 
[mips] Install  : liblept.so => libs/mips/liblept.so 
[mips] Install  : libpng.so => libs/mips/libpng.so 
[mips] Install  : libtess.so => libs/mips/libtess.so 
[arm64-v8a] Install  : libjpeg.so => libs/arm64-v8a/libjpeg.so 
[arm64-v8a] Install  : liblept.so => libs/arm64-v8a/liblept.so 
[arm64-v8a] Install  : libpng.so => libs/arm64-v8a/libpng.so 
[arm64-v8a] Install  : libtess.so => libs/arm64-v8a/libtess.so 
[x86_64] Install  : libjpeg.so => libs/x86_64/libjpeg.so 
[x86_64] Install  : liblept.so => libs/x86_64/liblept.so 
[x86_64] Install  : libpng.so => libs/x86_64/libpng.so 
[x86_64] Install  : libtess.so => libs/x86_64/libtess.so 
[mips64] Install  : libjpeg.so => libs/mips64/libjpeg.so 
[mips64] Install  : liblept.so => libs/mips64/liblept.so 
[mips64] Install  : libpng.so => libs/mips64/libpng.so 
[mips64] Install  : libtess.so => libs/mips64/libtess.so 
make: Leaving directory `/Users/sieciech/AndroidStudioProjects/OCRTestDwa/libraries/tess-two' 
:libraries:tess-two:compileReleaseJavaWithJavac UP-TO-DATE 
:libraries:tess-two:processReleaseJavaRes UP-TO-DATE 
:libraries:tess-two:transformResourcesWithMergeJavaResForRelease UP-TO-DATE 
:libraries:tess-two:transformClassesAndResourcesWithSyncLibJarsForRelease UP-TO-DATE 
:libraries:tess-two:mergeReleaseJniLibFolders UP-TO-DATE 
:libraries:tess-two:transformNative_libsWithMergeJniLibsForRelease UP-TO-DATE 
:libraries:tess-two:transformNative_libsWithSyncJniLibsForRelease UP-TO-DATE 
:libraries:tess-two:bundleRelease UP-TO-DATE 
:app:prepareComAndroidSupportAppcompatV72311Library UP-TO-DATE 
:app:prepareComAndroidSupportDesign2311Library UP-TO-DATE 
:app:prepareComAndroidSupportRecyclerviewV72311Library UP-TO-DATE 
:app:prepareComAndroidSupportSupportV42311Library UP-TO-DATE 
:app:prepareOCRTestDwaLibrariesTessTwoUnspecifiedLibrary UP-TO-DATE 
:app:prepareDebugDependencies 
:app:compileDebugAidl UP-TO-DATE 
:app:compileDebugRenderscript UP-TO-DATE 
:app:generateDebugBuildConfig UP-TO-DATE 
:app:generateDebugAssets UP-TO-DATE 
:app:mergeDebugAssets UP-TO-DATE 
:app:generateDebugResValues UP-TO-DATE 
:app:generateDebugResources UP-TO-DATE 
:app:mergeDebugResources UP-TO-DATE 
:app:processDebugManifest UP-TO-DATE 
:app:processDebugResources UP-TO-DATE 
:app:generateDebugSources UP-TO-DATE 
:app:compileDebugJavaWithJavac UP-TO-DATE 
:app:compileDebugNdk UP-TO-DATE 
:app:compileDebugSources UP-TO-DATE 
:app:transformClassesWithDexForDebug UP-TO-DATE 
:app:mergeDebugJniLibFolders UP-TO-DATE 
:app:transformNative_libsWithMergeJniLibsForDebug UP-TO-DATE 
:app:processDebugJavaRes UP-TO-DATE 
:app:transformResourcesWithMergeJavaResForDebug UP-TO-DATE 
:app:validateDebugSigning 
:app:packageDebug UP-TO-DATE 
:app:zipalignDebug UP-TO-DATE 
:app:assembleDebug UP-TO-DATE 
Information:BUILD SUCCESSFUL 
Information:Total time: 4.991 secs 
Information:0 errors 
Information:0 warnings 
Information:See complete output in console 

после приложения к сожалению, работать на моем Sony Xperia я получил это исключение:

22:05:04.097 17868-17868/com.example.sieciech.ocrtestdwa E/dalvikvm: dlopen("/data/app-lib/com.example.sieciech.ocrtestdwa-2/liblept.so") failed: dlopen failed: cannot locate symbol "png_set_longjmp_fn" referenced by "liblept.so"... 
02-09 22:05:04.097 17868-17868/com.example.sieciech.ocrtestdwa W/dalvikvm: Exception Ljava/lang/UnsatisfiedLinkError; thrown while initializing Lcom/googlecode/tesseract/android/TessBaseAPI; 
02-09 22:05:04.097 17868-17868/com.example.sieciech.ocrtestdwa D/AndroidRuntime: Shutting down VM 
02-09 22:05:04.097 17868-17868/com.example.sieciech.ocrtestdwa W/dalvikvm: threadid=1: thread exiting with uncaught exception (group=0x4164fd88) 
02-09 22:05:04.107 17868-17868/com.example.sieciech.ocrtestdwa E/AndroidRuntime: FATAL EXCEPTION: main 
                       Process: com.example.sieciech.ocrtestdwa, PID: 17868 
                       java.lang.UnsatisfiedLinkError: dlopen failed: cannot locate symbol "png_set_longjmp_fn" referenced by "liblept.so"... 
                        at java.lang.Runtime.loadLibrary(Runtime.java:364) 
                        at java.lang.System.loadLibrary(System.java:526) 
                        at com.googlecode.tesseract.android.TessBaseAPI.<clinit>(TessBaseAPI.java:44) 
                        at com.example.sieciech.ocrtestdwa.MainActivity.onCreate(MainActivity.java:59) 
                        at android.app.Activity.performCreate(Activity.java:5240) 
                        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1088) 
                        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2216) 
                        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2301) 
                        at android.app.ActivityThread.access$800(ActivityThread.java:144) 
                        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1246) 
                        at android.os.Handler.dispatchMessage(Handler.java:106) 
                        at android.os.Looper.loop(Looper.java:136) 
                        at android.app.ActivityThread.main(ActivityThread.java:5212) 
                        at java.lang.reflect.Method.invokeNative(Native Method) 
                        at java.lang.reflect.Method.invoke(Method.java:515) 
                        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 
                        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:602) 
                        at dalvik.system.NativeStart.main(Native Method) 

С использованием инструмента nm, прилагаемого вместе с android ndk, см.:

nm: ./x86_64/liblept.so: no symbols 

однако readelf:

readelf -a ./x86_64/liblept.so | grep png_set_longjmp_fn 
00000027add0 084900000007 R_X86_64_JUMP_SLO 0000000000000000 png_set_longjmp_fn + 0 

это не имеет значения Wheter я смотрю в ЛИЭС/x86_64 или ЛИЭС/armXX или ЛИЭС/MIPS, я получил за нм всегда не символ и readelf я получил выход, как описано выше.

Я открыл файл apk, и все библиотеки там.

Любые идеи, что я сделаю, чтобы заставить все работать?

ответ

0

Обновите свою библиотеку OCR, выполнив команду git pull и перестройте. Ошибка произошла из-за Android 4.4, используя ее версию libpng во время выполнения, а не версию, доступную в библиотеке OCR. (По-видимому, это была проблема только на Android 4.4, а не на других версиях Android.) В новой версии библиотеки OCR libpng был переименован в libpngt, чтобы обойти эту ошибку и работать должным образом на Android 4.4.

0

Go к вашему файлу JNI в cmd (он будет называться как test-two/jni или что-то еще) и запустите код your_ndk_path/ndk-build.cmd в cmd.

Похоже, в вашем CMD:

\your_project_path\ tess-two-master\ tess-two\ jni> 
your_ndk_path\ Android\ Sdk\ ndk-bundle\ ndk-build.cmd 

примечание: после того, как сделать все это вы должны удалить этот призыв;

Смежные вопросы