android-ndk ट्यूटोरियल
Android-ndk के साथ आरंभ करना
खोज…
टिप्पणियों
Android NDK क्या है?
एंड्रॉइड नेटिव डेवलपमेंट किट (NDK) Android SDK का एक साथी उपकरण है जो C / C ++ में एप्लिकेशन के कुछ भाग बनाने की अनुमति देता है। इसके लिए उपयोगी है:
- प्लेटफार्मों (Android, iOS, Linux, आदि) में एप्लिकेशन घटकों को साझा करना
- महत्वपूर्ण भागों के लिए प्रदर्शन में सुधार
- मौजूदा C / C ++ पुस्तकालयों का पुन: उपयोग करना
NDK हेडर और लाइब्रेरी प्रदान करता है जो डेवलपर को गतिविधियों का निर्माण करने, उपयोगकर्ता इनपुट को संभालने, हार्डवेयर सेंसर का उपयोग करने, एप्लिकेशन संसाधनों का उपयोग करने, और अधिक - सभी C / C ++ में प्रोग्रामिंग करते समय प्रदान करता है।
संस्करण
सरल उदाहरण के साथ 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 के रूप में आउटपुट मिलेगा।
यह एनडीके शुरुआती के लिए बुनियादी कार्यक्रम है, ओपनसीवी लाइब्रेरी को यहां आयात किया जा सकता है और आप इमेज प्रोसेसिंग एप्लिकेशन भी कर सकते हैं।










