Ошибка примера Vitamio — java.lang.UnsatisfiedLinkError: не удалось загрузить vinit, findLibrary вернул null

У меня возникли проблемы с запуском примера vitamio из https://github.com/yixia/VitamioBundle.

Я создаю его с помощью Android Studio, и он отлично компилируется и запускается, но когда он доходит до этой строки:

if (!io.vov.vitamio.LibsChecker.checkVitamioLibs(this))
    return;

Он выдает исключение, когда я запускаю его на своем Nexus 5 (а также на Galaxy S4):

01-22 11:58:40.759  12323-12323/? E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: io.vov.vitamio.demo, PID: 12323
java.lang.UnsatisfiedLinkError: Couldn't load vinit from loader dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/io.vov.vitamio.demo-1.apk"],nativeLibraryDirectories=[/data/app-lib/io.vov.vitamio.demo-1, /vendor/lib, /system/lib]]]: findLibrary returned null
        at java.lang.Runtime.loadLibrary(Runtime.java:358)
        at java.lang.System.loadLibrary(System.java:526)
        at io.vov.vitamio.Vitamio.<clinit>(Vitamio.java:258)
        at io.vov.vitamio.LibsChecker.checkVitamioLibs(LibsChecker.java:40)
        at io.vov.vitamio.demo.VitamioListActivity.onCreate(VitamioListActivity.java:40)
        at android.app.Activity.performCreate(Activity.java:5231)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
        at android.app.ActivityThread.access$800(ActivityThread.java:135)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:136)
        at android.app.ActivityThread.main(ActivityThread.java:5017)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:515)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
        at dalvik.system.NativeStart.main(Native Method)

Исключение также возникает, когда я запускаю дерево версии 4.2.0 в своем собственном приложении.

Есть идеи, что мне не хватает? В моем собственном приложении я поместил проект vitamio в папку библиотек и ссылаюсь на него следующим образом:

     compile(project(':libraries:vitamio'))

Образец проекта оставлен как есть.


person Paul    schedule 22.01.2014    source источник
comment
Проверьте это stackoverflow.com/questions/20117884/   -  person Zohra Khan    schedule 22.01.2014
comment
удалить (из строки компиляции compile project(':libraries:vitamio') . Обязательно очистите проект Build-›clean project или ./gradlew clean   -  person Zohra Khan    schedule 22.01.2014
comment
Он строится правильно, просто не похоже, что он копирует файлы so в нужном месте.   -  person Paul    schedule 22.01.2014
comment
Есть много сообщений, в которых говорится, что в Android Studio есть ошибка, и она будет исправлена ​​в 0.4.3.   -  person Zohra Khan    schedule 22.01.2014
comment
Да, ( ) в groovy необязательны, поэтому он делает то же самое. Я смотрю вокруг и вижу, что файлы .so в gradle не поддерживаются в версии Android Studio, которую я использую (0.3.2). Я посмотрю на обновление до 0.4.2, чтобы посмотреть, поможет ли это.   -  person Paul    schedule 22.01.2014
comment
После обновления попробуйте следующее.1. Перед импортом удалите содержимое каталога .idea внутри вашего проекта 2. Измените свой gradle на 0.7+ в build.gradle. Надеюсь, это поможет вам.   -  person Zohra Khan    schedule 22.01.2014
comment
@ShyGuy, я думаю, вы правы, и это потому, что .so не входит в комплект APK. В более поздних версиях плагина для Android есть поддержка NDK (которую вам нужно будет использовать при обновлении Android Studio и наоборот), поэтому сначала обновите его, и если у вас все еще есть проблемы, опубликуйте свой файл build.gradle. .   -  person Scott Barta    schedule 24.01.2014
comment
Плагин @ShyGuy для Android версии 8 поддерживает предварительную сборку проекта lib. Обновите версию 8 или попробуйте создать образец проекта.   -  person Crossle Song    schedule 09.02.2014
comment
@ShyGuy ты решил проблему? я столкнулся с этим на моем эмуляторе Android 4.4.2   -  person Qadir Hussain    schedule 11.06.2014
comment
@QadirHussain Я включил ответ, который в итоге приступил к работе. К сожалению, я не пробовал это с более новой версией gradle, поэтому я не знаю, есть ли более простой способ (или будет ли это работать с ним).   -  person Paul    schedule 11.06.2014
comment
@ShyGuy Могу ли я транслировать видео с помощью библиотеки Vitamio на эмуляторе Intel x86?   -  person Qadir Hussain    schedule 15.04.2015


Ответы (1)


Я не уверен, есть ли более чистый способ в новой версии Vitamino (или gradle). Но вот как я заставил его работать с инструментами сборки gradle 0.6.

  1. В мой каталог /libraries добавлен проект с источником Vitamino/sdk. У него есть /libs/armeabi /libs/armeabi-v7a с libvinit.so внутри.

  2. В моем build.gradle для моего основного проекта укажите проект библиотеки, например:

    dependencies {
    
        // other dependencies 
    
        compile(project(':libraries:vitamio'))
    
    }
    
  3. Добавьте следующее в конец моего build.gradle

    task copyNativeLibs(type: Copy) {
        from(new File(project(':libraries:vitamio').getProjectDir(), 'libs')) { include '**/*.so' }
    into new File(buildDir, 'native-libs')
    }
    
    tasks.withType(JavaCompile) { compileTask -> compileTask.dependsOn copyNativeLibs }
    
    clean.dependsOn 'cleanCopyNativeLibs'
    
    tasks.withType(com.android.build.gradle.tasks.PackageApplication) { pkgTask ->
        pkgTask.jniDir new File(buildDir, 'native-libs')
    }
    

Затем, когда я запускаю очистку и перестраиваю, он скопирует собственные библиотеки в нужное место и включит их в сборку.

person Paul    schedule 11.06.2014
comment
Могу ли я транслировать видео с помощью библиотеки Vitamio на Android-эмуляторе Intel x86? - person Qadir Hussain; 15.04.2015
comment
Не удалось найти метод jniDir() для аргументов [D:\Android WorkSpace\Androidapp\app\build\native-libs] в задаче ':app:packageDebug' типа com.android.build.gradle.tasks.PackageApplication. - person Web.11; 27.01.2019