1

AACファイルを再生するために、NDKをセットアップし、http://code.google.com/p/aacplayer-android/コードをダウンロードしました

私がダウンロードしたそのソース

 svn checkout http://aacplayer-android.googlecode.com/svn/trunk/ aacplayer-android-read-only

その後、次のコードからプレーヤーをダウンロードしました

http://aacplayer-android.googlecode.com/files/aacplayer-android-r25.zip

そのコードをプロジェクトに使用する必要があるため、新しい JNI フォルダーを作成し、すべてのコード .c および .h ファイルをコピーします... 以下はイメージです

ここに画像の説明を入力

次に、ndk-build コマンドを実行し、以下のような .so ファイルを生成しました。

ここに画像の説明を入力

これで、libs フォルダー内のこの 2 つのフォルダーと .so ファイルが以下のように作成されていることがわかります。

ここに画像の説明を入力

以下のコードを使用してアプリをビルドして実行すると、すべてが正常に機能し、ライブラリは java.lang.UnsatisfiedLinkError: nativeStart エラーなしでロードされます

    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.list);

    System.loadLibrary("aacarray"); 
    System.loadLibrary("mms");

しかし、ストリーミング AAC ファイルの再生を開始すると、以下のエラーが生成されます

      02-19 23:13:47.090: W/dalvikvm(847): No implementation found for native Lcom/example/xmlparsingex/ArrayDecoder;.nativeStart (ILcom/example/xmlparsingex/ArrayBufferReader;Lcom/example/xmlparsingex/Decoder$Info;)I
      02-19 23:13:47.100: W/dalvikvm(847): threadid=11: thread exiting with uncaught exception (group=0x40015560)
      02-19 23:13:47.100: E/AndroidRuntime(847): FATAL EXCEPTION: Thread-12
      02-19 23:13:47.100: E/AndroidRuntime(847): java.lang.UnsatisfiedLinkError: nativeStart
      02-19 23:13:47.100: E/AndroidRuntime(847):    at com.example.xmlparsingex.ArrayDecoder.nativeStart(Native Method)
      02-19 23:13:47.100: E/AndroidRuntime(847):    at com.example.xmlparsingex.ArrayDecoder.start(ArrayDecoder.java:100)
     02-19 23:13:47.100: E/AndroidRuntime(847):     at com.example.xmlparsingex.ArrayAACPlayer.playImpl(ArrayAACPlayer.java:114)
     02-19 23:13:47.100: E/AndroidRuntime(847):     at com.example.xmlparsingex.AACPlayer.play(AACPlayer.java:273)
     02-19 23:13:47.100: E/AndroidRuntime(847):     at com.example.xmlparsingex.AACPlayer.play(AACPlayer.java:242)
     02-19 23:13:47.100: E/AndroidRuntime(847):     at com.example.xmlparsingex.AACPlayer$1.run(AACPlayer.java:202)
     02-19 23:13:47.100: E/AndroidRuntime(847):     at java.lang.Thread.run(Thread.java:1019)

同じエラーjava.lang.UnsatisfiedLinkError: nativeStart android NDKを持つこの質問を投稿しましたが、この質問はこのように同じではないため、反対票を投じないでください:(

私は問題を解決するために多くのことを試みましたが、成功できませんでした。誰かが私を助けてくれます...

4

1 に答える 1

3

元のパッケージから aacplayer クラスを取得し、com.spoledge.aacplayerそれらを独自のパッケージにドロップしましたcom.example.xmlparsingex(おそらく Android の例に由来します)。そんなことはできません。純粋な Java クラスは存続しますが (Eclipse リファクタリングによってサポートされます)、ネイティブ メソッドを持つクラスは存続しません。ネイティブ メソッドは、ネイティブ ライブラリ内の特定の関数名にバインドされます。ネイティブ ライブラリlibaacarray.soが関数をエクスポートする場合Java_com_spoledge_aacplayer_ArrayDecoder_nativeStart、対応する Java クラスが必要でありcom.spoledge.aacplayer.ArrayDecoder、それを回避する方法はありません。ネイティブ ライブラリも微調整して再コンパイルする場合を除きます。

于 2013-02-20T09:51:59.663 に答える