मैं लंबे समय से प्रोग्रामर हूं लेकिन एंड्रॉइड स्टूडियो में नया हूं। मुझे कुछ मौजूदा जेएनआई लाइब्रेरी कोड विरासत में मिला है जिसे एनडीके-बिल्ड के साथ चलाने का इरादा है जिसमें पहले से ही इसकी Android.mk फ़ाइल है। इसका पुन: उपयोग करना अच्छा होगा। जब मैंने एंड्रॉइड स्टूडियो के साथ एक नया प्रोजेक्ट खोला और सी ++ सपोर्ट फ्लैग सेट किया, तो उसने खुद को एनडीके-बिल्ड के बजाय सीएमके का उपयोग करने के लिए सेट किया। एंड्रॉइड स्टूडियो के लिए प्रलेखन कहता है कि दोनों उपलब्ध हैं इसलिए मैंने यह देखने के लिए एक साधारण परीक्षण का प्रयास करने का फैसला किया कि क्या मुझे वे सभी स्थान मिल गए हैं जिन्हें बदलने की आवश्यकता है। यह त्रुटि संदेशों के साथ पूरी तरह से विफल था जो कहीं नहीं ले जाते हैं।

फिर से बनाने के लिए, Android Studio के साथ एक नया प्रोजेक्ट ProjTest2 बनाएं और C++ सपोर्ट बॉक्स शामिल करें को चेक करें। एपीआई 16: एंड्रॉइड 4.1 के न्यूनतम एसडीके के साथ डिफ़ॉल्ट फोन और टैबलेट फॉर्म फैक्टर को स्वीकार करें। खाली गतिविधि चुनें। डिफ़ॉल्ट गतिविधि और लेआउट नाम स्वीकार करें। डिफ़ॉल्ट टूलचेन स्वीकार करें और अपवाद समर्थन या रनटाइम के लिए बॉक्स चेक न करें। प्रोग्राम चलाएं, डिवाइस चुनें Android एमुलेटर Nexus_5_API_24:5554. सब ठीक हैं; एम्यूलेटर स्क्रीन पर सी++ से हैलो संदेश प्राप्त करें।

Ndk-build में बदलने का प्रयास करें। मॉड्यूल के लिए बिल्ड.ग्रेड फ़ाइल खोलें: ऐप। लाइनें बदलें:

externalNativeBuild {
    cmake {
        path "CMakeLists.txt"
    }
}

साथ:

externalNativeBuild {
    ndkBuild {
        path "jni/Android.mk"
    }
}

निर्देशिका ProjTest2/app में एक नया फ़ोल्डर jni बनाएँ। निम्न सामग्री के साथ उस फ़ोल्डर में Android.mk फ़ाइल बनाएँ:

# A simple test for the minimal standard C++ library
#

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE := native-lib
LOCAL_SRC_FILES := $(LOCAL_PATH)/../src/main/cpp/native-lib.cpp
LOCAL_LDLIBS    := -llog -landroid
include $(BUILD_SHARED_LIBRARY)

बिल्ड अब यह दावा करने में विफल रहता है कि यह #include का लक्ष्य नहीं ढूंढ सकता है और यह कंटेनर 'std' को हल नहीं कर सकता है। मुझे लगता है कि मैं LOCAL_C_INCLUDES += C:\Users\JWC\AppData\Local\Android\sdk\ndk-bundle\sources\cxx-stl\gnu-libstdc++\4.9\include को एंड्रॉइड में जोड़कर आईडीई त्रुटि झंडे को साफ़ कर सकता हूं .mk फ़ाइल लेकिन परिणामी मेक अभी भी विफल हो जाता है जब इसे कुछ उप- से शामिल नहीं मिल पाता है।

क्या मुझे कुछ आसान याद आया, या यह उतना आसान नहीं है जितना लगता है कि यह होना चाहिए?

संपादित करें:

फ़ाइल भी चाहिए:

# Application.mk

APP_ABI := armeabi-v7a armeabi
APP_PLATFORM := android-21
APP_OPTIM := release

APP_STL := gnustl_static
0
JackOfAllTrades 31 जिंदा 2017, 22:50

1 उत्तर

सबसे बढ़िया उत्तर

सीएमके डिफ़ॉल्ट रूप से gnustl_static एसटीएल का उपयोग करता है, जबकि एनडीके-बिल्ड डिफ़ॉल्ट रूप से किसी का उपयोग नहीं करता है।

अपनी परियोजना में निम्नलिखित जोड़ें:

जेएनआई/एप्लीकेशन.एमके:

APP_STL := gnustl_static

इनमें से कुछ मुट्ठी भर उपलब्ध हैं। gnustl_static cmake उपयोग से मेल खाएगा, लेकिन आप आधिकारिक दस्तावेज़.

0
Dan Albert 1 फरवरी 2017, 01:28
ऐसा लगता है कि उस रेखा को जोड़ने से कोई असर नहीं पड़ता है। शामिल और वर्ग अभी भी अपरिभाषित हैं। मैंने $(CLEAR_VARS) लाइन शामिल करने के तुरंत बाद लाइन डाल दी। क्या प्लेसमेंट महत्वपूर्ण है?
 – 
JackOfAllTrades
1 फरवरी 2017, 19:32
जैसा कि मेरा उत्तर कहता है, इसे Application.mk में जाना है।
 – 
Dan Albert
1 फरवरी 2017, 22:19
हाँ मैं समझा। मैं पूरी तरह से Application.mk से चूक गया। मूल प्रश्न के संपादन में नोट की गई फ़ाइल को जोड़ने से यह ठीक हो गया। धन्यवाद।
 – 
JackOfAllTrades
1 फरवरी 2017, 23:02