Инициализация JUCE на Android для Unity3D - PullRequest
0 голосов
/ 20 июня 2019

Я пытаюсь создать совместно используемую библиотеку Android для Unity3D с помощью инфраструктуры JUCE Audio. Я использую C ++ с Android NDK.

Я заставляю его строить, но я изо всех сил пытаюсь заставить Джуса работать.

Для инициализации JUCE требуется использовать метод Thread::initialiseJUCE(), который требует JNIEnv и jobject в вызове. Я думаю, что это запускает JUCE в контексте текущего потока, который должен быть основным потоком Unity (??)

Я предполагаю, что когда я вызываю метод Java_com_example_droidtest() из Unity, среда и контекст передаются им в метод. Я проверял это, и они оба существуют в собственном плагине.

Однако вызов Thread::initialiseJUCE(env,javaContext); приводит к сбою приложения.

Я не знаю, неправильно ли я это называю или действительно ли env и javaContext установлены с правильными значениями.

У кого-нибудь есть понимание этого? К сожалению, я занимаюсь чем-то, что немного нишу, и я не получаю никакого ответа от Форума JUCE, что обычно отлично.

метод, который я использую в моем c ++

extern "C" JNIEXPORT const char* JNICALL
Java_com_example_droidtest(
        JNIEnv* env,
        jobject javaContext) {

        Thread::initialiseJUCE(env,javaContext);

    std::string hello;
    if(env && javaContext){
    hello = "This *is* the string you are looking for " ;
    } else {
    hello = "this *is NOT* the string you are looking for";
    }
    return hello.c_str();
}

и мой с #

  [DllImport("SharedLib")]
    private static extern IntPtr Java_com_example_droidtest();

    void Start()
    {

        Debug.Log(Marshal.PtrToStringAuto(Java_com_example_droidtest()));
     }

Трассировка стека от сбоя

2019-06-20 18: 30: 54,929 11408-11599 /? E / CRASH: # 01 шт 007c2c59 /data/app/com.cococo.simpleNativetrial-VPFc0GmLqch8MNpdAXRkcw==/lib/x86/libSharedLib.so (juce :: Thread :: initialiseJUCE (void *, void *) + 569) 2019-06-20 18: 30: 54,929 11408-11599 /? E / MessageQueue: IdleHandler сгенерировал исключение Ошибка: сигнал 11 (SIGSEGV), код 1 (SEGV_MAPERR), адрес ошибки 00000000 Отпечаток пальца: «google / sdk_gphone_x86 / generic_x86: 10 / QPP4.190502.018 / 5616371: пользовательские / ключи для разблокировки» Редакция: «0» pid: 11408, tid: 11599, имя: UnityMain >>> com.cococo.simpleNativetrial <<< </p>

    at Unknown.00000000(Unknown Source:0)
    at libSharedLib.juce::Thread::initialiseJUCE(void*, void*)(Thread:569)
    at libSharedLib.Java_com_example_droidtest(Java_com_example_droidtest:78)
    at Unknown.0000e804(Unknown Source:0)
    at Unknown.0000d458(Unknown Source:0)
    at Unknown.00000d03(Unknown Source:0)
    at libmonobdwgc-2.00059ede(Native Method)
    at libmonobdwgc-2.002e03bd(Native Method)
    at libmonobdwgc-2.mono_runtime_try_invoke(mono_runtime_try_invoke:176)
    at libmonobdwgc-2.mono_runtime_invoke(mono_runtime_invoke:64)
    at libunity.006c4fb9(Native Method)
    at libunity.006c313c(Native Method)
    at libunity.006b00dc(Native Method)
    at libunity.006b08cc(Native Method)
    at libunity.006aefca(Native Method)
    at libunity.00543254(Native Method)
    at libunity.0061f444(Native Method)
    at libunity.0061a1d0(Native Method)
    at libunity.0061a20c(Native Method)
    at libunity.0061a404(Native Method)
    at libunity.0070fee0(Native Method)
    at libunity.0071e480(Native Method)
    at base.000013a9(Native Method)
    at [anon:dalvik-LinearAlloc].00000a30(Native Method)
...