5

Android system/lib/libmedia.so を使用する Player を作成したいと考えています。

JNI を直接使用してビデオを再生します。

Android.mk で、ライブラリを含めるために「-lmedia」を追加しましたが、これを直接リンクすることはできません。

これが私のプロセスです。

  1. libmedia.so にいくつかのヘッダー ファイルを含む Cpp ファイルを作成します。

  2. LOCAL_LDLIBS の Android.mk に「-lmedia」を追加

    そのような..

    LOCAL_LDLIBS -lmedia -lstagefright

  3. ndk-build を使用して .so をビルドする

エラーが発生!!

誰か助けてくれる答えがありますか???

4

2 に答える 2

6

libmedia.soパブリック API の一部ではありlibsinstructionght.soません。これは、理論的には、それらに依存するべきではないことを意味します。ただし、実際には、これらのライブラリはすべてのデバイスに存在しますが、それらは異なります。

このバイナリ ファイルは、デバイスから、またはコマンドを使用してエミュレーターからも抽出できます。

adb pull /system/lib/libmedia.so C:/android-ndk/platforms/android-14/arch-arm/usr/lib

これにより、このファイルがパブリック API と一緒に配置されるため、ndk-build での使用が容易になります。一方で、異なるレベルの Android 間だけでなく、チップセット、メーカー、さらにはモデル間の断片化にも注意する必要があります。

これを処理するには、.soファイルをさまざまなデバイスから別のディレクトリにプルし 、そのうちの 1 つをリンカー パスに追加します。

LOCAL_LDLIBS += -Lc:/android/galaxys.4.1.2.system.lib

上記のこの指示では、アプローチで直面している大きな問題を解決できません。libmedia.soユーザーアプリにリンクすることは意図されていません。カメラ、コーデック、画面などの保護されたデバイスにアクセスできる特権ユーザーのコンテキストを想定しています。

ルート化されたデバイスをターゲットにする場合、またはカスタム ROM を準備する場合は、このライブラリを最大限に活用できます。また、自分が何をしているのか、システムから重要なリソースを盗まないようにする方法を理解してください。

そうしないと、メディア ライブラリをリンクしてもほとんどメリットがありません。

于 2012-10-29T06:39:56.523 に答える
0

PREBUILT_SHARED_LIBRARY ビルド済みの共有ライブラリを指定するために使用されるビルド スクリプトを指します。BUILD_SHARED_LIBRARY や BUILD_STATIC_LIBRARY とは異なり、LOCAL_SRC_FILES の値は、ソース ファイルではなく、ビルド済みの共有ライブラリ (例: foo/libfoo.so) への単一パスでなければなりません。

LOCAL_PREBUILTS 変数を使用して、別のモジュールでビルド済みライブラリを参照できます (詳細については、docs/PREBUILTS.html を参照してください)。

   LOCAL_PATH := $(call my-dir)

   include $(CLEAR_VARS)
   LOCAL_MODULE := foo-prebuilt
   LOCAL_SRC_FILES := libfoo.so
   include $(PREBUILT_SHARED_LIBRARY)

NDK ドキュメントから参照。

PREBUILT_STATIC_LIBRARY これは PREBUILT_SHARED_LIBRARY と同じですが、静的ライブラリ ファイル用です。詳細については、docs/PREBUILTS.html を参照してください。

詳細については、NDK のドキュメントをお読みください。

于 2012-10-29T06:16:13.693 に答える