2012-09-23 17 views
7

ndk kullanarak bir 3. parti kütüphanesi avahi kurmak istiyorum. avahi zaten android portu var (geçerli Android.mk ile).ndk kütüphane ana proje kaynak ağacı dışında

Ne yaptım: Bir projeyi başarıyla oluşturdum ve tüm kaynak kodunu jni/klasörüne kopyalayıp ndk-build'i çalıştırdım. Bu, libavahi.so oluşturur

Ne yapmak isterim: Tüm kaynak kodunu jni/klasörüne kopyalamak yerine, bunu proje kaynak ağacının dışındaki bir klasörde saklamak istiyorum. Ne yapmalıyım? NDK DOKÜMANTASYONU/İthalat Modülüne baktım ama hiçbir şey benim durumumla aynı değil.

ndk'deki yeni kullanıcı ve herhangi bir öneri memnuniyetle karşılanır.

cevap

5

Haklısınız, bu İçe Aktarım Modülü örneğidir. Eğer yerel koddan avihi kitaplığı başvuru yolu hala LOCAL_SHARED_LIBRARIES olarak (NDK örnek module-exports bakınız) olacaktır. Ancak, jni/Android.mk dosyanızda, include komutunu başka bir dosyaya kullanabilirsiniz. Bu komut, C'daki #include ifadesine çok benzer. Bu dosya proje ağacınızın içinde olmamalıdır. Aynı örneği alarak, burada işe nasıl olduğunu:

Orjinal 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) 

olarak bakacağız değiştirilen dosya aşağıdaki gibidir:

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) 

Ve harici bar/jni/Android.mk aşağıdaki gibidir:

Şimdi, bar.c ve foo.c dosyalarının her ikisi de hayvanat bahçesi projesinin ağacının dışında tutulabilir!