我已从git最新的zBar QR Code Scanner(SDK 0.2)下载。我试图在我的应用程序中实现它。我在Android Studio上工作。
我做了什么:
无需更改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')
}
可以看到每个类形式的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但不能像在示例中那样使用它。
答案 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