2013-12-11 66 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,以便我可以比较吗? –