現在、NDKマニフェストファイルからのリソースを含めるのに問題があり、クイックフィックスエラーであると確信しています。大規模なライブラリのプロジェクトとオペレーティングシステム間で共有されるファイルはたくさんあります。したがって、ファイルを他のプロジェクトで最新の状態に保ち、更新が発生するたびに個々のプロジェクトを最新のAPIで更新しないようにするには、多数のネイティブヘッダーファイルとソースコードファイルを相対パスで参照する必要があります。
Eclipse内で、プロジェクトのローカルフォルダー構造内の現在のアプリケーションで必要となるファイルをクリックしてドラッグしました(ファイルをコピーせずに、相対パスを使用します)。
/ projectFolder / jni / externalProjectFiles / src /含む
Eclipse内のこのフォルダー構造では、次の構造のAndroid.mkファイルがあります。
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := projectLib
LIBRARY_SRC_FOLDER := $(wildcard $(LOCAL_PATH)/externalProjectFiles/src/*.cpp)
LOCAL_C_INCLUDES := $(LOCAL_PATH)/externalProjectFiles/include
LOCAL_SRC_FILES := projectLibNDK.c
LOCAL_SRC_FILES += $(LIBRARY_SRC_FOLDER:$(LOCAL_PATH)/%=%)
LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog -landroid
LOCAL_CFLAGS := -Wno-multichar -D_ANDROID -DLIBDIR="\"c\""
LOCAL_CFLAGS += -DUSE_TCP_LOOPBACK -DMDNS_UDS_SERVERPATH=\"/var/run/mdnsd\" -DIN_LIBRARY -DBUILDING_LIBICONV -DUSE_BONJOUR
LOCAL_CFLAGS += -DXR_TARGET_ANDROID -DKS_BUILDING_KS -Wno-psabi -Wno-multichar -D_GNU_SOURCE -DHAVE_IPV6=0 -DNOT_HAVE_SA_LEN
LOCAL_CFLAGS += -DUSES_NETLINK -DHAVE_LINUX -DTARGET_OS_LINUX
LOCAL_CPPFLAGS := -frtti -fexceptions
include $(BUILD_SHARED_LIBRARY)
ただし、projectLibNDC.cに最初のヘッダーを含めようとすると、「そのようなファイルまたはディレクトリはありません」というエラーが出力されます。
#include "externalFile.h"
私が取っているアプローチは可能な解決策ですか?
Android.mkファイル自体にファイルの相対パスを指定する必要がありますか?これは、参照されるファイルのローカルフォルダーを参照するのではなく、もう少し面倒です。
理論的には、この方法でNDKを介してライブラリを作成できるように思えます。しかし、おそらく私はプロジェクトを適切に設定していません。どんな補佐官も役に立ちます。JNIは時々私を振り回す傾向があります。
編集: Eclipse(これは素晴らしいIDEです)には、プロジェクト設定に保持されているリンクされたファイルへの参照の背後に接着剤がないようです。参照されたファイルをプロジェクトにドラッグすると、リンクされたファイルの存在を表すためにそれらのフォルダーに物理ファイルが配置されません。その情報は明らかにプロジェクト設定にのみ保存されます。これはAndroid.mkファイルには役立ちません。
これは、どのファイルまたはmakefileにも、どのファイルが含まれるべきかについての参照がないことを意味します。残念ながら、makefile自体から個別にフォルダとファイルを参照する必要があります。他のプログラマーからのそれらの存在へのヒントとして、プロジェクト内の参照を残すかもしれません。残念ながらそのようにデザインすることはできませんが、それが私がこれまでに受けた結論です。