Сбой проекта Android с библиотеками Unity JNI после добавления Crosswalk

У меня есть приложение для Android, куда я встраиваю игру, которую делаю в Unity 3D. Другая часть приложения написана на Cordova/Ionic, и мне нужно использовать Crosswalk для поддержки старых телефонов Android.

Но когда я добавляю Crosswalk в свой проект, приложение вылетает сразу после запуска со следующим выводом:

W/chromium: [WARNING:xwalk_external_extension.cc(58)] Error loading extension '/data/app/com.example.app-2/lib/arm/libmono.so': couldn't get XW_Initialize function.
W/chromium: [WARNING:xwalk_extension_server.cc(407)] Failed to initialize extension: /data/app/com.example.app-2/lib/arm/libmono.so
W/chromium: [WARNING:xwalk_external_extension.cc(58)] Error loading extension '/data/app/com.example.app-2/lib/arm/libxwalkcore.so': couldn't get XW_Initialize function.
W/chromium: [WARNING:xwalk_extension_server.cc(407)] Failed to initialize extension: /data/app/com.example.app-2/lib/arm/libxwalkcore.so
I/chromium: [INFO:xwalk_extension_renderer_controller.cc(42)] EXTENSION PROCESS DISABLED.
W/chromium: [WARNING:xwalk_external_extension.cc(58)] Error loading extension '/data/app/com.example.app-2/lib/arm/libVuforiaWrapper.so': couldn't get XW_Initialize function.
W/chromium: [WARNING:xwalk_extension_server.cc(407)] Failed to initialize extension: /data/app/com.example.app-2/lib/arm/libVuforiaWrapper.so
W/chromium: [WARNING:xwalk_external_extension.cc(58)] Error loading extension '/data/app/com.example.app-2/lib/arm/libunity.so': couldn't get XW_Initialize function.
32398-32443/com.example.app A/libc: Fatal signal 11 (SIGSEGV), code 1, fault addr 0x0 in tid 32443 (Chrome_FileThre)
I/DEBUG: property debug.db.uid not set; NOT waiting for gdb.
I/DEBUG: HINT: adb shell setprop debug.db.uid 100000
I/DEBUG: HINT: adb forward tcp:5039 tcp:5039
A/DEBUG: *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
A/DEBUG: Build fingerprint: 'google/razor/flo:6.0.1/MMB29Q/2480792:user/release-keys'
A/DEBUG: Revision: '0'
A/DEBUG: ABI: 'arm'
A/DEBUG: pid: 32398, tid: 32443, name: Chrome_FileThre  >>> com.example.app <<<
A/DEBUG: signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x0
A/DEBUG:     r0 00000000  r1 98034abc  r2 00000002  r3 0013064c
A/DEBUG:     r4 00000000  r5 00130630  r6 00001000  r7 9771a0a0
A/DEBUG:     r8 b5b27000  r9 b5b27dc4  sl b6cfc444  fp 0000000c
A/DEBUG:     ip 00007ebb  sp 9b1fffe8  lr 9771a0e0  pc 9771ac38  cpsr 600f0010
A/DEBUG: backtrace:
A/DEBUG:     #00 pc 00498c38  /data/app/com.example.app-2/lib/arm/libunity.so
A/DEBUG:     #01 pc 004980dc  /data/app/com.example.app-2/lib/arm/libunity.so
A/DEBUG:     #02 pc 00491f88  /data/app/com.example.app-2/lib/arm/libunity.so
A/DEBUG:     #03 pc 004980a8  /data/app/com.example.app-2/lib/arm/libunity.so
A/DEBUG:     #04 pc 00047f9f  /system/lib/libc.so (__cxa_finalize+138)
A/DEBUG:     #05 pc 00002559  /system/bin/linker (__dl__ZN6soinfo13call_functionEPKcPFvvE+48)
A/DEBUG:     #06 pc 00002623  /system/bin/linker (__dl__ZN6soinfo10call_arrayEPKcPPFvvEjb+134)
A/DEBUG:     #07 pc 000026e3  /system/bin/linker (__dl__ZN6soinfo16call_destructorsEv+58)
A/DEBUG:     #08 pc 0000668b  /system/bin/linker (__dl__ZL13soinfo_unloadP6soinfo+266)
A/DEBUG:     #09 pc 000068d7  /system/bin/linker (__dl__Z10do_dlcloseP6soinfo+14)
A/DEBUG:     #10 pc 00001b89  /system/bin/linker (__dl_dlclose+16)
A/DEBUG:     #11 pc 00287de5  /data/app/com.example.app-2/lib/arm/libxwalkcore.so

Итак, очевидно, что у libunity.so есть какая-то проблема с libxwalkcore.so.

Я считаю, что это из-за того, что Crosswalk пытается найти «функцию XW_Initialize» в libunity.so и каким-то образом вызывает сбой всего приложения.

Когда я использую Crosswalk-Lite, все работает нормально, кроме веб-видео (отключено в crosswalk-lite), которое мне, к сожалению, нужно.

Есть ли способ указать пешеходному переходу не загружать libunity.so в качестве расширения?

Или есть ли возможность иметь библиотеки Unity JNI в одной папке и библиотеки Crosswalk во второй?

Спасибо :)


person Ladislav Hofman    schedule 08.12.2016    source источник


Ответы (2)


Это немного поздно, но когда я установил Crosswalk с помощью этой команды, это сработало:

cordova plugin add cordova-plugin-crosswalk-webview --variable XWALK_VERSION="15" --variable XWALK_MODE="lite"

Почему; Я не знаю. Однако я почти уверен, что дело не в загадочной функции «XW_Initialize», поскольку crosswalk выдает аналогичные предупреждения и для файлов .so, отличных от Unity (по крайней мере, для меня).

ИЗМЕНИТЬ:

Судя по всему, настройки версии до 15 не нужны; достаточно только режима настроек Lite:

cordova plugin add cordova-plugin-crosswalk-webview  --variable XWALK_MODE="lite"
person yasirkula    schedule 07.03.2017

У меня была та же проблема со сбоем на пешеходном переходе, когда он читал Unity libunity.so, но после того, как я застрял на этом в течение нескольких дней, я нашел решение:

Если библиотека Unity загружается до загрузки пешеходного перехода, сбой пешеходного перехода не происходит.

Для этого вам нужно загрузить библиотеку Unity, вызвав

System.loadLibrary("единство");

перед вызовом loadUrl(launchUrl); в onCreate вашего MainActivity.

Это работало в моей настройке с Cordova 7.0.1, плагином веб-просмотра Crosswalk 2.3.0 и Unity 5.6.4p3.

person Linus Schaub    schedule 29.03.2018