2015-12-11 29 views
1

當我使用minifyenable true構建我的應用程序時,收到錯誤信息。奇怪的是,當我用minifyenable編譯false應用程序工作正常。這些應用程序使用Tesseract來掃描文檔。當minifyenable爲true時Tessract錯誤java.lang.NoSuchFieldError

我錯過了什麼?

java.lang.RuntimeException: An error occured while executing doInBackground() 
    at android.os.AsyncTask$3.done(AsyncTask.java:304) 
    at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355) 
    at java.util.concurrent.FutureTask.setException(FutureTask.java:222) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:242) 
    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
    at java.lang.Thread.run(Thread.java:818) 
Caused by: java.lang.NoSuchFieldError: no "J" field "mNativeData" in class "Lcom/googlecode/tesseract/android/TessBaseAPI;" or its superclasses 
    at com.googlecode.tesseract.android.TessBaseAPI.nativeClassInit(Native Method) 
    at com.googlecode.tesseract.android.TessBaseAPI.<clinit>(Unknown Source) 
    at br.com.cfb.doarnf.el.a(Unknown Source) 
    at br.com.cfb.doarnf.a.a(Unknown Source) 
    at br.com.cfb.doarnf.a.doInBackground(Unknown Source) 
    at android.os.AsyncTask$2.call(AsyncTask.java:292) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:237) 

的build.gradle(模塊:APP)

apply plugin: 'com.android.application' 

android { 
    compileSdkVersion 23 
    buildToolsVersion "23.0.1" 

    defaultConfig { 
     applicationId "br.com.cfb.doarnf" 
     minSdkVersion 17 
     targetSdkVersion 23 
     versionCode 5 
     versionName "2.1.0" 
     multiDexEnabled true 
    } 
    buildTypes { 
     release { 
      minifyEnabled true 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
     debug { 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
    } 

    dexOptions { 
     javaMaxHeapSize "4g" 
    } 

} 

dependencies { 
    compile files('libs/YouTubeAndroidPlayerApi.jar') 
    compile fileTree(include: ['*.jar'], dir: 'libs') 
    compile project(':tess-two') 
    compile 'com.android.support:multidex:1.0.1' 
    compile 'com.android.support:appcompat-v7:23.1.1' 
    compile 'com.android.support:support-v4:23.1.1' 
    compile 'com.squareup.retrofit:retrofit:1.9.0' 
    compile 'com.google.code.gson:gson:2.3.1' 
    compile 'org.parceler:parceler:1.0.1' 
    compile 'org.parceler:parceler-api:1.0.1' 
    compile 'com.squareup.okhttp:okhttp-urlconnection:2.2.0' 
    compile 'com.squareup.okhttp:okhttp:2.2.0' 
    compile 'com.github.orangegangsters:swipy:[email protected]' 
    compile 'com.google.android.gms:play-services:8.3.0' 
    compile 'com.google.android.gms:play-services-gcm:8.3.0' 
    compile 'com.google.android.gms:play-services-ads:8.3.0' 
    compile 'com.google.android.gms:play-services-identity:8.3.0' 
    compile 'com.google.zxing:core:3.2.1' 
} 

的build.gradle(模塊:苔絲-2)

buildscript { 
    repositories { 
     mavenCentral() 
    } 
    dependencies { 
     classpath 'com.android.tools.build:gradle:1.3.0' 
    } 
} 
apply plugin: 'com.android.library' 
android { 

    compileSdkVersion 23 
    buildToolsVersion "23.0.1" 


    defaultConfig { 
     minSdkVersion 17 
     targetSdkVersion 23 
    } 
    buildTypes { 
     release { 
      minifyEnabled false 
     } 
    } 

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

回答

1

我發現一種解決方法。只是避免ProGuard的處理苔絲兩庫,以下這一點:

添加consumerProguardFiles到的build.gradle(模塊:苔絲二)

buildscript { 
    repositories { 
     mavenCentral() 
    } 
    dependencies { 
     classpath 'com.android.tools.build:gradle:1.3.0' 
    } 
} 
apply plugin: 'com.android.library' 
android { 

    compileSdkVersion 23 
    buildToolsVersion "23.0.1" 


    defaultConfig { 
     minSdkVersion 17 
     targetSdkVersion 23 
     consumerProguardFiles 'proguard-tess-two-rules.txt' 
    } 


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

proguard的-苔絲 - 兩rules.txt文件

# Add tess-two specific ProGuard rules here. 
-dontoptimize 
-dontobfuscate 
-dontpreverify 
-dontshrink 
-dontskipnonpubliclibraryclasses 
-dontskipnonpubliclibraryclassmembers 
-dontusemixedcaseclassnames 
-dontnote 

我希望它可以幫助別人。

+0

謝謝,你指出我在正確的方向。我們只需要3條規則。 '-dontoptimize,-dontpreverify,-dontshrink' –

相關問題