Android Libpd не работает - ошибка: ... не удалось создать

Мой клиент предоставил предварительно созданную разделяемую библиотеку.so. Который должен загружаться с libpd, поскольку для загрузки контроллера libpd требуется модуль m4aPlayer. Поэтому я поместил libm4aPlayer.so в папку jniLibs(также пробовал libs) в app > main, а затем добавил это в свой build.gradle

defaultConfig {
        ndk{
            moduleName "m4aPlayer"
        }
    }
    ...

sourceSets {
        main {
            jni {
                srcDirs = []
            }
            jniLibs {
                srcDir 'libs'
            }
        }
    }

И затем в моем классе AudioService (где я initPd() и loadPatch()) я пытаюсь вызвать встроенную предварительно встроенную библиотеку, которую клиент предоставил, выполнив это

patchFile = new File(pdFile[0].mFile.getParent(), "pd/_main.pd");

//System.loadLibrary("pd");
System.loadLibrary("m4aPlayer");

PdBase.openPatch(patchFile);
PdBase.sendFloat("fadeTime", 12f);

Каждый раз, когда я пытаюсь открыть файл патча (_main.pd), я получаю сообщение об ошибке от контроллера PD, говорящее "m4aPlayer не может создать". Но я пытаюсь загрузить библиотеку, но pd выдает эту ошибку. Он отлично воспроизводит другое аудио (где libpd не требуется клей m4aPlayer.)

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

05-30 21:48:05.840 6589-6589/com.test.test I/PdUiDispatcher: print: 
05-30 21:48:05.840 6589-6589/com.test.test I/PdUiDispatcher: print:  
05-30 21:48:05.840 6589-6589/com.test.test I/PdUiDispatcher: print: m4aPlayer
05-30 21:48:05.840 6589-6589/com.test.test I/PdUiDispatcher: print: 
05-30 21:48:05.840 6589-6589/com.test.test I/PdUiDispatcher: print: error: ... couldn't create
05-30 21:48:05.840 6589-6589/com.test.test I/PdUiDispatcher: print: 
05-30 21:48:05.840 6589-6589/com.test.test I/PdUiDispatcher: print:  
05-30 21:48:05.840 6589-6589/com.test.test I/PdUiDispatcher: print: m4aPlayer
05-30 21:48:05.841 6589-6589/com.test.test I/PdUiDispatcher: print: 
05-30 21:48:05.841 6589-6589/com.test.test I/PdUiDispatcher: print: error: ... couldn't create
05-30 21:48:05.841 6589-6589/com.test.test I/PdUiDispatcher: print: 
05-30 21:48:05.841 6589-6589/com.test.test I/PdUiDispatcher: print:  
05-30 21:48:05.841 6589-6589/com.test.test I/PdUiDispatcher: print: m4aPlayer
05-30 21:48:05.841 6589-6589/com.test.test I/PdUiDispatcher: print: 
05-30 21:48:05.841 6589-6589/com.test.test I/PdUiDispatcher: print: error: ... couldn't create
05-30 21:48:05.841 6589-6589/com.test.test I/PdUiDispatcher: print: fadeTime: 12
05-30 21:48:05.841 6589-6589/com.test.test I/PdUiDispatcher: print: fadeDelay: 3
05-30 21:48:05.841 6589-6589/com.test.test I/PdUiDispatcher: print: curve: 30
05-30 21:48:05.841 6589-6589/com.test.test I/PdUiDispatcher: print: musicVol: 1.5
05-30 21:48:05.841 6589-6589/com.test.test I/PdUiDispatcher: print: voiceVol: 1.5
05-30 21:48:05.841 6589-6589/com.test.test I/PdUiDispatcher: print: voiceGender: 1
05-30 21:48:05.841 6589-6589/com.test.test I/PdUiDispatcher: print: isRandom: 1
05-30 21:48:05.841 6589-6589/com.test.test I/PdUiDispatcher: print: suggestionsVO: 1
05-30 21:48:05.841 6589-6589/com.test.test I/PdUiDispatcher: print: availableSoundscapes:
05-30 21:48:05.842 6589-6589/com.test.test I/PdUiDispatcher: print:  
05-30 21:48:05.842 6589-6589/com.test.test I/PdUiDispatcher: print: 2
05-30 21:48:05.842 6589-6589/com.test.test I/PdUiDispatcher: print:  
05-30 21:48:05.842 6589-6589/com.test.test I/PdUiDispatcher: print: 3
05-30 21:48:05.842 6589-6589/com.test.test I/PdUiDispatcher: print:  
05-30 21:48:05.842 6589-6589/com.test.test I/PdUiDispatcher: print: 4
05-30 21:48:05.842 6589-6589/com.test.test I/PdUiDispatcher: print:  
05-30 21:48:05.842 6589-6589/com.test.test I/PdUiDispatcher: print: 5
05-30 21:48:05.842 6589-6589/com.test.test I/PdUiDispatcher: print:  
05-30 21:48:05.842 6589-6589/com.test.test I/PdUiDispatcher: print: 6
05-30 21:48:05.842 6589-6589/com.test.test I/PdUiDispatcher: print:  
05-30 21:48:05.842 6589-6589/com.test.test I/PdUiDispatcher: print: 7
05-30 21:48:05.842 6589-6589/com.test.test I/PdUiDispatcher: print:  
05-30 21:48:05.842 6589-6589/com.test.test I/PdUiDispatcher: print: 8
05-30 21:48:05.842 6589-6589/com.test.test I/PdUiDispatcher: print:  
05-30 21:48:05.842 6589-6589/com.test.test I/PdUiDispatcher: print: 9
05-30 21:48:05.843 6589-6589/com.test.test I/PdUiDispatcher: print: 
05-30 21:48:05.843 6589-6589/com.test.test I/PdUiDispatcher: print: module: 2
05-30 21:48:05.843 6589-6589/com.test.test I/PdUiDispatcher: print: INTO-Q: 0
05-30 21:48:05.843 6589-6589/com.test.test I/PdUiDispatcher: print: soundscape: 5
05-30 21:48:05.843 6589-6589/com.test.test I/PdUiDispatcher: print: toApp-isThisFileOK: p5intro0

Я также попытался проверить внутри приложения, чтобы убедиться, что библиотека копируется или нет. Итак, я пошел в

data/data/package_name/lib

3 ответа

Этот ответ может дать некоторые подсказки или советы: /questions/15042943/systemloadlibrary-ne-smog-najti-nativnuyu-biblioteku-v-moem-sluchae/15042967#15042967

Вам не нужно вызывать System.loadLibrary() для загрузки внешних данных.

Взгляните на пример PdTest в репозитории pd-for-android, чтобы узнать, как там используется внешний файл helloworld.c. Вы можете использовать это в качестве шаблона для своего собственного проекта, чтобы поначалу было проще и проверить, что патч для чистых данных может корректно загрузить ваш libm4aPlayer.

Кроме того, вы упоминаете.m файлы. Я предполагаю, что вы компилируете Objective C тогда? Я не видел, чтобы кто-нибудь делал это с pd-for-android, поэтому я не уверен, сработает ли это.

Есть три варианта:

  • Pd не может найти файл библиотеки: попробуйте использовать полный путь (или подтвердите, что другие внешние объекты, такие как [bonk~] можно загрузить)

  • двоичный файл пропускает некоторые зависимости (проверьте с некоторым эквивалентом Android ldd)

  • бинарный файл вообще не является Pd-внешним (несмотря на то, что утверждает ваш клиент)

для отладки двух последних опций вы можете захотеть повысить детализацию и или контролировать stderr (и, вероятно, stdout) вашего приложения.

Другие вопросы по тегам