2

私は現在試みていることと少し混乱しています:NDKを介してAndroidで使用するためにCライブラリをクロスコンパイルしたいので、JNIラッパーを作成し、AndroidJavaコードからその関数の一部を呼び出すことができます。

  • このガイドに従って、libopus(プロジェクトに含めたいライブラリ)をクロスコンパイルしました:http://mortoray.com/2012/08/21/android-ndk-cross-compile-setup-libpng-and-freetype/ whichつまり、現在/ opt / android-ext /にスタンドアロンのツールチェーンがあり、クロスコンパイルしたライブラリ(libopus.a、libopus.soなど)を含むlibフォルダーがあります

  • また、Androidプロジェクトにjniフォルダーがあります。このフォルダーには、必要なJNIバインディングを含むCコードが含まれており、Javaコードから呼び出すことができますが、何も実行されません(呼び出すことはできますが、空白の関数です)。 。これは、私のプロジェクトには、「libopusUtilsNative.so」(ラッパー)を含む/ lib/armeabiディレクトリがあることを意味します。

私の質問は:

クロスコンパイルしたばかりのライブラリをプロジェクトに追加するには、たとえば、すでに持っているCソースコードファイルに対して#include呼び出しを実行して、ライブラリ関数にアクセスできるようにするにはどうすればよいですか?私は次の方法で少し迷っています:

  1. クロスコンパイルしたライブラリをプロジェクトに含めます。

  2. 私が作成したラッパーコードを作成する方法には、それが含まれています(これは、Android.mkファイルにコードを追加することと関係があると思いますが、私にはわかりません)。

4

1 に答える 1

1

リンクしたガイドには、クロスコンパイルされたライブラリに対してリンクするようにJNIライブラリ(または彼の場合はネイティブアプリ)のAndroid.mkファイルを変更する方法の例が含まれています。

PLATFORM_PREFIX := /opt/android-ext/

LOCAL_PATH := $(PLATFORM_PREFIX)/lib
include $(CLEAR_VARS)
LOCAL_MODULE := libpng
LOCAL_SRC_FILES := libpng.a
include $(PREBUILT_STATIC_LIBRARY)

# The in your project add libpng
LOCAL_STATIC_LIBRARIES := android_native_app_glue libpng

これは、libopusに対して静的にリンクしたい場合の方法とほぼ同じです。または、共有ライブラリに対してリンクする場合は、次のようなものを使用します。AndroidNDKプロジェクトで独自のビルド済み共有ライブラリを使用する

于 2013-01-14T18:20:13.763 に答える