2012-09-23 3 views
7

ndk를 사용하여 타사 라이브러리 avahi를 작성하려고합니다. avahi는 이미 Android 포트가 있습니다 (유효한 Android.mk 포함).기본 프로젝트 소스 트리 외부에 ndk 빌드 라이브러리

내가 수행 한 작업 : 프로젝트를 성공적으로 작성하고 모든 소스 코드를 jni/폴더에 복사하고 ndk-build를 실행했습니다. libavahi.so를 빌드합니다.

내가 원하는 것 : 모든 소스 코드를 jni/폴더에 복사하는 대신 프로젝트 소스 트리 외부의 폴더에 저장하고 싶습니다. 내가 무엇을하여야한다? 나는 NDK DOCUMENTATION/Import Module을 살펴 보았지만 나의 경우와 비슷한 것은 아무것도 없다.

새내기가 ndk에 있으며 모든 제안을 환영합니다.

답변

5

맞습니다. 수입 모듈의 경우가 아닙니다. avihi 라이브러리를 원시 코드에서 참조하는 방식은 LOCAL_SHARED_LIBRARIES입니다 (NDK 예제 module-exports 참조). 그러나 jni/Android.mk 파일에서 include 명령을 다른 파일에 사용할 수 있습니다. 이 명령은 문과 매우 유사합니다 ().입니다. 이 파일은 프로젝트 트리 안에있을 필요가 없습니다. 같은 샘플을 가지고 가서, 여기 그것이 작동하는 방법이다 :

원래 Android.mk from samples/module-exports/jni :

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) 

그리고 외부 바/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 파일을 동물원 프로젝트의 트리 바깥에 보관할 수 있습니다!