कॉन्सेप्ट

शुरू करने से पहले

यह गाइड मान लेती है कि आपको पहले से ही और Android डेवलपमेंट में इस्तेमाल किए जाते हैं.

परिचय

इस सेक्शन में, एनडीके के काम करने के तरीके के बारे में बहुत अहम जानकारी दी गई है. Android एनडीके, ऐसे टूल जो आपको अपने Android ऐप्लिकेशन में C या C++ (“नेटिव कोड”) एम्बेड करने की सुविधा देते हैं. इस्तेमाल करने की क्षमता Android ऐप्लिकेशन में मौजूद नेटिव कोड, खास तौर पर उन डेवलपर के लिए मददगार साबित हो सकता है जो एक या उससे ज़्यादा काम करना चाहते हैं निम्न:

  • प्लैटफ़ॉर्म के बीच उनके ऐप्लिकेशन को पोर्ट करना.
  • मौजूदा लाइब्रेरी का फिर से इस्तेमाल करें या दोबारा इस्तेमाल करने के लिए अपनी लाइब्रेरी उपलब्ध कराएं.
  • कुछ मामलों में परफ़ॉर्मेंस बेहतर बनाने में मदद मिलती है. खास तौर पर, इस प्लैटफ़ॉर्म का इस्तेमाल ज़्यादा से ज़्यादा कंप्यूटेशन के लिए किया जा सकता है भी पसंद है.

यह कैसे काम करता है

इस सेक्शन में, नेटिव विज्ञापन बनाने में इस्तेमाल होने वाले मुख्य कॉम्पोनेंट के बारे में बताया गया है Android के लिए एक ऐप्लिकेशन बनाया है, जो उसे बनाने की प्रक्रिया और पैकेजिंग.

मुख्य कॉम्पोनेंट

अपना स्टैंडर्ड कैंपेन बनाते समय, आपको इन कॉम्पोनेंट की जानकारी होनी चाहिए ऐप्लिकेशन:

  • नेटिव शेयर की गई लाइब्रेरी: एनडीके इन लाइब्रेरी या .so फ़ाइलों को बनाता है C/C++ सोर्स कोड का इस्तेमाल करें.

  • नेटिव स्टैटिक लाइब्रेरी: एनडीके (NDK), स्टैटिक लाइब्रेरी या .a भी बना सकता है फ़ाइलें, जिन्हें अन्य लाइब्रेरी में लिंक किया जा सकता है.

  • Java नेटिव इंटरफ़ेस (जेएनआई): जेएनआई एक ऐसा इंटरफ़ेस है जिससे Java और C++ कॉम्पोनेंट एक-दूसरे से बात करते हैं. यह गाइड, जेएनआई की जानकारी पर आधारित है; इसके बारे में और जानने के लिए, Java नेटिव इंटरफ़ेस की खास बातें देखें.

  • ऐप्लिकेशन बाइनरी इंटरफ़ेस (एबीआई): एबीआई तय करता है कि आपका ऐप्लिकेशन मशीन कोड के रनटाइम के दौरान, सिस्टम के साथ इंटरैक्ट करने की उम्मीद की जाती है. द एनडीके इन परिभाषाओं के आधार पर .so फ़ाइलें बनाता है. अलग-अलग एबीआई, अलग-अलग आर्किटेक्चर: NDK में 32-बिट ARM, AArch64, x86, और x86-64. ज़्यादा जानकारी के लिए, Android एबीआई.

  • मेनिफ़ेस्ट: अगर आप कोई ऐसा ऐप्लिकेशन लिख रहे हैं जिसमें कोई Java कॉम्पोनेंट नहीं है, तो आपको NativeActivity क्लास का एलान मेनिफ़ेस्ट में होगा. देखें local_activity.h इंटरफ़ेस पर जाएं.

फ़्लो

Android के लिए खास ऐप्लिकेशन बनाने का सामान्य तरीका नीचे दिया गया है:

  1. यह तय करते हुए कि Java में कौनसे हिस्से लागू करने हैं और कौनसे हिस्से नेटिव कोड के तौर पर लागू करने के लिए.

  2. जैसा कि आप किसी दूसरे Android प्रोजेक्ट के लिए करते हैं, Android ऐप्लिकेशन प्रोजेक्ट बनाएं.

  3. अगर आपको सिर्फ़ नेटिव ऐप्लिकेशन के लिए अनुमति देनी है, तो NativeActivity क्लास का एलान AndroidManifest.xml. ज़्यादा जानकारी के लिए, नेटिव गतिविधियां और ऐप्लिकेशन में दिया गया है.

  4. स्थानीय लाइब्रेरी के बारे में जानकारी देने वाली एक Android.mk फ़ाइल बनाएं, जिसमें नाम, फ़्लैग, लिंक की गई लाइब्रेरी, और सोर्स फ़ाइलों को "JNI" में कंपाइल किया जाता है डायरेक्ट्री.

  5. इसके अलावा, टारगेट कॉन्फ़िगर करने वाली Application.mk फ़ाइल बनाई जा सकती है एबीआई, टूलचेन, रिलीज़/डीबग मोड, और एसटीएल. इनमें से हर उस गतिविधि के लिए जो आप करती हैं तय नहीं करने पर, नीचे दी गई डिफ़ॉल्ट वैल्यू का इस्तेमाल किया जाता है:

    • एबीआई: सभी बंद एबीआई
    • मोड: रिलीज़
    • STL: सिस्टम
  6. अपने नेटिव सोर्स को प्रोजेक्ट की jni डायरेक्ट्री में रखें.

  7. नेटिव (.so, .a) लाइब्रेरी को कंपाइल करने के लिए ndk-build का इस्तेमाल करें.

  8. एक्ज़ीक्यूटेबल .dex फ़ाइल बनाते हुए, Java कॉम्पोनेंट बनाएं.

  9. सभी चीज़ों को एक APK फ़ाइल में पैकेज करें, जिसमें .so, .dex वगैरह शामिल हों आपके ऐप्लिकेशन को चलाने के लिए ज़रूरी फ़ाइलें.

स्थानीय गतिविधियां और ऐप्लिकेशन

Android SDK टूल, हेल्पर क्लास, NativeActivity उपलब्ध कराता है. इससे, आपको इन कामों को करने में मदद मिलती है पूरी तरह नेटिव ऐक्टिविटी लिखें. NativeActivity कम्यूनिकेशन को मैनेज करती है को Android फ़्रेमवर्क और आपके स्थानीय कोड के बीच सेट कर सकते हैं, इसलिए आपको इसे सब-क्लास करें या इसकी मेथड को कॉल करें. आपको बस अपने आवेदन की जानकारी देनी होगी नेटिव फ़ॉर्मैट में सेट करने के बाद, AndroidManifest.xml फ़ाइल में नेटिव बनाएं और अपना नेटिव का इस्तेमाल करें.

NativeActivity का इस्तेमाल करने वाला Android ऐप्लिकेशन अब भी अपने वर्चुअल में चलता है अन्य ऐप्लिकेशन से सैंडबॉक्स किया गया हो. इसलिए, आपके पास अब भी JNI के ज़रिए Android फ़्रेमवर्क एपीआई. कुछ मामलों में, जैसे कि सेंसर के लिए, एनडीके ऐसे नेटिव इंटरफ़ेस उपलब्ध कराता है जिनका इस्तेमाल किया जा सकता है. कॉल करने की ज़रूरत नहीं पड़ती. ऐसे मामले में, सहायता के लिए, नेटिव एपीआई देखें.

इस बात से कोई फ़र्क़ नहीं पड़ता कि आपने अपनी निजी गतिविधि शुरू की है या नहीं, हमारा सुझाव है कि Android के पारंपरिक बिल्ड टूल से अपने प्रोजेक्ट तैयार किए जा सकते हैं. ऐसा करना यह पक्का करने में मदद करता है कि सही तरीके से Android ऐप्लिकेशन बनाए और पैकेजिंग किए जाएं स्ट्रक्चर.

Android एनडीके (NDK) आपको अपनी नेटिव गतिविधि लागू करने के दो विकल्प देता है:

  • Native_activity.h हेडर NativeActivity क्लास के नेटिव वर्शन के बारे में बताता है. इसमें कॉलबैक इंटरफ़ेस और डेटा स्ट्रक्चर जिसे आपको अपना मूल गतिविधि. क्योंकि आपके ऐप्लिकेशन का मुख्य थ्रेड कॉलबैक को हैंडल करता है, यह ज़रूरी है कि आपके कॉलबैक लागू करने की प्रोसेस ब्लॉक न हो. अगर वे ब्लॉक करते हैं, तो आपको ANR (ऐप्लिकेशन काम नहीं कर रहा है) गड़बड़ियां पाएं, क्योंकि आपका मुख्य थ्रेड यह है कॉलबैक के वापस आने तक प्रतिक्रिया नहीं देता.
  • android_native_app_glue.h फ़ाइल, स्टैटिक हेल्पर लाइब्रेरी के बारे में बताती है Native_activity.h इंटरफ़ेस में सबसे ऊपर. इससे एक और धागा पैदा होता है, जो इवेंट लूप में कॉलबैक या इनपुट इवेंट जैसी चीज़ें हैंडल करता है. घूम-फिर रहा है इन इवेंट को एक अलग थ्रेड में जोड़ दें, तो यह किसी भी कॉलबैक को मुख्य थ्रेड.

<ndk_root>/sources/android/native_app_glue/android_native_app_glue.c स्रोत भी उपलब्ध है, जिससे आप लागू करने की प्रक्रिया में बदलाव कर सकते है.

इस स्टैटिक लाइब्रेरी का इस्तेमाल करने के बारे में ज़्यादा जानने के लिए, नेटिव-ऐक्टिविटी सैंपल ऐप्लिकेशन और उसके दस्तावेज़. इसके बारे में और पढ़ें टिप्पणियों में भी देखा जा सकता है <ndk_root>/sources/android/native_app_glue/android_native_app_glue.h अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है फ़ाइल से लिए जाते हैं.

local_activity.h इंटरफ़ेस का इस्तेमाल करें

NATIVE_activity.h इंटरफ़ेस की नेटिव गतिविधि को लागू करने के लिए:

  1. अपने प्रोजेक्ट की रूट डायरेक्ट्री में jni/ डायरेक्ट्री बनाएं. यह डायरेक्ट्री आपके सभी नेटिव कोड स्टोर करता है.

  2. AndroidManifest.xml फ़ाइल में अपनी नेटिव गतिविधि का एलान करें.

    आपके ऐप्लिकेशन में कोई Java कोड मौजूद नहीं है, इसलिए android:hasCode को false पर सेट करें.

    <application android:label="@string/app_name" android:hasCode="false">
    

    आपको गतिविधि टैग के android:name एट्रिब्यूट को इस पर सेट करना होगा: NativeActivity.

    <activity android:name="android.app.NativeActivity"
              android:label="@string/app_name">
    

    meta-data टैग की android:value एट्रिब्यूट इसका नाम बताता है शेयर की गई लाइब्रेरी होती है, जिसमें ऐप्लिकेशन का एंट्री पॉइंट होता है (जैसे कि C/C++ main), लाइब्रेरी से lib प्रीफ़िक्स और .so सफ़िक्स को हटाकर, नाम.

    <manifest>
      <application>
        <activity>
          <meta-data android:name="android.app.lib_name"
                     android:value="native-activity" />
          <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
          </intent-filter>
        </activity>
      </application>
    </manifest>
    
  3. अपनी नेटिव गतिविधि के लिए फ़ाइल बनाएं और ANativeActivity_onCreate वैरिएबल. ऐप्लिकेशन इस फ़ंक्शन को तब कॉल करता है, जब नेटिव गतिविधि शुरू हो जाती है. C/C++ में मौजूद main के जैसा यह फ़ंक्शन, ये रिसीव करता है ANativeActivity स्ट्रक्चर का पॉइंटर, जिसमें फ़ंक्शन पॉइंटर होते हैं को लागू किया जा सकता है. सेट करें ANativeActivity->callbacks में लागू होने वाले कॉलबैक फ़ंक्शन पॉइंटर आपके कॉलबैक को लागू करने के तरीके की जानकारी.

  4. ANativeActivity->instance फ़ील्ड को यहां दिए गए किसी भी इंस्टेंस के पते पर सेट करें किस डेटा का इस्तेमाल करना है.

  5. गतिविधि शुरू करने के बाद, कोई अन्य कार्रवाई लागू करें.

  6. सेट किए गए बाकी कॉलबैक लागू करें ANativeActivity->callbacks. कॉलबैक कब होते हैं, इस बारे में ज़्यादा जानकारी कॉल किया गया डेटा देखने के लिए, गतिविधि की लाइफ़साइकल मैनेज करना लेख पढ़ें.

  7. अपने बाकी ऐप्लिकेशन को डेवलप करें.

  8. अपने प्रोजेक्ट की jni/ डायरेक्ट्री में Android.mk file बनाएं, ताकि बिल्ड सिस्टम में अपने नेटिव मॉड्यूल के बारे में बताएं. ज़्यादा जानकारी के लिए, यह देखें Android.mk.

  9. Android.mk फ़ाइल होने के बाद, ndk-build निर्देश.

    cd <path>/<to>/<project>
    $NDK/ndk-build
    
  10. हमेशा की तरह अपना Android प्रोजेक्ट बनाएं और इंस्टॉल करें. अगर आपका नेटिव कोड jni/ डायरेक्ट्री, बिल्ड स्क्रिप्ट अपने-आप .so को पैकेज कर देती है APK में बनाई गई फ़ाइल(फ़ाइलें) हो सकती है.

अतिरिक्त सैंपल कोड

एनडीके सैंपल डाउनलोड करने के लिए, एनडीके सैंपल देखें.