ZBar - сканер QR-кода, сбой в Android Studio

Я скачал с git последний сканер QR-кода zBar (SDK 0.2). Я пытаюсь реализовать это в своем приложении. Я работаю в Android Studio.

Что я сделал:

  1. Я скопировал zBar.jar в папку libs моего проекта.
  2. Я создал файлы *.jar из "amerabi", "amerabi-v7a", "x86", заархивировав их и изменив их формат на *.jar.
  3. Я скопировал amerabi.jar, amerabi-v7a.jar и x86.jar в папку libs моего проекта.
  4. Нет необходимости что-либо менять в gradle, потому что он уже настроен на импорт каждого файла jar из проектов libs. Смотри ниже:

    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 можно увидеть, поэтому я все настроил. Я запускаю свою 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 может видеть библиотеку, но не может использовать ее так же, как в примере.


person F1sher    schedule 11.12.2013    source источник


Ответы (4)


Я думаю, вы ошиблись в структуре своих банок. Если вы хотите создать пакет jar из *.so libs, вы должны использовать такую ​​структуру:

/lib/armeabi/*.so

Это пример структуры каталогов для вашей библиотеки:

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

и, конечно, вы должны переименовать окончательный пакет из lib.zip в armeabi.jar. В вашем случае вы должны повторить этот процесс для armeabi-v7a и x86.

person froger_mcs    schedule 11.12.2013
comment
Не могли бы вы уточнить? Кажется, я не могу заставить это работать, и у меня та же проблема, что и у @F1sher. - person Ushal Naidoo; 25.03.2014
comment
Я буду, потому что у меня такая же проблема, и он даст мне правильный ответ. Итак, если вы используете студию Android, создайте 2 папки, первая из которых - lib. Внутри lib создайте папку armeabi. В папку armeabi поместите файлы .so (libiconv.so и libzbarjni.so). затем сделайте архив из папки lib... например, это будет lib.zip. После этого вам нужно будет переименовать его в armeabi.jar. Последний шаг — скопировать вашу банку в библиотеки и скомпилировать в gradle. - person Lucian Novac; 03.04.2015
comment
даже я сталкиваюсь с той же проблемой при работе над eclipse, проект работает на устройствах Android, но не на Android TV. Я выполнил описанные выше шаги, но банки исчезают, как только я запускаю или создаю проект. Какие-либо предложения?? - person Maniya Joe; 28.01.2016

Решение слишком сложное. Чтобы заставить его работать, я использовал файлы jar, уже скомпилированные в примере решения из этот пример. Скопируйте их в папку lib и обязательно добавьте их в файл gradle. Однако ваша строка compile fileTree(dir: 'libs', include: '*.jar') должна помочь.

person 7heViking    schedule 20.06.2015

Поместите каталоги 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 теперь должны быть включены собственные библиотеки.

person smokeink    schedule 17.11.2015

Вам лучше проверить, есть ли у вас самая новая версия ZBar в зависимостях в вашем файле app.gradle. Получение последней версии сработало для меня и решило все проблемы, такие как невозможность найти libzbarjni.so и libiconv.so

person CottaLotties    schedule 02.06.2017
comment
Для меня с compile 'me.dm7.barcodescanner:zbar:1.9.3' я продолжаю получать ошибку - person Boris Strandjev; 25.06.2017
comment
И есть ли у вас компиляция «net.jcip: jcip-annotations: 1.0» в вашем app.gradle? У меня есть эти плюс compileSdkVersion 25, minSdkVersion 16, buildToolsVersion 25.0.2, и у меня это сработало. Мне не нужно было ничего добавлять дополнительно. - person CottaLotties; 26.06.2017
comment
У меня не было этой зависимости, но теперь я ее добавил, и проблема все еще остается. Можете ли вы поделиться всей своей сборкой, Gradle, чтобы я мог сравнить? - person Boris Strandjev; 26.06.2017
comment
Конечно. Вы можете найти это здесь. dropbox.com/s/wc2nz75sxyxu8bc/build.gradle?dl=0< /а> - person CottaLotties; 26.06.2017
comment
Кстати, на каком устройстве у вас вылетало приложение? У меня есть один Galaxy Nexus, который наблюдает за проблемой на моей стороне в моем приложении. - person Boris Strandjev; 26.06.2017
comment
У меня были проблемы на Asus Zenphone (версия 6.0) и на некоторых других устройствах с андроидом версии 6 и выше. Давно была эта проблема, но она отлично работала с андроидом 4.0.3 и 5.0.0, насколько я помню. - person CottaLotties; 26.06.2017
comment
Сегодня я провел еще один эксперимент. Я создал эмулятор с API 17. Он вылетает с той же ошибкой, что и мой реальный телефон. Я знаю, что уже дал вам слишком много работы, но возможно ли, что вы проверите это и посмотрите, будет ли ваше приложение работать нормально на таком эмуляторе. - person Boris Strandjev; 27.06.2017
comment
После долгой борьбы добавление этой строки `System.loadLibrary(icon);` перед загрузкой ScannerView заставило меня избавиться от ошибки. Использование zbar 1.9.3 - person Boris Strandjev; 27.06.2017
comment
Рад за вас :) Не забывайте запрашивать разрешения, и это будет работать как шарм - person CottaLotties; 28.06.2017