Android NDK ক্র্যাশ রিপোর্ট পান

যদি আপনার Android অ্যাপে নেটিভ লাইব্রেরি থাকে, তাহলে আপনি আপনার অ্যাপের বিল্ড কনফিগারেশনে কয়েকটি ছোট আপডেট সহ Firebase Crashlytics থেকে আপনার নেটিভ কোডের জন্য সম্পূর্ণ স্ট্যাক ট্রেস এবং বিস্তারিত ক্র্যাশ রিপোর্ট সক্ষম করতে পারেন।

NDK-এর জন্য Firebase Crashlytics SDK-এর সাথে কীভাবে ক্র্যাশ রিপোর্টিং কনফিগার করতে হয় এই নির্দেশিকাটি বর্ণনা করে।

আপনি যদি আপনার ইউনিটি প্রকল্পগুলিতে Crashlytics সাথে কীভাবে শুরু করবেন তা সন্ধান করছেন, ইউনিটি শুরু করার নির্দেশিকাটি দেখুন।

আপনি শুরু করার আগে

  1. যদি আপনি ইতিমধ্যে না করে থাকেন, তাহলে আপনার Android প্রকল্পে Firebase যোগ করুন । আপনার যদি অ্যান্ড্রয়েড অ্যাপ না থাকে, তাহলে আপনি একটি নমুনা অ্যাপ ডাউনলোড করতে পারেন।

  2. প্রস্তাবিত : ক্র্যাশ, নন-ফেটাল বা ANR ইভেন্ট পর্যন্ত ব্যবহারকারীর অ্যাকশন বোঝার জন্য স্বয়ংক্রিয়ভাবে ব্রেডক্রাম্ব লগ পেতে, আপনাকে আপনার Firebase প্রোজেক্টে Google Analytics সক্ষম করতে হবে।

    • যদি আপনার বিদ্যমান ফায়ারবেস প্রকল্পে Google Analytics সক্ষম না থাকে, তাহলে আপনি আপনার ইন্টিগ্রেশন ট্যাব থেকে Google Analytics সক্ষম করতে পারেন > Firebase কনসোলে প্রকল্প সেটিংস

    • আপনি যদি একটি নতুন ফায়ারবেস প্রজেক্ট তৈরি করেন, তাহলে প্রোজেক্ট তৈরির ওয়ার্কফ্লো চলাকালীন Google Analytics সক্ষম করুন।

  3. নিশ্চিত করুন যে আপনার অ্যাপে নিম্নলিখিত ন্যূনতম প্রয়োজনীয় সংস্করণ রয়েছে:

    • গ্রেডেল 8.0
    • অ্যান্ড্রয়েড গ্রেডল প্লাগইন 8.1.0
    • Google পরিষেবা গ্রেডল প্লাগইন 4.4.1

ধাপ 1 : আপনার অ্যাপে NDK-এর জন্য Crashlytics SDK যোগ করুন

আপনার মডিউলে (অ্যাপ-লেভেল) গ্রেডল ফাইলে (সাধারণত <project>/<app-module>/build.gradle.kts বা <project>/<app-module>/build.gradle ), Android এর জন্য Crashlytics NDK লাইব্রেরির নির্ভরতা যোগ করুন। আমরা লাইব্রেরি সংস্করণ নিয়ন্ত্রণ করতে Firebase Android BoM ব্যবহার করার পরামর্শ দিই।

Crashlytics সাথে একটি সর্বোত্তম অভিজ্ঞতার জন্য, আমরা আপনার Firebase প্রকল্পে Google Analytics সক্ষম করার এবং আপনার অ্যাপে Google Analytics-এর জন্য Firebase SDK যোগ করার পরামর্শ দিই।

dependencies {
    // Import the BoM for the Firebase platform
    implementation(platform("com.google.firebase:firebase-bom:33.9.0"))

    // Add the dependencies for the Crashlytics NDK and Analytics libraries
    // When using the BoM, you don't specify versions in Firebase library dependencies
    implementation("com.google.firebase:firebase-crashlytics-ndk")
    implementation("com.google.firebase:firebase-analytics")
}

Firebase Android BoM ব্যবহার করে, আপনার অ্যাপ সবসময় Firebase Android লাইব্রেরির সামঞ্জস্যপূর্ণ সংস্করণ ব্যবহার করবে।

আপনি যদি Firebase BoM ব্যবহার না করা বেছে নেন, তাহলে আপনাকে অবশ্যই প্রতিটি Firebase লাইব্রেরি সংস্করণ তার নির্ভরতা লাইনে উল্লেখ করতে হবে।

মনে রাখবেন যে আপনি যদি আপনার অ্যাপে একাধিক ফায়ারবেস লাইব্রেরি ব্যবহার করেন, আমরা দৃঢ়ভাবে লাইব্রেরি সংস্করণগুলি পরিচালনা করতে BoM ব্যবহার করার পরামর্শ দিই, যা নিশ্চিত করে যে সমস্ত সংস্করণ সামঞ্জস্যপূর্ণ।

dependencies {
    // Add the dependencies for the Crashlytics NDK and Analytics libraries
    // When NOT using the BoM, you must specify versions in Firebase library dependencies
    implementation("com.google.firebase:firebase-crashlytics-ndk:19.4.0")
    implementation("com.google.firebase:firebase-analytics:22.2.0")
}
একটি কোটলিন-নির্দিষ্ট লাইব্রেরি মডিউল খুঁজছেন? অক্টোবর 2023 থেকে শুরু হচ্ছে ( Firebase BoM 32.5.0) , Kotlin এবং Java ডেভেলপাররা প্রধান লাইব্রেরি মডিউলের উপর নির্ভর করতে পারে (বিশদ বিবরণের জন্য, এই উদ্যোগ সম্পর্কে প্রায়শই জিজ্ঞাসিত প্রশ্ন দেখুন)।

ধাপ 2 : আপনার অ্যাপে Crashlytics Gradle প্লাগইন যোগ করুন

  1. আপনার রুট-লেভেলে (প্রজেক্ট-লেভেল) গ্রেডল ফাইলে ( <project>/build.gradle.kts বা <project>/build.gradle ), plugins ব্লকে Crashlytics Gradle প্লাগইন যোগ করুন:

    KotlinGroovy
    plugins {
        // Make sure that you have the AGP plugin 8.1+ dependency
        id("com.android.application") version "8.1.4" apply false
        // ...
    
        // Make sure that you have the Google services Gradle plugin 4.4.1+ dependency
        id("com.google.gms.google-services") version "4.4.2" apply false
    
        // Add the dependency for the Crashlytics Gradle plugin
        id("com.google.firebase.crashlytics") version "3.0.3" apply false
    }
    plugins {
        // Make sure that you have the AGP plugin 8.1+ dependency
        id 'com.android.application' version '8.1.4' apply false
        // ...
    
        // Make sure that you have the Google services Gradle plugin 4.4.1+ dependency
        id 'com.google.gms.google-services' version '4.4.2' apply false
    
        // Add the dependency for the Crashlytics Gradle plugin
        id 'com.google.firebase.crashlytics' version '3.0.3' apply false
    }
  2. আপনার মডিউলে (অ্যাপ-লেভেল) গ্রেডল ফাইলে (সাধারণত <project>/<app-module>/build.gradle.kts বা <project>/<app-module>/build.gradle ), Crashlytics Gradle প্লাগইন যোগ করুন:

    KotlinGroovy
    plugins {
      id("com.android.application")
      // ...
    
      // Make sure that you have the Google services Gradle plugin
      id("com.google.gms.google-services")
    
      // Add the Crashlytics Gradle plugin
      id("com.google.firebase.crashlytics")
    }
    plugins {
      id 'com.android.application'
      // ...
    
      // Make sure that you have the Google services Gradle plugin
      id 'com.google.gms.google-services'
    
      // Add the Crashlytics Gradle plugin
      id 'com.google.firebase.crashlytics'
    }

ধাপ 3 : আপনার বিল্ডে Crashlytics এক্সটেনশন যোগ করুন

আপনার মডিউলে (অ্যাপ-লেভেল) গ্রেডল ফাইলে (সাধারণত <project>/<app-module>/build.gradle.kts বা <project>/<app-module>/build.gradle ), Crashlytics এক্সটেনশন কনফিগার করুন।

KotlinGroovy
import com.google.firebase.crashlytics.buildtools.gradle.CrashlyticsExtension

// ...

android {
  // ...
  buildTypes {
      getByName("release") {
          // Add this extension
          configure<CrashlyticsExtension> {
              // Enable processing and uploading of native symbols to Firebase servers.
              // By default, this is disabled to improve build speeds.
              // This flag must be enabled to see properly-symbolicated native
              // stack traces in the Crashlytics dashboard.
              nativeSymbolUploadEnabled = true
          }
      }
  }
}
// ...

android {
  // ...
  buildTypes {
      release {
          // Add this extension
          firebaseCrashlytics {
              // Enable processing and uploading of native symbols to Firebase servers.
              // By default, this is disabled to improve build speeds.
              // This flag must be enabled to see properly-symbolicated native
              // stack traces in the Crashlytics dashboard.
              nativeSymbolUploadEnabled true
          }
      }
  }
}

ধাপ 4 : নেটিভ চিহ্নগুলির স্বয়ংক্রিয় আপলোডিং সেট আপ করুন৷

NDK ক্র্যাশ থেকে পঠনযোগ্য স্ট্যাক ট্রেস তৈরি করতে, Crashlytics আপনার নেটিভ বাইনারিতে থাকা চিহ্নগুলি সম্পর্কে জানতে হবে। Crashlytics Gradle প্লাগইনে এই প্রক্রিয়াটিকে স্বয়ংক্রিয়ভাবে আপলোড করার জন্য uploadCrashlyticsSymbolFile BUILD_VARIANT টাস্ক অন্তর্ভুক্ত রয়েছে।

  1. যাতে আপনি স্বয়ংক্রিয় প্রতীক আপলোডের জন্য কাজটি অ্যাক্সেস করতে পারেন, নিশ্চিত করুন যে আপনার মডিউল (অ্যাপ-লেভেল) গ্রেডল ফাইলে nativeSymbolUploadEnabled করা true হিসাবে সেট করা আছে।

  2. আপনার স্ট্যাকের চিহ্নগুলিতে পদ্ধতির নামগুলি উপস্থিত হওয়ার জন্য, আপনাকে অবশ্যই আপনার NDK লাইব্রেরির প্রতিটি নির্মাণের পরে uploadCrashlyticsSymbolFile BUILD_VARIANT টাস্কটি স্পষ্টভাবে আহ্বান করতে হবে। যেমন:

    >./gradlew app:assembleBUILD_VARIANT\
               app:uploadCrashlyticsSymbolFileBUILD_VARIANT
  3. NDK-এর জন্য Crashlytics SDK এবং Crashlytics Gradle প্লাগইন উভয়ই নেটিভ শেয়ার করা বস্তুর মধ্যে GNU বিল্ড আইডির উপস্থিতির উপর নির্ভর করে।

    আপনি রান করে এই আইডির উপস্থিতি যাচাই করতে পারেন প্রতিটি বাইনারিতে readelf -n । বিল্ড আইডি অনুপস্থিত থাকলে, যোগ করুন সমস্যা সমাধানের জন্য আপনার বিল্ড সিস্টেমের পতাকাগুলিতে -Wl,--build-id

ধাপ 5 : সেটআপ শেষ করতে একটি পরীক্ষা ক্র্যাশ বাধ্য করুন

Crashlytics সেট আপ শেষ করতে এবং Firebase কনসোলের Crashlytics ড্যাশবোর্ডে প্রাথমিক ডেটা দেখতে, আপনাকে একটি পরীক্ষা ক্র্যাশ করতে বাধ্য করতে হবে।

  1. আপনার অ্যাপে কোড যোগ করুন যা আপনি একটি পরীক্ষা ক্র্যাশ করতে বাধ্য করতে ব্যবহার করতে পারেন।

    আপনি আপনার অ্যাপে একটি বোতাম যোগ করতে আপনার অ্যাপের MainActivity নিম্নলিখিত কোডটি ব্যবহার করতে পারেন যা চাপলে ক্র্যাশ হয়ে যায়। বোতামটি "টেস্ট ক্র্যাশ" লেবেলযুক্ত।

    KotlinJava
    val crashButton = Button(this)
    crashButton.text = "Test Crash"
    crashButton.setOnClickListener {
       throw RuntimeException("Test Crash") // Force a crash
    }
    
    addContentView(crashButton, ViewGroup.LayoutParams(
           ViewGroup.LayoutParams.MATCH_PARENT,
           ViewGroup.LayoutParams.WRAP_CONTENT))
    Button crashButton = new Button(this);
    crashButton.setText("Test Crash");
    crashButton.setOnClickListener(new View.OnClickListener() {
       public void onClick(View view) {
           throw new RuntimeException("Test Crash"); // Force a crash
       }
    });
    
    addContentView(crashButton, new ViewGroup.LayoutParams(
           ViewGroup.LayoutParams.MATCH_PARENT,
           ViewGroup.LayoutParams.WRAP_CONTENT));
  2. আপনার অ্যাপ তৈরি করুন এবং চালান।

  3. আপনার অ্যাপের প্রথম ক্র্যাশ রিপোর্ট পাঠানোর জন্য পরীক্ষা ক্র্যাশ জোরপূর্বক করুন:

    1. আপনার পরীক্ষা ডিভাইস বা এমুলেটর থেকে আপনার অ্যাপ্লিকেশন খুলুন.

    2. আপনার অ্যাপে, উপরের কোডটি ব্যবহার করে আপনি যোগ করা "টেস্ট ক্র্যাশ" বোতাম টিপুন।

    3. আপনার অ্যাপ ক্র্যাশ হওয়ার পরে, এটি পুনরায় চালু করুন যাতে আপনার অ্যাপটি Firebase-এ ক্র্যাশ রিপোর্ট পাঠাতে পারে।

  4. আপনার পরীক্ষা ক্র্যাশ দেখতে Firebase কনসোলের Crashlytics ড্যাশবোর্ডে যান।

    আপনি যদি কনসোলটি রিফ্রেশ করে থাকেন এবং আপনি এখনও পাঁচ মিনিটের পরেও পরীক্ষা ক্র্যাশ দেখতে না পান, আপনার অ্যাপ ক্র্যাশ রিপোর্ট পাঠাচ্ছে কিনা তা দেখতে ডিবাগ লগিং সক্ষম করুন


আর এটাই! Crashlytics এখন ক্র্যাশের জন্য আপনার অ্যাপ নিরীক্ষণ করছে এবং আপনি Crashlytics ড্যাশবোর্ডে ক্র্যাশ রিপোর্ট এবং পরিসংখ্যান দেখতে ও তদন্ত করতে পারেন।

পরবর্তী পদক্ষেপ

  • (প্রস্তাবিত) GWP-ASan রিপোর্ট সংগ্রহ করে নেটিভ মেমরি ত্রুটির কারণে সৃষ্ট ক্র্যাশ ডিবাগ করার জন্য সহায়তা পান। এই মেমরি-সম্পর্কিত ত্রুটিগুলি আপনার অ্যাপের মধ্যে মেমরি দুর্নীতির সাথে যুক্ত হতে পারে, যা অ্যাপ নিরাপত্তা দুর্বলতার প্রধান কারণ। এই ডিবাগিং বৈশিষ্ট্যের সুবিধা নিতে, নিশ্চিত করুন যে আপনার অ্যাপটিতে GWP-ASan স্পষ্টভাবে সক্রিয় করা আছে এবং NDK (v18.3.6+ বা Firebase BoM v31.3.0+) এর জন্য সর্বশেষ Crashlytics SDK ব্যবহার করছে।

  • অপ্ট-ইন রিপোর্টিং, লগ, কী, এবং অ-মারাত্মক ত্রুটির ট্র্যাকিং যোগ করে আপনার ক্র্যাশ রিপোর্ট সেটআপ কাস্টমাইজ করুন

  • Google Play সাথে ইন্টিগ্রেট করুন যাতে আপনি Crashlytics ড্যাশবোর্ডে সরাসরি Google Play ট্র্যাকের মাধ্যমে আপনার Android অ্যাপের ক্র্যাশ রিপোর্ট ফিল্টার করতে পারেন। এটি আপনাকে নির্দিষ্ট বিল্ডগুলিতে আপনার ড্যাশবোর্ডকে আরও ভালভাবে ফোকাস করতে দেয়।

সমস্যা সমাধান

আপনি যদি Firebase কনসোলে এবং logcat-এ বিভিন্ন স্ট্যাকের ট্রেস দেখতে পান, তাহলে সমস্যা সমাধানের নির্দেশিকা পড়ুন।



প্রতীক আপলোড করার জন্য বিকল্প বিকল্প

উপরের এই পৃষ্ঠার প্রধান কর্মপ্রবাহটি স্ট্যান্ডার্ড গ্রেডল বিল্ডের জন্য প্রযোজ্য। যাইহোক, কিছু অ্যাপ একটি ভিন্ন কনফিগারেশন বা টুলিং ব্যবহার করে (উদাহরণস্বরূপ Gradle ছাড়া অন্য একটি বিল্ড প্রক্রিয়া)। এই পরিস্থিতিতে, নিম্নলিখিত বিকল্পগুলি সফলভাবে প্রতীক আপলোড করার জন্য সহায়ক হতে পারে।

বিকল্প : লাইব্রেরি মডিউল এবং বাহ্যিক নির্ভরতার জন্য প্রতীক আপলোড করুন

এই বিকল্পটি নিম্নলিখিত পরিস্থিতিতে সহায়ক হতে পারে:

  • আপনি যদি Gradle এর মধ্যে একটি কাস্টমাইজড NDK বিল্ড প্রক্রিয়া ব্যবহার করেন
  • যদি আপনার নেটিভ লাইব্রেরিগুলি একটি লাইব্রেরি/ফিচার মডিউলে তৈরি করা হয় বা তৃতীয় পক্ষ দ্বারা সরবরাহ করা হয়
  • যদি স্বয়ংক্রিয় প্রতীক আপলোড করার কাজটি ব্যর্থ হয় বা আপনি ড্যাশবোর্ডে অপ্রতিরোধ্য ক্র্যাশগুলি দেখতে পান

স্ট্যান্ডার্ড Crashlytics প্রতীক আপলোড টাস্ক অনুমান করে যে আপনি CMake-এর মতো স্ট্যান্ডার্ড NDK বিল্ড টুল ব্যবহার করে আপনার অ্যাপ মডিউলের Gradle বিল্ডের অংশ হিসেবে আপনার নেটিভ লাইব্রেরি তৈরি করছেন।

যাইহোক, যদি আপনি Gradle-এর মধ্যে একটি কাস্টমাইজড NDK বিল্ড প্রক্রিয়া ব্যবহার করেন, বা আপনার নেটিভ লাইব্রেরিগুলি একটি লাইব্রেরি/ফিচার মডিউলে তৈরি করা হয় বা তৃতীয় পক্ষের দ্বারা সরবরাহ করা হয়, তাহলে আপনাকে আপনার আনস্ট্রিপড লাইব্রেরির পথটি স্পষ্টভাবে উল্লেখ করতে হতে পারে। এটি সম্পন্ন করার জন্য, আপনি আপনার Gradle বিল্ড ফাইলে Crashlytics এক্সটেনশনের মধ্যে unstrippedNativeLibsDir সম্পত্তি যোগ করতে পারেন।

  1. নিশ্চিত করুন যে আপনি এই পৃষ্ঠার মূল ওয়ার্কফ্লো থেকে নিম্নলিখিত প্রাথমিক কাজগুলি সম্পূর্ণ করেছেন:

    1. Firebase কনসোলে Crashlytics সক্ষম করা হয়েছে।

    2. NDK এর জন্য Crashlytics SDK এবং Crashlytics Gradle প্লাগইন যোগ করা হয়েছে।

    3. আপনার বিল্ডে Crashlytics এক্সটেনশন যোগ করা হয়েছে।

    4. নেটিভ প্রতীকগুলির স্বয়ংক্রিয় আপলোডিং সেট আপ করুন৷

  2. যাতে স্বয়ংক্রিয় প্রতীক আপলোড করার কাজটি আপনার প্রতীক তথ্য খুঁজে পেতে পারে, আপনার মডিউল (অ্যাপ-লেভেল) গ্রেডল ফাইলে নিম্নলিখিতটি যোগ করুন (সাধারণত <project>/<app-module>/build.gradle.kts বা <project>/<app-module>/build.gradle ):

    KotlinGroovy
    import com.google.firebase.crashlytics.buildtools.gradle.CrashlyticsExtension
    
    // ...
    
    android {
        // ...
        buildTypes {
            release {
                configure<CrashlyticsExtension> {
                    nativeSymbolUploadEnabled = true
                    unstrippedNativeLibsDir = file("PATH/TO/UNSTRIPPED/DIRECTORY")
                }
            }
        }
    }
    // ...
    
    android {
        // ...
        buildTypes {
            release {
                firebaseCrashlytics {
                    nativeSymbolUploadEnabled true
                    unstrippedNativeLibsDir file("PATH/TO/UNSTRIPPED/DIRECTORY")
                }
            }
        }
    }

    Crashlytics প্লাগইন .so এক্সটেনশন সহ নেটিভ লাইব্রেরিগুলির জন্য নির্দিষ্ট ডিরেক্টরিটি পুনরাবৃত্তভাবে অনুসন্ধান করবে। Crashlytics তারপর এই ধরনের সমস্ত লাইব্রেরি থেকে ডিবাগিং চিহ্ন বের করে এবং Firebase সার্ভারে আপলোড করে।

    unstrippedNativeLibsDir সম্পত্তিতে আপনি যা নির্দিষ্ট করতে পারেন তা এখানে:

    • org.gradle.api.Project#files(Object...) এর জন্য অনুমোদিত যেকোনো যুক্তি, সহ: java.lang.String , java.io.File , বা org.gradle.api.file.FileCollection

    • একটি তালিকা বা FileCollection উদাহরণ প্রদান করে একক বিল্ড ফ্লেভারের জন্য একাধিক ডিরেক্টরি

    • ( Crashlytics Gradle প্লাগইন v3.0.0 দিয়ে শুরু) পৃথক পণ্যে একাধিক ডিরেক্টরি জমা করুন এবং স্বাদ তৈরি করুন।

      buildTypes {
        release {
          configure<CrashlyticsExtension> {
            nativeSymbolUploadEnabled = true
            unstrippedNativeLibsDir = file("MY/NATIVE/LIBS")
          }
        }
        productFlavors {
          flavorDimensions += "feature"
          create("basic") {
            dimension = "feature"
            // ...
          }
          create("featureX") {
            dimension = "feature"
            configure<CrashlyticsExtension> {
              unstrippedNativeLibsDir = file("MY/FEATURE_X/LIBS")
            }
          }
        }
      }
      

    uploadCrashlyticsSymbolFilesBasicRelease টাস্কটি শুধুমাত্র MY/NATIVE/LIBS এ চিহ্নগুলি আপলোড করবে, কিন্তু uploadCrashlyticsSymbolFilesFeatureXRelease MY/NATIVE/LIBS এবং MY/FEATURE_X/LIBS উভয় ক্ষেত্রেই প্রতীক আপলোড করবে।

  3. অবশেষে, Crashlytics সেট আপ শেষ করতে এবং Firebase কনসোলের Crashlytics ড্যাশবোর্ডে প্রাথমিক ডেটা দেখতে একটি পরীক্ষা ক্র্যাশ করতে বাধ্য করুন

বিকল্প : নন-গ্রেডল বিল্ড বা অ্যাক্সেসযোগ্য আনস্ট্রিপড নেটিভ লাইব্রেরির জন্য প্রতীক আপলোড করুন

এই বিকল্পটি নিম্নলিখিত পরিস্থিতিতে সহায়ক হতে পারে:

  • আপনি যদি Gradle ছাড়া অন্য একটি বিল্ড প্রক্রিয়া ব্যবহার করেন

  • যদি আপনার আনস্ট্রিপড নেটিভ লাইব্রেরিগুলি আপনাকে এমনভাবে সরবরাহ করা হয় যে সেগুলি গ্রেডল বিল্ডের সময় অ্যাক্সেসযোগ্য নয়

এই বিকল্পের জন্য প্রয়োজন যে আপনি একটি Firebase CLI কমান্ড চালান যখন আপনি একটি রিলিজ বিল্ড তৈরি করেন বা যে কোনো বিল্ড যার জন্য আপনি Firebase কনসোলে প্রতীকী স্ট্যাকের ট্রেস দেখতে চান।

  1. নিশ্চিত করুন যে আপনি এই পৃষ্ঠার মূল ওয়ার্কফ্লো থেকে নিম্নলিখিত প্রাথমিক কাজগুলি সম্পূর্ণ করেছেন:

    1. Firebase কনসোলে Crashlytics সক্ষম করা হয়েছে।

    2. NDK এর জন্য Crashlytics SDK এবং Crashlytics Gradle প্লাগইন যোগ করা হয়েছে।

    মনে রাখবেন যে এই বিকল্পের সাথে, আপনাকে firebaseCrashlytics এক্সটেনশন যোগ করতে হবে না বা স্বয়ংক্রিয় প্রতীক আপলোডিং সেট আপ করতে হবে না কারণ আপনি পরিবর্তে আপনার প্রতীক ফাইলগুলি তৈরি এবং আপলোড করতে Firebase CLI (নীচের পরবর্তী ধাপগুলি) ব্যবহার করবেন৷

  2. প্রতীক আপলোড করার জন্য আপনার পরিবেশ এবং প্রকল্প সেট আপ করুন:

    1. Firebase CLI ইনস্টল করতে নির্দেশাবলী অনুসরণ করুন।

      আপনি যদি ইতিমধ্যেই CLI ইনস্টল করে থাকেন, তাহলে নিশ্চিত করুন যে এটির সর্বশেষ সংস্করণে আপডেট করুন

    2. (শুধুমাত্র Android API স্তর 30+ ব্যবহার করা অ্যাপগুলির জন্য) পয়েন্টার ট্যাগিং অক্ষম করতে আপনার অ্যাপের AndroidManifest.xml টেমপ্লেট আপডেট করুন:

      1. অ্যান্ড্রয়েড প্লেয়ার সেটিংস > প্রকাশনা সেটিংস > বিল্ড > কাস্টম প্রধান ম্যানিফেস্টের জন্য বক্সটি চেক করুন।

      2. Assets/Plugins/Android/AndroidManifest.xml এ অবস্থিত ম্যানিফেস্ট টেমপ্লেটটি খুলুন।

      3. অ্যাপ্লিকেশন ট্যাগে নিম্নলিখিত বৈশিষ্ট্য যোগ করুন: <application android:allowNativeHeapPointerTagging="false" ... />

  3. আপনার প্রকল্প তৈরি করুন.

  4. আপনার প্রতীক তথ্য আপলোড করুন.

    আপনার বিল্ড শেষ হয়ে গেলে, একটি Crashlytics -compatible প্রতীক ফাইল তৈরি করুন এবং নিম্নলিখিত Firebase CLI কমান্ডটি চালিয়ে Firebase সার্ভারে আপলোড করুন:

    firebase crashlytics:symbols:upload --app=FIREBASE_APP_ID PATH/TO/SYMBOLS
    • FIREBASE_APP_ID : আপনার Firebase Android App ID (আপনার প্যাকেজের নাম নয়)
      উদাহরণ ফায়ারবেস অ্যান্ড্রয়েড অ্যাপ আইডি: 1:567383003300:android:17104a2ced0c9b9b

      আপনার ফায়ারবেস অ্যাপ আইডি খোঁজার দুটি উপায় এখানে রয়েছে:

      • আপনার google-services.json ফাইলে, আপনার অ্যাপ আইডি হল mobilesdk_app_id মান; বা

      • Firebase কনসোলে, আপনার প্রকল্প সেটিংসে যান। আপনার অ্যাপস কার্ডে নিচে স্ক্রোল করুন, তারপর পছন্দসই Firebase অ্যাপের অ্যাপ আইডি খুঁজতে ক্লিক করুন।

    • PATH/TO/SYMBOLS : CLI দ্বারা তৈরি প্রতীক ফাইলের পথ

      • একটি Android স্টুডিও প্রকল্পে রপ্তানি করা হয়েছে — PATH/TO/SYMBOLS যেকোন ডিরেক্টরি হতে পারে। Firebase CLI একটি .so এক্সটেনশনের সাহায্যে নেটিভ লাইব্রেরির জন্য নির্দিষ্ট ডিরেক্টরিটি পুনরাবৃত্তভাবে অনুসন্ধান করবে।

      • Unity-এর মধ্যে থেকে সরাসরি APK তৈরি করুন — PATH/TO/SYMBOLS হল জিপ করা সিম্বল ফাইলের পথ যা প্রোজেক্ট রুট ডিরেক্টরিতে জেনারেট করা হয় যখন আপনার বিল্ড শেষ হয় (উদাহরণস্বরূপ: myproject/myapp-1.0-v100.symbols.zip )।

    পতাকা বর্ণনা
    --generator=csym

    ডিফল্ট ব্রেকপ্যাড জেনারেটরের পরিবর্তে লিগ্যাসি cSYM প্রতীক ফাইল জেনারেটর ব্যবহার করে

    ব্যবহারের জন্য সুপারিশ করা হয় না. আমরা ডিফল্ট ব্রেকপ্যাড প্রতীক ফাইল জেনারেটর ব্যবহার করার পরামর্শ দিই।

    --generator=breakpad

    ব্রেকপ্যাড প্রতীক ফাইল জেনারেটর ব্যবহার করে

    মনে রাখবেন যে প্রতীক ফাইল তৈরির জন্য ডিফল্ট হল ব্রেকপ্যাড। আপনি যোগ করে থাকলে শুধুমাত্র এই পতাকা ব্যবহার করুন আপনার বিল্ড কনফিগারেশনে symbolGenerator { csym() } এবং আপনি ব্রেকপ্যাড ব্যবহার করার জন্য এটিকে ওভাররাইড করতে চান।

    --dry-run

    প্রতীক ফাইল তৈরি করে কিন্তু সেগুলি আপলোড করে না

    এই পতাকাটি দরকারী যদি আপনি পাঠানো ফাইলগুলির বিষয়বস্তু পরিদর্শন করতে চান৷

    --debug অতিরিক্ত ডিবাগিং তথ্য প্রদান করে
  5. অবশেষে, Crashlytics সেট আপ শেষ করতে এবং Firebase কনসোলের Crashlytics ড্যাশবোর্ডে প্রাথমিক ডেটা দেখতে একটি পরীক্ষা ক্র্যাশ করতে বাধ্য করুন

    ক্র্যাশ বাধ্য করার অংশ হিসাবে আপনি আপনার অ্যাপ তৈরি করার পরে, আপনার প্রতীক ফাইল আপলোড করতে Firebase CLI crashlytics:symbols:upload কমান্ডটি চালানো নিশ্চিত করুন।