2010-12-30 13 views
7

के साथ थर्डपार्टी libs (libs.a) को लिंक करना मैं एक एंड्रॉइड एपीके का निर्माण कर रहा हूं जो किसी तीसरे पक्ष के कुछ मूल पुस्तकालयों का उपयोग करता है, ये libs स्टेटिक ऑब्जेक्ट कोड लाइब्रेरी (.a फाइलें) में हैं और मुझे जेएनआई लिखना है इन कार्यों में जावा में पहुंचने के लिए रैपर।एनडीके

उन libs पहले से ही एक क्रॉस-कंपाइलर के साथ संकलित हैं और एंड्रॉइड के लिए मूल रूप से हैं।

मैं अपने जेएनआई स्रोतों को .a libs फ़ाइलों में कार्यों से जोड़ने का संकलन कैसे करूं?

यह मेरा Android.mk

LOCAL_PATH := $(call my-dir) 

include $(CLEAR_VARS) 

LOCAL_LDLIBS := -llog 

LOCAL_MODULE := ndk1 
LOCAL_SRC_FILES := native.c 

include $(BUILD_SHARED_LIBRARY) 

जब मैं संकलन, मैं केवल native.c फ़ाइल संकलित मिलता है।

उत्तर

10

ऐसा करने के लिए।

मुझे इन libs को मॉड्यूल के रूप में घोषित करना होगा। निम्नलिखित की तरह।

LOCAL_PATH := $(call my-dir) 

include $(CLEAR_VARS) 

LOCAL_MODULE := curl 
LOCAL_SRC_FILES := libcurl.a 
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include 

include $(PREBUILT_STATIC_LIBRARY) 
इस Android.mk फ़ाइल के रूप में एक ही फ़ोल्डर में एक libcurl.a फ़ाइल के साथ

, और एक/हेडर के साथ fodler शामिल हैं।

अब मुख्य मॉड्यूल में केवल lib की घोषणा करें और एंड्रॉइड एनडीके बाकी की देखभाल करेगा।

LOCAL_PATH := $(call my-dir) 

include $(call all-subdir-makefiles) 
include $(CLEAR_VARS) 

LOCAL_LDLIBS := -llog -ldl 
LOCAL_MODULE := rmsdk 
LOCAL_SRC_FILES := curlnetprovider.cpp native.c 
LOCAL_STATIC_LIBRARIES := curl 

include $(BUILD_SHARED_LIBRARY) 

नोट .. आपको इसका उपयोग करने से पहले मॉड्यूल की Android.mk फ़ाइल शामिल करनी चाहिए। मैं कॉल सब-सबडिर-मेकफ़ाइल के साथ करता हूं।

+2

साझा पुस्तकालयों (* .so) के साथ भी काम करता है। उदाहरण के लिए मैं सिर्फ "adb pull /system/lib/libsqlite.so" स्क्लाइट के खिलाफ लिंक करने के लिए। –

+0

मैं अलग-अलग तरीकों का प्रयास करता हूं लेकिन मुझे जवाब नहीं मिल रहा है कृपया http://stackoverflow.com/questions/7332679/cant-create-shared-library-with-static-inside –

+0

@Marcos पहले एक अलग मेकफ़ाइल है ?? यदि ऐसा है तो आपको इसे जोड़ना होगा और मुझे दूसरे भाग में पहली मेकफ़ाइल में कोई लिंक नहीं दिख रहा है ?? – jxgn

1

आपकी libs को आपके विशिष्ट लक्ष्य (आर्म) के लिए संकलित किया जाना है, ऐसा करने के लिए मुझे लगता है कि आपको दस्तावेज़/स्टैंडअलोन-TOOLCHAIN.html (आपके ndk-r5 फ़ोल्डर में) में वर्णित टूलचेन का उपयोग करना होगा।

+2

लाइब्रेरी पहले ही क्रॉस कंपाइलर टूलचेन्स का उपयोग करके विशिष्ट बांह पर संकलित है। –