9

我已经从 git latest 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);
    

因此实现与示例中的 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

4 回答 4

13

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

/lib/armeabi/*.so

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

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

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

于 2013-12-11T19:19:17.587 回答
1

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

于 2015-06-20T07:33:55.300 回答
1

将目录armeabiarmeabi-v7ax86放在根项目文件夹下名为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 现在应该包含本机库。

于 2015-11-17T08:27:55.237 回答
1

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

于 2017-06-02T09:44:42.877 回答