2013-12-11 63 views
9

我已經從git下載最新的zBar QR碼掃描儀(SDK 0.2)。我正試圖在我的應用程序中實現它。我在Android Studio上工作。ZBar - QR碼掃描儀,崩潰在Android Studio

我做了什麼:

  1. 我抄zBar.jar到LIBS我的項目的文件夾中。
  2. 我已經從「amerabi」,「amerabi-v7a」,「x86」創建* .jar文件,並將它們的格式更改爲* .jar。
  3. 我已將amerabi.jar,amerabi-v7a.jar和x86.jar複製到我的項目的libs文件夾中。
  4. 沒有必要更改gradle中的任何內容,因爲它已經配置爲從libs項目導入每個jar文件。見下:

    dependencies { 
        compile 'com.android.support:support-v4:18.0.+' 
        compile 'com.crashlytics.android:crashlytics:1.+' 
    
        compile fileTree(dir: 'libs', include: '*.jar') 
    
        compile project(':FacebookSDK') 
        compile project(':actionbarsherlock') 
        compile project(':Aviary-SDK') 
    } 
    
  5. 每個類的形式zBar lib可以看到,所以我已經配置了一切。我跑我的ScannerActivity和我的onCreate在此行中出現錯誤:

    scanner = new ImageScanner(); // this line shows an error 
    scanner.setConfig(0, Config.X_DENSITY, 3); 
    scanner.setConfig(0, Config.Y_DENSITY, 3); 
    

所以實現1:1的相同的例子所示。

我的錯誤日誌:

java.lang.UnsatisfiedLinkError: Couldn't load zbarjni from loader dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/pl.toptof.android.debug-2.apk"],nativeLibraryDirectories=[/data/app-lib/pl.toptof.android.debug-2, /vendor/lib, /system/lib]]]: findLibrary returned null 

請幫我這個問題。我不知道爲什麼我的Android Studio可以看到lib,但不能像使用示例一樣使用它。

回答

13

我想,你在你的罐子結構中犯了錯誤。如果你想從*。所以庫讓jar包,你應該使用這種結構:

/lib/armeabi/*.so

這是你的庫目錄結構例如:

lib/ 
---/armeabi 
------/libiconv.so 
------/libzbarjni.so 

當然,您應該將最終包從lib.zip重命名爲armeabi.jar。在你的情況下,你應該爲armeabi-v7a和x86重複這個過程。

+0

請你詳細說明一下嗎?我似乎無法得到這個工作,我有問題,因爲我有同樣的問題,他給了我正確的答案。@ F1sher –

+6

我會,因爲我有同樣的問題,他給我正確的答案。所以如果你使用Android Studio,那麼首先創建2個文件夾就是「lib」。在lib裏面創建「armeabi」文件夾。在armeabi文件夾裏放入.so文件(libiconv.so和libzbarjni.so)。然後從lib文件夾中創建一個檔案...例如將是lib.zip。之後,您將不得不將其重命名爲armeabi.jar。最後一步是將你的jar複製到libs並編譯成gradle。 –

+0

即使我在eclipse上工作時也面臨同樣的問題,項目在android設備上運行,但在android電視上運行。我遵循上述步驟,但一旦我運行或構建項目,罐子就會消失。 有什麼建議? –

1

該解決方案太複雜。我所做的工作就是使用已在this example的示例解決方案中編譯的jar文件。將它們複製到lib文件夾中,並確保也將它們添加到gradle文件中。但是,您的行compile fileTree(dir: 'libs', include: '*.jar')應該做的伎倆。

1

把目錄armeabiarmeabi-V7A和名爲本機庫根項目文件夾下的子目錄。 然後將這些設置添加到您的的build.gradle文件:

android { 
    // other settings 
    sourceSets { 
      main { 
       jni.srcDirs=[] //to suppress makefiles autogeneration 
       jniLibs.srcDirs=['native-libs'] //native *.so in armeabi x86 and mips to include 
      } 
     } 
} 

產生的apk文件應具有本機庫現在包括在內。

1

你最好檢查你的app.gradle文件中是否有最新版本的ZBar在依賴關係中。獲取最新版本爲我工作,並解決了所有問題,如無法找到libzbarjni.so和libiconv.so

+0

對我來說''編譯'me.dm7.barcodescanner:zbar:1.9.3''我一直在得到錯誤 –

+0

你是否在你的app.gradle中編譯net.jcip:jcip-annotations:1.0'「 ?我有這些加上compileSdkVersion 25,minSdkVersion 16,buildToolsVersion「25.0.2」,它爲我工作。我不必額外添加任何東西。 – CottaLotties

+0

我沒有這個依賴,但現在我添加了它,問題依然存在。你能分享你的整個構建,gradle,以便我可以比較嗎? –