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) вашего приложения.