মেমরি অ্যাডভাইস API দিয়ে শুরু করুন

অ্যান্ড্রয়েড স্টুডিও ব্যবহার করে আপনার অ্যাপে মেমরি অ্যাডভাইস এপিআই -এর জেটপ্যাক রিলিজকে কীভাবে সংহত করতে হয় তা এই নির্দেশিকাটি বর্ণনা করে।

গেমগুলির মেমরি অ্যাডভাইস API রিলিজ ব্যবহার করা উচিত যা তাদের বিল্ড পরিবেশের জন্য সুপারিশ করা হয়। অ্যান্ড্রয়েড স্টুডিওর জন্য, আমরা জেটপ্যাক রিলিজের সুপারিশ করি। অন্যান্য বিল্ড এনভায়রনমেন্টের জন্য রিলিজ সম্পর্কে তথ্যের জন্য, যেমন Android গেম ডেভেলপমেন্ট এক্সটেনশন (AGDE), ডিস্ট্রিবিউশন দেখুন।

লাইব্রেরি যোগ করুন

এই বিভাগে আপনার অ্যান্ড্রয়েড স্টুডিও (অ্যান্ড্রয়েড গ্রেডল প্লাগইন) প্রকল্পে লাইব্রেরি কীভাবে যুক্ত করবেন তা বর্ণনা করে।

নির্ভরতা যোগ করুন

আপনার অ্যান্ড্রয়েড স্টুডিও প্রকল্পে লাইব্রেরি যোগ করতে, নিম্নলিখিত পদক্ষেপগুলি সম্পূর্ণ করুন:

  1. প্রজেক্ট লেভেল gradle.properties এ অ্যান্ড্রয়েড জেটপ্যাক লাইব্রেরি সক্ষম করুন ), ফাইলটি সাধারণত আপনার প্রোজেক্টের রুট ডিরেক্টরিতে থাকে:

      android.useAndroidX=true
    
  2. মডিউল স্তরের build.gradle ফাইলটি খুলুন এবং নির্ভরতা ব্লকে নিম্নলিখিত implementation যোগ করুন। এটি আপনার অ্যাপে মেমরি পরামর্শ API নির্ভরতা ঘোষণা করে।

     dependencies {
         implementation 'androidx.games:games-memory-advice:1.0.0-beta01'
     }
    
  3. android ব্লকের ভিতরে NDK সংস্করণ নির্দিষ্ট করুন:

     ndkVersion "23.1.7779620"
    

    মেমরি অ্যাডভাইস API-এর সাথে সামঞ্জস্যপূর্ণ NDK-এর একটি সংস্করণ বেছে নেওয়ার বিষয়টি নিশ্চিত করুন। সমর্থিত NDK সংস্করণগুলির একটি তালিকা অ্যান্ড্রয়েড গেমস জেটপ্যাক রিলিজ পৃষ্ঠায় উপলব্ধ।

  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. Prefab বৈশিষ্ট্য সক্রিয় করুন. অ্যান্ড্রয়েড গ্রেডল প্লাগইন (এজিপি) 4.1 বা তার বেশির জন্য, android ব্লকে নিম্নলিখিত কোড যোগ করুন:

     buildFeatures {
        prefab true
     }
    

    আপনি যদি AGP 4.0 বা তার বেশি ব্যবহার করেন, তাহলে কনফিগারেশন নির্দেশাবলীর জন্য Prefab পৃষ্ঠাটি দেখুন।

  6. ফাইলটি সংরক্ষণ করুন। আপনি যদি নিম্নলিখিত বার্তাটি দেখতে পান, আপনার প্রকল্প আপডেট করতে এখন সিঙ্ক বোতামটি ক্লিক করুন:

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

C/C++ বিল্ডের জন্য CMake কনফিগার করুন

আপনার প্রকল্পে মেমরি অ্যাডভাইস API-এর জন্য হেডার ফাইল এবং রানটাইম লাইব্রেরি যোগ করতে, আপনার প্রকল্পের প্রধান CMakeLists.txt ফাইল খুলুন। প্রজেক্ট প্যানে, ফাইলটি অ্যাপ > src > main > cpp এ রয়েছে। ফাইল খোলার পরে, নিম্নলিখিত পদক্ষেপগুলি সম্পাদন করুন:

  1. ফাইলের শীর্ষের কাছে, যেকোনো cmake_minimum_required এবং project লাইনের পরে নিম্নলিখিত লাইন যোগ করুন:

     find_package(games-memory-advice REQUIRED CONFIG)
    
  2. target_link_libraries কমান্ডে, games-memory-advice::memory_advice যোগ করুন। এটি মেমরি অ্যাডভাইস এপিআইকে আপনার প্রকল্পের নেটিভ লাইব্রেরির উপর নির্ভরশীল করে তোলে এবং এটি আপনার চূড়ান্ত অ্যাপ্লিকেশন প্যাকেজে অন্তর্ভুক্ত করে। আপডেট নিম্নলিখিত অনুরূপ দেখতে হবে:

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

জাভা ফাইল কনফিগার করুন

মেমরি অ্যাডভাইস API এর সাথে অন্তর্ভুক্ত নেটিভ লাইব্রেরি হল libmemory_advice.so । এটি আপনার অ্যাপের নিজস্ব C/C++ শেয়ার্ড লাইব্রেরির জন্য একটি কম্পাইলিং নির্ভরতা, এবং যখন আপনার অ্যাপ System.loadlibrary() ফাংশনের সাথে নিজস্ব শেয়ার্ড লাইব্রেরি লোড করে তখন স্বয়ংক্রিয়ভাবে লোড হয়।

এই ধাপটি ঐচ্ছিক।

  1. আপনার প্রকল্পে জাভা কোড খুঁজুন যা নেটিভ লাইব্রেরি লোড করে। যদি এটি বিদ্যমান না থাকে তবে এটি যোগ করুন। কোডটি System.loadLibrary("your-native-lib") এর মতো দেখতে হবে এবং এটি একটি static ব্লকে অবস্থিত।

  2. System.loadLibrary 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;
    }

একটি প্রহরী সেট আপ করুন

এছাড়াও আপনি একটি প্রহরী সেট আপ করতে পারেন এবং মেমরি অ্যাডভাইস API নিবন্ধন করতে পারেন, এবং আপনার প্রহরী ফাংশন কল করা হবে যখন রাজ্যটি হয় সীমার কাছাকাছি চলে আসে বা গুরুতর মেমরির অবস্থা (কিন্তু ঠিক অবস্থায় নয়)। উদাহরণস্বরূপ, নিম্নলিখিত কোডটি একজন প্রহরী তৈরি করে এবং প্রতি 2 সেকেন্ডে একটি মেমরি অ্যাডভাইস 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);

এরপর কি

অতিরিক্ত সংস্থান এবং রিপোর্টিং সমস্যাগুলির জন্য ওভারভিউ দেখুন।