खोज…


टिप्पणियों

Android NDK क्या है?

एंड्रॉइड नेटिव डेवलपमेंट किट (NDK) Android SDK का एक साथी उपकरण है जो C / C ++ में एप्लिकेशन के कुछ भाग बनाने की अनुमति देता है। इसके लिए उपयोगी है:

  • प्लेटफार्मों (Android, iOS, Linux, आदि) में एप्लिकेशन घटकों को साझा करना
  • महत्वपूर्ण भागों के लिए प्रदर्शन में सुधार
  • मौजूदा C / C ++ पुस्तकालयों का पुन: उपयोग करना

NDK हेडर और लाइब्रेरी प्रदान करता है जो डेवलपर को गतिविधियों का निर्माण करने, उपयोगकर्ता इनपुट को संभालने, हार्डवेयर सेंसर का उपयोग करने, एप्लिकेशन संसाधनों का उपयोग करने, और अधिक - सभी C / C ++ में प्रोग्रामिंग करते समय प्रदान करता है।

संस्करण

संस्करण रिलीज़ की तारीख
r12 2016/06/09
r11 2016/03/09
R10 2014-07-01

सरल उदाहरण के साथ Android NDK के साथ शुरुआत करना

Android Studio 2.2 और उच्चतर नेटिव डेवलपमेंट किट (NDK) का उपयोग करके आप C और C ++ कोड संकलित कर सकते हैं।

आप NDK को मैन्युअल रूप से डाउनलोड करके और इसे CMake के द्वारा NDK का उपयोग कर सकते हैं।

यहां मैं मैन्युअल रूप से एनडीके और एक उदाहरण कोड स्थापित करने के लिए प्रक्रिया प्रवाह दूंगा,

आपके सिस्टम OS के आधार पर आप इस स्थान से NDK को डाउनलोड कर सकते हैं https://developer.android.com/ndk/downloads/index.html

डाउनलोड करने के बाद, सिस्टम पर्यावरण चर में चर नाम " NDK_PROJECT_PATH " और चर मान "NDK संग्रहीत पथ का स्थान" के रूप में दें।

  • एनडीके को एंड्रॉइड स्टूडियो के साथ एकीकृत करने के लिए, एक नया एंड्रॉइड प्रोजेक्ट बनाने के बाद,

    ढाल में - स्थानीय गुण जैसे sdk पथ का स्थान जोड़ते हैं

     sdk.dir=F\:\\gowtham\\Android\\sdk
    

    तथा

      android.useDeprecatedNdk = true
    
  • फिर, बिल्ड बनाएँ - प्रोजेक्ट (Ctrl + f9) बनाएँ।

    आपका प्रोजेक्ट सफलतापूर्वक बन जाएगा और नीचे दिए गए संदेश के आधार पर मैसेजिंग बिल्ड में BUILD SUCCESFUL मिलेगा

यहाँ छवि विवरण दर्ज करें

फिर टर्मिनल में, शुरू में इसमें प्रोजेक्ट का पथ शामिल होगा

वहाँ cd app/src/main

पथ परियोजना पथ से मुख्य तक विस्तारित होगा।

अगला, फिर से बनाएँ - प्रोजेक्ट बनाएं (Ctrl + f9)।

अब आपको ऐप-बिल्ड-इंटरमीडिएट-क्लास-डीबग फ़ोल्डर के नीचे मिलेगा, जैसा कि नीचे दिखाया गया है।

यहाँ छवि विवरण दर्ज करें

अब, एक ऐप / src / main / java के तहत एक नई जावा क्लास फ़ाइल बनाएँ, यहाँ मैंने NativeClass नाम की जावा फ़ाइल बनाई है

यहाँ छवि विवरण दर्ज करें

फ़ंक्शन के लिए फ़ंक्शन नाम और इनपुट के साथ एक साधारण कॉलिंग फ़ंक्शन लिखें, यहां मैंने फ़ंक्शन को उदाहरण के रूप में लिखा है और इसे दो पूर्णांक इनपुट दिए हैं,

यहाँ छवि विवरण दर्ज करें

प्रोजेक्ट को फिर से बनाएँ (Ctrl + f9) ,

जब आप निर्माण करते हैं, तो आपको इस तरह निर्मित बिल्ड के तहत वर्ग फ़ाइल मिलेगी,

यहाँ छवि विवरण दर्ज करें

Then,in terminal 
    `-Javah  -d  jni –classpath ../../build/intermediates/classes/debug`application.com.ndkapplication.NativeClass

जहाँ, - d - आउटपुट डायरेक्टरी के लिए - jni -Generate JNI- स्टाइल हेडर फ़ाइल (डिफ़ॉल्ट) - क्लासपैथ - जिसके लिए कक्षाएं लोड करना

अब प्रोजेक्ट (Ctrl + f9) का निर्माण करें, आपको बनाया गया jni फोल्डर मिलेगा और एक हेडर फाइल बनाई जाएगी, जिसका नाम आपने टर्मिनल में निर्दिष्ट किया है, जैसा कि नीचे दिखाया गया है।

यहाँ छवि विवरण दर्ज करें

अब हेडर फाइल को कॉपी करें और जेनी फोल्डर में हेडर फाइल के .cpp या .c फाइल को सेव करें।

मैंने नीचे दिखाए अनुसार cpp फ़ाइल बनाई

यहाँ छवि विवरण दर्ज करें

Delete everything before **JNIEXPORT line** in this file and **add header file name** alone.
Here I am for simple example just adding two numbers and returning value to android java.

Application_com_ndkapplication_NativeClass.cpp

 #include <application_com_ndkapplication_NativeClass.h>

JNIEXPORT jint JNICALL Java_application_com_ndkapplication_NativeClass_example
  (JNIEnv *, jclass , jint as , jint bs){

    return (as + bs);

    }

और इस उदाहरण के लिए इसके हेडर फ़ाइल में कोई फ़ंक्शन जोड़ने की आवश्यकता नहीं है।

Jni फोल्डर में Android.mk और Application.mk नाम से एक नई फाइल बनाएं

Android.mk फ़ाइल बिल्ड सिस्टम के लिए आपके स्रोतों का वर्णन करने के लिए है।

Android.mk

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_SRC_FILES := application_com_ndkapplication_NativeClass.cpp

LOCAL_LDLIBS += -llog

LOCAL_MODULE := exp-jni

include $(BUILD_SHARED_LIBRARY)

इस लिंक से पढ़ी गई फाइल के बारे में विस्तार से जानने के लिए https://developer.android.com/ndk/guides/android_mk.html

यहाँ छवि विवरण दर्ज करें

Application.mk जो मूल मॉड्यूल का वर्णन करता है जो आपके ऐप की आवश्यकता है।

Application.mk

APP_STL := gnustl_static

APP_CPPFLAGS := -frtti –fexceptions

APP_ABI := armeabi-v7a armeabi arm64-v8a mips mips64 x86 x86_64

APP_PLATFORM := android-16

इस लिंक से पढ़ी जाने वाली फाइल के बारे में विस्तार से जानने के लिए https://developer.android.com/ndk/guides/application_mk.html

यहाँ छवि विवरण दर्ज करें

 Now build the project again **(Ctrl + f9)**, you will find the **armeabi-v7a, armeabi, arm64-v8a ,mips, mips64, x86 and x86_64** folder created inside jniLibs.

फिर, मुख्य गतिविधि में इनपुट पास करें और मूल वर्ग फ़ाइल के लिए आउटपुट प्राप्त करें।

int a = 5, b = 5, res ;

res = NativeClass.example(((int) a),((int) b));

TextView textView = (TextView) this.findViewById(R.id.tv);

textView.setText(new Integer(res).toString());

यहाँ मैंने a, b के माध्यम से दो पूर्णांक इनपुट दिए और चर रेस से आउटपुट प्राप्त किया।

और प्राप्त आउटपुट को टेक्स्ट व्यू में पास करके स्क्रीन में प्रदर्शित किया जाता है।

और इस तरह LOCAL_MODULE के रूप में Android.mk फ़ाइल में निर्दिष्ट लाइब्रेरी को जोड़ना न भूलें।

static {
        System.loadLibrary("exp-jni");
  }

अंत में प्रोजेक्ट को फिर से बनाएं (Ctrl + f9), आपको प्रत्येक armeabi-v7a, armeabi, arm64-v8a, mips, mips64, x86 और x86_64 फ़ोल्डर के तहत बनाई गई .so फाइलें मिलेंगी।

यहाँ छवि विवरण दर्ज करें

फिर अब एप्लिकेशन चलाएं, आपको इस उदाहरण के लिए 10 के रूप में आउटपुट मिलेगा।

यहाँ छवि विवरण दर्ज करें

यह एनडीके शुरुआती के लिए बुनियादी कार्यक्रम है, ओपनसीवी लाइब्रेरी को यहां आयात किया जा सकता है और आप इमेज प्रोसेसिंग एप्लिकेशन भी कर सकते हैं।



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow