ZBar - QR码扫描仪,在Android Studio中崩溃

时间:2013-12-11 16:32:26

标签: android qr-code zbar-sdk zbar

我已从git最新的zBar QR Code Scanner(SDK 0.2)下载。我试图在我的应用程序中实现它。我在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);
    
  6. 因此实现与示例中的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但不能像在示例中那样使用它。

4 个答案:

答案 0 :(得分:13)

我想,你在罐子结构中犯了错误。如果你想从* .so libs制作jar包,你应该使用那种结构:

  

/ LIB / armeabi / *。这样

它是您的库的目录结构示例:

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

当然你应该将最终包从lib.zip重命名为armeabi.jar。在您的情况下,您应该为armeabi-v7a和x86重复此过程。

答案 1 :(得分:1)

解决方案太复杂了。我所做的是使用已经在this example的示例解决方案中编译的jar文件。将它们复制到lib文件夹,并确保也将它们添加到gradle文件中。但是,您的第compile fileTree(dir: 'libs', include: '*.jar')行应该可以解决问题。

答案 2 :(得分:1)

将目录 armeabi armeabi-v7a x86 放在名为 native-libs 在根项目文件夹下。 然后将这些设置添加到 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现在应该包含本机库。

答案 3 :(得分:1)

您最好检查app.gradle文件中的依赖项中是否有最新版本的ZBar。获取最新版本对我有用并解决了所有问题,如找不到libzbarjni.so和libiconv.so