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

इस गाइड में बताया गया है कि Jetpack रिलीज़ के लिए, मेमोरी सलाह एपीआई Android Studio का इस्तेमाल कर रहे हैं.

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

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

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

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

अपने 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 ब्लॉक में एनडीके वर्शन तय करें:

     ndkVersion "23.1.7779620"
    

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

  4. CMake के लिए अतिरिक्त बिल्ड फ़्लैग बताएं. ऐसा करने के लिए, नीचे दिए गए कोड को defaultConfig ब्लॉक, जो android ब्लॉक के अंदर है:

     externalNativeBuild {
         cmake {
             cppFlags '-std=c++14'
             // c++_shared flavor is the only supported STL type.
             arguments "-DANDROID_STL=c++_shared"
         }
     }
    
  5. प्रीफ़ैब सुविधा चालू करें. Android Gradle प्लग इन(AGP) 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 Advile API के लिए हेडर फ़ाइलें और रनटाइम लाइब्रेरी जोड़ने का तरीका अपने प्रोजेक्ट में, अपने प्रोजेक्ट की मुख्य CMakeLists.txt फ़ाइल खोलें. इस प्रोजेक्ट पैनल में, फ़ाइल ऐप्लिकेशन > में है सोर्स > मुख्य > 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("memory_advice") को इससे जोड़ें System.loadLibrary("your-native-lib"). अपडेट ऐसा दिखना चाहिए निम्न:

     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 लाइब्रेरी, पक्का करें कि कॉलिंग थ्रेड को JavaVM से अटैच करें MemoryAdvice_init फ़ंक्शन को कॉल करने से पहले.

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

लाइब्रेरी की पोलिंग करके, अपने ऐप्लिकेशन की मेमोरी की स्थिति वापस पाई जा सकती है: का अंतराल है. इसका इस्तेमाल करें 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 को रजिस्टर करें. इससे आपके Watcher फ़ंक्शन को कॉल किया जा सकेगा जब राज्य या तो सीमा के करीब पहुंच जाता है या मेमोरी की स्थिति (लेकिन 'ठीक है' स्थिति के लिए नहीं). उदाहरण के लिए, यहां दिया गया कोड वॉचर बनाता है और हर दो सेकंड में, 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);

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

खास जानकारी वाला पेज देखें अन्य संसाधन और रिपोर्टिंग से जुड़ी समस्याओं के बारे में बताया जाता है.