Memory Advice API का इस्तेमाल शुरू करना

इस गाइड में, Android Studio का इस्तेमाल करके अपने ऐप्लिकेशन में Memory Advice API के Jetpack रिलीज़ को इंटिग्रेट करने का तरीका बताया गया है.

गेम को Memory Advice API के उस वर्शन का इस्तेमाल करना चाहिए जो उनके बिल्ड एनवायरमेंट के लिए सुझाया गया है. Android Studio के लिए, हमारा सुझाव है कि आप Jetpack रिलीज़ का इस्तेमाल करें. अन्य बिल्ड एनवायरमेंट, जैसे कि Android Game Development Extension (AGDE) के लिए रिलीज़ के बारे में जानकारी पाने के लिए, डिस्ट्रिब्यूशन देखें.

लाइब्रेरी जोड़ना

इस सेक्शन में, Android Studio (Android Gradle Plugin) प्रोजेक्ट में लाइब्रेरी जोड़ने का तरीका बताया गया है.

डिपेंडेंसी जोड़ना

अपनी Android Studio प्रोजेक्ट में लाइब्रेरी जोड़ने के लिए, यह तरीका अपनाएं:

  1. प्रोजेक्ट लेवल gradle.properties) में Android Jetpack लाइब्रेरी चालू करें. यह फ़ाइल आम तौर पर आपके प्रोजेक्ट की रूट डायरेक्ट्री में होती है:

      android.useAndroidX=true
    
  2. मॉड्यूल लेवल की build.gradle फ़ाइल खोलें और डिपेंडेंसी ब्लॉक में यहां दिया गया implementation जोड़ें. इससे आपके ऐप्लिकेशन में मेमोरी से जुड़ी सलाह देने वाले एपीआई की डिपेंडेंसी तय होती हैं.

     dependencies {
         implementation 'androidx.games:games-memory-advice:1.0.0-beta01'
     }
    
  3. android ब्लॉक में NDK का वर्शन डालें:

     ndkVersion "23.1.7779620"
    

    पक्का करें कि आपने NDK का ऐसा वर्शन चुना हो जो Memory Advice API के साथ काम करता हो. एनडीके के उन वर्शन की सूची Android Games Jetpack के रिलीज़ पेज पर उपलब्ध है जिनका इस्तेमाल किया जा सकता है.

  4. CMake के लिए, अतिरिक्त बिल्ड फ़्लैग के बारे में बताएं. इसके लिए, android ब्लॉक के अंदर मौजूद defaultConfig ब्लॉक में यह कोड जोड़ें:

     externalNativeBuild {
         cmake {
             cppFlags '-std=c++14'
             // c++_shared flavor is the only supported STL type.
             arguments "-DANDROID_STL=c++_shared"
         }
     }
    
  5. प्रीफ़ैब सुविधा चालू करें. Android Gradle प्लगिन(एजीपी) 4.1 या इसके बाद के वर्शन के लिए, android ब्लॉक में यह कोड जोड़ें:

     buildFeatures {
        prefab true
     }
    

    अगर AGP 4.0 या इससे पहले का वर्शन इस्तेमाल किया जा रहा है, तो कॉन्फ़िगरेशन के निर्देशों के लिए, प्रीफ़ैब पेज देखें.

  6. फ़ाइल सेव करें. अगर आपको यह मैसेज दिखता है, तो अपने प्रोजेक्ट को अपडेट करने के लिए, अभी सिंक करें बटन पर क्लिक करें:

      Gradle files have changed since last project sync. A project sync may be
      necessary for the IDE to work properly.
    

C/C++ बिल्ड के लिए CMake कॉन्फ़िगर करना

Memory Advice API के लिए हेडर फ़ाइलें और रनटाइम लाइब्रेरी को अपने प्रोजेक्ट में जोड़ने के लिए, अपने प्रोजेक्ट की मुख्य CMakeLists.txt फ़ाइल खोलें. प्रोजेक्ट पैन में, फ़ाइल app > src > main > cpp में है. फ़ाइल खोलने के बाद, यह तरीका अपनाएं:

  1. फ़ाइल में सबसे ऊपर, किसी भी cmake_minimum_required और project लाइन के बाद, यह लाइन जोड़ें:

     find_package(games-memory-advice REQUIRED CONFIG)
    
  2. target_link_libraries कमांड में, games-memory-advice::memory_advice जोड़ें. इससे Memory Advice API, आपके प्रोजेक्ट की नेटिव लाइब्रेरी के लिए डिपेंडेंसी बन जाता है. साथ ही, यह आपके ऐप्लिकेशन के फ़ाइनल पैकेज में शामिल हो जाता है. अपडेट कुछ ऐसा दिखना चाहिए:

     target_link_libraries(
         your-native-lib
    
         #link memory advice to the project
         games-memory-advice::memory_advice
    
         #rest of the dependencies
         #...
     )
    

Java फ़ाइलों को कॉन्फ़िगर करना

Memory Advice API के साथ शामिल की गई नेटिव लाइब्रेरी libmemory_advice.so है. यह आपके ऐप्लिकेशन की C/C++ शेयर की गई लाइब्रेरी के लिए, कंपाइलिंग डिपेंडेंसी है. साथ ही, जब आपका ऐप्लिकेशन System.loadlibrary() फ़ंक्शन के साथ अपनी शेयर की गई लाइब्रेरी लोड करता है, तब यह अपने-आप लोड हो जाती है.

यह चरण ज़रूरी नहीं है.

  1. अपने प्रोजेक्ट में वह Java कोड ढूंढें जो नेटिव लाइब्रेरी लोड करता है. अगर यह मौजूद नहीं है, तो इसे जोड़ें. कोड, System.loadLibrary("your-native-lib") जैसा दिखना चाहिए. यह static ब्लॉक में मौजूद होता है.

  2. System.loadLibrary("your-native-lib") में System.loadLibrary("memory_advice") जोड़ें. अपडेट कुछ ऐसा दिखना चाहिए:

     static {
         System.loadLibrary("your-native-lib");
         // Note: loading libmemory_advice.so is optional.
         System.loadLibrary("memory_advice");
     }
    

लाइब्रेरी का इस्तेमाल करना

इस सेक्शन में, लाइब्रेरी को इस्तेमाल करने का तरीका बताया गया है.

हेडर फ़ाइलें जोड़ना

अपने प्रोजेक्ट में, इस लाइब्रेरी हेडर फ़ाइल को शामिल करें:

    #include <memory_advice/memory_advice.h>

लाइब्रेरी शुरू करना

ऐप्लिकेशन शुरू होने पर, आपको लाइब्रेरी को एक बार शुरू करना होगा. इसके लिए, अपने प्रोजेक्ट में यह कोड जोड़ें:

    MemoryAdvice_init(env, activity);

env और activity पैरामीटर, JNIEnv* और jobject वैरिएबल हैं. ये आपकी नेटिव लाइब्रेरी में उपलब्ध होने चाहिए. आपकी नेटिव लाइब्रेरी को किए गए हर JNI कॉल में ये वैरिएबल होने चाहिए. अगर GameActivity लाइब्रेरी का इस्तेमाल किया जा रहा है, तो MemoryAdvice_init फ़ंक्शन को कॉल करने से पहले, कॉलिंग थ्रेड को JavaVM से अटैच करना न भूलें.

मेमोरी की स्थिति के लिए पोल

अपनी पसंद के इंटरवल पर लाइब्रेरी को पोल करके, अपने ऐप्लिकेशन की मेमोरी की स्थिति को वापस लाया जा सकता है. जब भी आपको लाइब्रेरी को पोल करने की ज़रूरत हो, तब MemoryAdvice_getMemoryState फ़ंक्शन का इस्तेमाल करें:

    MemoryAdvice_MemoryState state = MemoryAdvice_getMemoryState();
    switch (state) {
      case MEMORYADVICE_STATE_OK:
        // The application can safely allocate significant memory.
        break;
      case MEMORYADVICE_STATE_APPROACHING_LIMIT:
        //The application should minimize memory allocation.
        break;
      case MEMORYADVICE_STATE_CRITICAL:
        // The application should free memory as soon as possible,
        // until the memory state changes.
        break;
    }

निगरानी करने वाले व्यक्ति का खाता सेट अप करना

वॉचर सेट अप किया जा सकता है. साथ ही, Memory Advice API को रजिस्टर किया जा सकता है. इसके बाद, जब स्थिति सीमा के करीब पहुंच रही होगी या मेमोरी की गंभीर स्थिति में होगी, तब वॉचर फ़ंक्शन को कॉल किया जाएगा. हालांकि, सामान्य स्थिति में ऐसा नहीं होगा. उदाहरण के लिए, यह कोड एक वॉचर बनाता है और हर दो सेकंड में Memory Advice API से सूचना पाने का अनुरोध करता है:

    static int USER_DATA;
    constexpr int callback_waittime_ms = 2000;

    void callback(MemoryAdvice_MemoryState state, void* context) {
        switch (state) {
          case MEMORYADVICE_STATE_APPROACHING_LIMIT:
            //The application should minimize memory allocation.
            break;
          case MEMORYADVICE_STATE_CRITICAL:
            // The application should free memory as soon as possible,
            // until the memory state changes.
            break;
        }
    }

    MemoryAdvice_registerWatcher(callback_waittime_ms, callback, &USER_DATA);

अगला कदम क्या है

अन्य संसाधनों और समस्याओं की शिकायत करने के लिए, खास जानकारी देखें.