Встроенная библиотека не найдена в сборке Android?

#android #c #unity3d

#Android #c #unity3d

Вопрос:

Я получаю эту ошибку: unable to lookup library path for, native render plugin support disabled когда я запускаю свое приложение на Android. Я думаю, что я неправильно создаю разделяемые библиотеки.

Я хочу собрать исходные файлы из этого репозитория. Я расскажу о своем процессе сборки, и, возможно, кто-то сможет определить шаг, который я пропускаю или делаю неправильно.

Следуя этому руководству, я придумал это:

Android.mk

 LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)

LOCAL_MODULE    := libhydrogen
LOCAL_SRC_FILES := ..hydrogen.c

include $(BUILD_SHARED_LIBRARY)
 

Application.mk

 APP_PLATFORM := android-16
APP_OPTIM := release
APP_MODULES := libhydrogen
 

Далее я:

  1. Разместил эти файлы в jni папке.
  2. Вызывается ndk-build .
  3. Скопировал .so файлы из libs папки и поместил их в соответствующие папки в Unity (т.Е. HydrogenPluginsAndroidarm64-v8a ).
  4. Убедился, что их платформы и архитектуры процессора были правильными.
  5. Создал мое приложение.

Вот оболочка c #, которую я использую. Hydrogen.Library.Initialize(); Затем вызов выдает мне эту ошибку. Вот полный logcat, связанный с этой ошибкой.

И в случае, если мой процесс сборки проходит правильно, и .so файлы в порядке; что еще может привести к этому?

Редактировать: я пытаюсь создать для armeabi-v7a и `x86. Вот сведения о файле .so, может быть, там что-то не так? Я не знаком с c, и, поскольку я не слышал, чтобы кто-нибудь создавал эту библиотеку для Android, мне интересно: может ли быть что-нибудь в исходном файле c, несовместимом с процессом сборки NDK?

Комментарии:

1. Какая у вас версия Unity?

2. @0xBFE1A8 2019.1.0b2

3. Серверные части сценариев?

4. Mono не поддерживает x64.

5. Попробуйте скомпилировать с архитектурой armeabi-v7a с бэкэндом mono scripting.

Ответ №1:

Собственные библиотеки загружаются встроенным компоновщиком системы, в вашем случае динамическим компоновщиком Linux: ld.so (иногда он меняет имена, поэтому я использовал это имя, так как вы можете проверить справочную страницу в документации с этим именем).

Для этого, как правило, вам необходимо предоставить LD_LIBRARY_PATH виртуальной машине Java переменную среды, чтобы она могла эффективно dlopen(3) ее использовать.

Подумайте, насколько ваша система разработки может отличаться от вашей целевой …. и вы легко доберетесь до этого.

Комментарии:

1. Привет, если я не понимаю неправильно, я не думаю, что это является причиной моей проблемы, потому что у меня есть другие плагины, которые импортируются на том же устройстве.

Ответ №2:

Это была ошибка с Unity! По какой-то причине при переключении целевой платформы проекта некоторые из моих файлов будут повреждены. Как ни странно, кажется, что это происходит только в этом одном проекте, но в любом случае (временное) решение заключается в повторном импорте папки плагина всякий раз, когда я переключаю платформы.