Firebase Crashlytics দিয়ে শুরু করুন


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

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

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

শুরু করার আগে

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

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

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

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

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

    • গ্রেডল ৮.০
    • অ্যান্ড্রয়েড গ্রেডল প্লাগইন 8.1.0
    • গুগল সার্ভিসেস গ্রেডল প্লাগইন ৪.৪.১

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

আপনার মডিউল (অ্যাপ-লেভেল) গ্র্যাডেল ফাইলে (সাধারণত <project>/<app-module>/build.gradle.kts অথবা <project>/<app-module>/build.gradle ), অ্যান্ড্রয়েডের জন্য 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:34.4.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 লাইব্রেরির সামঞ্জস্যপূর্ণ সংস্করণ ব্যবহার করবে।

(বিকল্প) BoM ব্যবহার না করেই Firebase লাইব্রেরি নির্ভরতা যোগ করুন

যদি আপনি Firebase BoM ব্যবহার না করার সিদ্ধান্ত নেন, তাহলে আপনাকে প্রতিটি Firebase লাইব্রেরি সংস্করণ তার নির্ভরতা লাইনে নির্দিষ্ট করতে হবে।

মনে রাখবেন যে আপনি যদি আপনার অ্যাপে একাধিক 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:20.0.3")
    implementation("com.google.firebase:firebase-analytics:23.0.0")
}

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

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

    Kotlin

    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.4" apply false
    
        // Add the dependency for the Crashlytics Gradle plugin
        id("com.google.firebase.crashlytics") version "3.0.6" apply false
    }

    Groovy

    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.4' apply false
    
        // Add the dependency for the Crashlytics Gradle plugin
        id 'com.google.firebase.crashlytics' version '3.0.6' apply false
    }
  2. আপনার মডিউল (অ্যাপ-লেভেল) গ্র্যাডেল ফাইলে (সাধারণত <project>/<app-module>/build.gradle.kts অথবা <project>/<app-module>/build.gradle ) Crashlytics Gradle প্লাগইন যোগ করুন:

    Kotlin

    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")
    }

    Groovy

    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'
    }

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

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

Kotlin

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
          }
      }
  }
}

Groovy

// ...

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
          }
      }
  }
}

ধাপ ৪ : স্থানীয় প্রতীকগুলির স্বয়ংক্রিয় আপলোড সেট আপ করুন

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

ধাপ ৫ : সেটআপ শেষ করতে জোর করে একটি পরীক্ষামূলক ক্র্যাশ করুন

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

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

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

    Kotlin

    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))

    Java

    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. আপনার অ্যাপ ক্র্যাশ হওয়ার পর, এটি পুনরায় চালু করুন যাতে আপনার অ্যাপটি ফায়ারবেসে ক্র্যাশ রিপোর্ট পাঠাতে পারে।

  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 ট্র্যাক দ্বারা আপনার অ্যান্ড্রয়েড অ্যাপের ক্র্যাশ রিপোর্ট ফিল্টার করতে পারেন। এটি আপনাকে নির্দিষ্ট বিল্ডগুলিতে আপনার ড্যাশবোর্ডকে আরও ভালভাবে ফোকাস করতে দেয়।

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

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



প্রতীক আপলোড করার বিকল্প বিকল্পগুলি

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

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

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

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

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

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

  • যদি আপনি গ্র্যাডেল ছাড়া অন্য কোনও বিল্ড প্রক্রিয়া ব্যবহার করেন

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