অ্যান্ড্রয়েড এনডিকে-র জন্য ক্র্যাশলিটিক্স দিয়ে শুরু করুন

প্ল্যাটফর্ম নির্বাচন করুন: iOS+ অ্যান্ড্রয়েড অ্যান্ড্রয়েড এনডিকে ফ্লাটার ইউনিটি


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

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

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

শুরু করার আগে

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

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

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

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

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

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

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

আপনার মডিউল (অ্যাপ-লেভেল) গ্রেডল ফাইলে (সাধারণত <project>/<app-module>/build.gradle.kts অথবা <project>/<app-module>/build.gradle ), অ্যান্ড্রয়েডের জন্য Crashlytics এনডিকে লাইব্রেরির ডিপেন্ডেন্সি যোগ করুন। লাইব্রেরির ভার্সনিং নিয়ন্ত্রণের জন্য আমরা 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.11.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 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.4")
    implementation("com.google.firebase:firebase-analytics:23.2.0")
}

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

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

    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. আপনার মডিউল (অ্যাপ-লেভেল) Gradle ফাইলে (সাধারণত <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'
    }

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

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

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 তে নিম্নলিখিত কোডটি ব্যবহার করে আপনি এমন একটি বাটন যোগ করতে পারেন, যা চাপলে অ্যাপটি ক্র্যাশ করবে। বাটনটির লেবেল হলো "Test Crash"।

    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-এর জন্য সর্বশেষ Crashlytics SDK (v18.3.6+ বা Firebase BoM v31.3.0+) ব্যবহার করছে।

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

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

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

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



প্রতীক আপলোড করার বিকল্প উপায়

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

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

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

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

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

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

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

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