Как создать Android-плагин NDK для единства, как 32, так и 64 бит - PullRequest
0 голосов
/ 07 июня 2019

У меня есть собственный плагин Android, который я использую в Unity3d, теперь необходимо создать 64-битный пакет Android. Я хочу включить как 32-битные, так и 64-битные в одном пакете.

Я изменил Application.mk для сборки 4 плагинов Application.mk выглядит так:

APP_OPTIM        := release
APP_ABI          := armeabi-v7a arm64-v8a x86 x86_64
APP_PLATFORM     := android-8
APP_BUILD_SCRIPT := Android.mk

мой сборочный плагин.ш выглядит так:

#!/bin/sh
echo ""
echo "Compiling NativeCode.c..."
ANDROID_NDK_ROOT="/myapps/Android/android-ndk-r13b"
$ANDROID_NDK_ROOT/ndk-build NDK_PROJECT_PATH=.             NDK_APPLICATION_MK=Application.mk $*
mv libs/armeabi-v7a/libnative.so ../libnative1.so
mv libs/arm64-v8a/libnative.so ../libnative2.so
mv libs/x86/libnative.so ../libnative3.so
mv libs/x86_64/libnative.so ../libnative4.so

echo ""
echo "Cleaning up / removing build folders..."  #optional..
rm -rf libs
rm -rf obj

echo ""
echo "Done!"

Мой код плагина NativeCode.c очень прост и выглядит так:

#include <stdio.h>
#include <android/log.h>
#include <string.h>


void QDebug(const char *str)
{
    __android_log_write(ANDROID_LOG_INFO, "QED", str);
}

Когда я запускаю файл .sh, он создает 4 файла zlibnative.so, предположительно по одному для каждой целевой платформы. У меня вопрос, как мне включить все 4 в каталог плагинов Unity3d, чтобы пакет Unity использовал правильную версию.

Я получаю ошибку:

DllNotFoundException: родной 06-07 18: 13: 07.617 29585 29608 E Unity: at (обертка, управляемая в нативный) D: QDebug (строка) 06-07 18: 13: 07.617 29585 29608 E Unity: в D.logx (формат System.String, System.Object [] paramList) [0x00000] в: 0 06-07 18: 13: 07.617 29585 29608 E Unity: at Sounds.Awake () [0x00000] in: 0

Когда я собираю только 32-битную версию и у меня есть только один Libnative.so в каталоге плагинов, все работает правильно.

1 Ответ

0 голосов
/ 14 июня 2019

Проверьте ваш скрипт, который определяет функцию QDebug для C #.

Имеет директиву DllImport, в которой указано имя плагина, в котором определена функция. В вашем случае это, вероятно, показывает [DllImport (native)] или [DllImport (native1)].

Каждая из 4 библиотек должна иметь одинаковое имя файла, но находиться в отдельных каталогах в каталоге Unity Assets. Затем вы можете проверить метаданные для каждого из них в Unity, чтобы убедиться, что они определены для загрузки только для Android с правильной архитектурой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...