7

ndk を使用してサードパーティ ライブラリ avahi を構築したいと考えています。avahi にはすでに Android ポートがあります (有効な Android.mk を使用)。

私が行ったこと: プロジェクトを正常に作成し、すべてのソース コードを jni/ フォルダーにコピーして、ndk-build を実行しました。libavahi.so をビルドします。

やりたいこと: すべてのソース コードを jni/ フォルダーにコピーする代わりに、プロジェクト ソース ツリーの外のフォルダーに保存したいと思います。何をすればよいでしょうか?NDK DOCUMENTATION/Import Module を調べましたが、私の場合と似たものはありません。

ndk の初心者であり、どんな提案も歓迎します。

4

1 に答える 1

5

そうです、これはインポートモジュールの場合ではありません。ネイティブコードからavihiライブラリを参照する方法は、引き続きLOCAL_SHARED_LIBRARIESになります(NDKサンプルモジュール-エクスポートを参照)。ただし、ファイル内で、別のファイルへのコマンドをjni/Android.mk使用できます。このコマンドは、 Cのステートメントincludeと非常によく似ています。このファイルは、プロジェクトツリー内にある必要はありません。同じサンプルを使用して、これがどのように機能するかを示します。#include

samples / module-exports / jniからの元のAndroid.mk :

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE := foo
LOCAL_SRC_FILES := foo/foo.c
LOCAL_CFLAGS := -DFOO=2
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/foo
LOCAL_EXPORT_CFLAGS := -DFOO=1
LOCAL_EXPORT_LDLIBS := -llog
include $(BUILD_STATIC_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := bar
LOCAL_SRC_FILES := bar/bar.c
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/bar
LOCAL_STATIC_LIBRARIES := foo
include $(BUILD_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := zoo
LOCAL_SRC_FILES := zoo/zoo.c
LOCAL_SHARED_LIBRARIES := bar
include $(BUILD_SHARED_LIBRARY)

変更されたファイルは次のようになります。

ZOO_LOCAL_PATH := $(call my-dir)
include ~/projects/bar/jni/Android.mk
LOCAL_PATH := $(ZOO_LOCAL_PATH)

include $(CLEAR_VARS)
LOCAL_MODULE := zoo
LOCAL_SRC_FILES := zoo/zoo.c
LOCAL_SHARED_LIBRARIES := bar
include $(BUILD_SHARED_LIBRARY)

そして、外部bar / jni/Android.mkは次のようになります。

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE := foo
LOCAL_SRC_FILES := foo/foo.c
LOCAL_CFLAGS := -DFOO=2
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/foo
LOCAL_EXPORT_CFLAGS := -DFOO=1
LOCAL_EXPORT_LDLIBS := -llog
include $(BUILD_STATIC_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := bar
LOCAL_SRC_FILES := bar/bar.c
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/bar
LOCAL_STATIC_LIBRARIES := foo
include $(BUILD_SHARED_LIBRARY)

これで、ファイルbar.cとfoo.cの両方をzooプロジェクトのツリーの外に保持できます。

于 2012-09-23T16:09:09.917 に答える