ठीक है, अब मैं आपका संपादन देखता हूं, और इससे विशिष्ट प्रश्न का उत्तर देना संभव हो जाता है। आप एंड्रॉयड NDK उपयोग करने के लिए अपनी मूल पुस्तकालय/एँ निर्माण करना चाहते हैं, तो
आप चाहिए आपके आवेदन के लिए कम से कम एक Android.mk
फ़ाइल है। हालांकि, यह एक आवश्यकता नहीं है। हालांकि इसे बनाने के लिए ठीक है हालांकि सीमेक, या "पारंपरिक" मेकफ़ाइल के साथ "स्टैंडअलोन टूलचेन" या एमएस विजुअल स्टूडियो प्लगइन या किसी अन्य तरीके से। यह परिणाम है कि मायने रखता है। नतीजा एक साझा वस्तु है जो एक बायोनिक रनटाइम के लिए एक संगत कंपाइलर के साथ बनाया गया है।
यह ${project_root}/libs/armeabi/
निर्देशिका में पुस्तकालय डाल करने के लिए गुड समझ में आता है (एआरएम v6 संगत उपकरणों, x86 के लिए अन्य उप निर्देशिकाओं के लिए, MIPS, हाथ v7a) APK बिल्डर सही ढंग से पैक, ऐप्लिकेशन इंस्टॉलर सही संस्करण खोल करने की अनुमति की अनुमति के लिए (डिवाइस प्रोसेसर के साथ संगत) डिवाइस पर /data/data/${package_name}/lib
निर्देशिका में, और अंततः जावा से इसका उपयोग करने के लिए System.loadLibrary(short_name)
का उपयोग करने में सक्षम होने के लिए। लेकिन so
फ़ाइल को अलग-अलग पैक करना भी संभव है, इसे मैन्युअल रूप से अनपैक करें, और डिवाइस फ़ाइल सिस्टम पर किसी भी स्थान से लोड करें (बशर्ते आपके ऐप को इस फ़ाइल को लिखने और पढ़ने की अनुमति हो)।
लेकिन अगर हम विदेशी मामलों को फ़िल्टर करते हैं, तो ${project_root}/jni
निर्देशिका में एंड्रॉइड.एमके होना अधिक आरामदायक है। ndk-build
कमांड के मामले में, प्रत्येक लाइब्रेरी एक अलग मॉड्यूल है, लेकिन सभी तीन को एक Android.mk फ़ाइल में परिभाषित किया जा सकता है। दूसरी तरफ, यदि आपके पुस्तकालय अलग हैं (उदा। अलग तृतीय पक्षों से आते हैं), तो आप शायद तीन एंड्रॉइड.एमके फाइलें बनाना पसंद करेंगे। सौभाग्य से, ndk-build
gnu बनाने के आसपास एक रैपर के अलावा कुछ भी नहीं है, और एंड्रॉइड.एमके में सरल include
कथन किसी अन्य मेकफ़ाइल में काम करता है।
सारांश में, अपने मामले शायद एक सरल Applications/MyApplication/ [Application]/jni/Android.mk
फ़ाइल से आच्छादित है:
include ../../Libraries/libOne/Android.mk
include ../../Libraries/libTwo/Android.mk
include ../../Libraries/libThree/Android.mk
मैं क्या निर्भरता आप libOne और libTwo के बीच है पता नहीं है, लेकिन libOne के लिए फ़ाइल Libraries/libOne/Android.mk
तरह दिखेगा
LOCAL_PATH = $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := libOne
LOCAL_SRC_FILES := first.c
include $(BUILD_STATIC_LIBRARY)
और Libraries/libThree/Android.mk
LOCAL_PATH = $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := libThree
LOCAL_SRC_FILES := third.c
LOCAL_C_INCLUDES := $(LOCAL_PATH)/../libOne $(LOCAL_PATH)/../libTwo
LOCAL_STATIC_LIBRARIES := libOne libTwo
include $(BUILD_SHARED_LIBRARY)
आपको Applications/MyApplication/ [Application]
निर्देशिका से चलाएं - या तो कमांड प्रॉम्प्ट से, या ग्रहण एडीटी प्लगइन के माध्यम से।
अद्यतन ही jni
निर्देशिका में एक Android.mk
फ़ाइल द्वारा व्यक्त की जा सकती है:
LOCAL_PATH = ../../Libraries/libOne
include $(CLEAR_VARS)
LOCAL_MODULE := libOne
LOCAL_SRC_FILES := first.c
include $(BUILD_STATIC_LIBRARY)
LOCAL_PATH = ../../Libraries/libThree
include $(CLEAR_VARS)
LOCAL_MODULE := libThree
LOCAL_SRC_FILES := third.c
LOCAL_C_INCLUDES := $(LOCAL_PATH)/../libOne $(LOCAL_PATH)/../libTwo
LOCAL_STATIC_LIBRARIES := libOne libTwo
include $(BUILD_SHARED_LIBRARY)
आप अपने Android.mk बता सकते हैं? यह स्पष्ट नहीं है कि आप अपनी परियोजनाओं को कैसे स्थापित करते हैं। –
@AlexCohn मेरे पास अभी तक एक एंड्रॉइड.एमके काम नहीं है, यह समस्या है। मैं एक उत्तर की तलाश में हूं जो बताता है कि सभी तीन पुस्तकालयों को कैसे बनाया जाए और उन्हें मुख्य एप्लिकेशन से एक साथ जोड़ने के लिए कहा जाए। –
मैं समझता हूं कि आपके पास अभी तक एक एंड्रॉइड.एमके काम नहीं कर रहा है, लेकिन आपके पास अभी तक काम नहीं कर रहा है, है ना? –