Пример Android OpenSL не загружает libOpenSLES.so?

Я успешно создал приложение Android NDK, использующее библиотеку OpenSL в Android, с помощью этого руководства http://audioprograming.wordpress.com/2012/03/03/android-audio-streaming-with-opensl.-es-and-the-ndk/

В opensl_io.h указано следующее:

#include <SLES/OpenSLES.h>
#include <SLES/OpenSLES_Android.h>

Мне было интересно, влияет ли это на то, что на моем устройстве загружается библиотека в /system/lib/libOpenSLES.so.

Я думал, что библиотека должна быть загружена в какой-то момент, потому что в Android.mk указано

LOCAL_LDLIBS := -llog -lOpenSLES

и документ ndk говорит мне, что это означает что /system/lib/libOpenSLES.so и никакое другое используется для -lOpenSLES

Поэтому я написал приложение с правами суперпользователя, у которого есть FileWatcher для этого файла.

Однако кажется, что библиотека никогда не затрагивается, когда я использую свой пример OpenSL.

Для других библиотек, таких как /system/lib/libstdc++.so, я вижу с помощью FileWatcher, что они загружены.

Итак, мои вопросы: почему /system/lib/libOpenSLES.so не используется?


person JoachimR    schedule 29.03.2014    source источник


Ответы (2)


Недостаточно добавить директивы -lOpenSLES и #include, чтобы ваш код действительно ссылался на libOpenSLES.so. Будет достаточно, если вы поместите вызов одной единственной функции из этой библиотеки, даже если такой вызов никогда не будет выполнен (будьте осторожны, чтобы не поместить его в блок, который оптимизирующий компилятор полностью отбросит).

person Alex Cohn    schedule 29.03.2014

Какие ошибки вы получаете? У меня возникла проблема с вызовом этих библиотек, когда я создавал аудиоприложение. Проблема заключалась в том, что в моем файле оболочки java я не загружал библиотеки. Следующий код следует использовать для загрузки библиотек в класс java.

static{
        System.loadLibrary("com_example_packageName");
    }

packageName должно быть именем пакета вашего приложения.

person Raymond Kelly    schedule 03.04.2014
comment
Спасибо за ответ. Однако мой java-код уже имеет этот код - person JoachimR; 04.04.2014
comment
Нет проблем, также заметил, что примеры приложений в ndk, использующие OpenSL ES, имеют немного другое значение в своем файле Android.mk. Они используют LOCAL_LDLIBS += -lOpenSLES - person Raymond Kelly; 04.04.2014