0

このチュートリアルhttp://audioprograming.wordpress.com/2012/03/03/android-audio-streaming-with-opensl-es-and-の助けを借りて、Android で OpenSL ライブラリを使用する Android NDK アプリケーションを正常に構築しました。 ndk/

opensl_io.h には、次のように記述されています。

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

これが私のデバイスにライブラリ/system/lib/libOpenSLES.soがロードされるという影響があるかどうか疑問に思っていました。

Android.mk に記載されているため、ある時点でライブラリをロードする必要があると思いました

LOCAL_LDLIBS := -llog -lOpenSLES

そして、ndk doc/system/lib/libOpenSLES.soは、これは、他のものは使用されないことを意味することを私に伝えています-lOpenSLES

そのため、そのファイルに FileWatcher を持つスーパーユーザー権限を持つアプリを作成しました。

ただし、私の OpenSL の例を使用すると、ライブラリはまったく変更されていないようです。

などの他のライブラリについて/system/lib/libstdc++.soは、それらがロードされていることを FileWatcher で確認できます。

だから私の質問は:なぜ/system/lib/libOpenSLES.so使われていないのですか?

4

2 に答える 2

0

コードを実際にlibOpenSLES.so-lOpenSLESにリンクさせるには、#includeディレクティブを追加するだけでは不十分です。そのライブラリから 1 つの関数を呼び出すだけで十分です。そのような呼び出しが実行されることはありません (最適化コンパイラが完全に破棄するブロックに入れないように注意してください)。

于 2014-03-29T21:20:20.717 に答える
0

あなたが得ているエラーは何ですか?. オーディオ アプリを作成しているときに、これらのライブラリの呼び出しに問題がありました。問題は、私のJavaラッパーファイルでライブラリをロードしていなかったことです。ライブラリを Java クラスにロードするには、次のコードを使用する必要があります。

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

packageName は、アプリのパッケージ名である必要があります。

于 2014-04-03T17:25:07.613 に答える