| প্ল্যাটফর্ম বেছে নিন: | iOS+ Android Android NDK Flutter Unity |
আপনার Android অ্যাপে নেটিভ লাইব্রেরি ব্যবহার করলে, আপনার অ্যাপের বিল্ড কনফিগারেশনে কয়েকটি ছোট আপডেট করে Firebase Crashlytics থেকে আপনার নেটিভ কোডের জন্য সম্পূর্ণ স্ট্যাক ট্রেস ও বিস্তারিত ক্র্যাশ রিপোর্ট চালু করতে পারবেন।
এই নির্দেশিকায় কীভাবে NDK-এর জন্য Firebase Crashlytics SDK-এর মাধ্যমে ক্র্যাশ রিপোর্টিং কনফিগার করতে হয় তা বর্ণনা করা হয়েছে।
আপনার Unity প্রোজেক্টে কীভাবে Crashlytics ব্যবহার শুরু করবেন তা জানতে চাইলে, Unity শুরু করার নির্দেশিকা দেখুন।
শুরু করার আগে
আপনি আগে থেকে না করে থাকলে, আপনার Android প্রোজেক্টে Firebase যোগ করুন। আপনার কাছে Android অ্যাপ না থাকলে, আপনি স্যাম্পেল অ্যাপ ডাউনলোড করতে পারবেন।
সাজেস্ট করা: ক্র্যাশ, নন-ফ্যাটাল বা ANR ইভেন্ট পর্যন্ত ব্যবহারকারীর অ্যাকশন বুঝতে ব্রেডক্রাম্ব লগ অটোমেটিক পেতে, Firebase প্রোজেক্টে আপনাকে Google Analytics চালু করতে হবে।
আপনি নতুন Firebase প্রোজেক্ট তৈরি করলে, প্রোজেক্ট তৈরি করার ওয়ার্কফ্লো চলাকালীন Google Analytics চালু করুন।
আপনি যদি এমন কোনও আগে থেকে থাকা Firebase প্রোজেক্ট ব্যবহার করেন যেখানে Google Analytics চালু করা নেই, তাহলে আপনি Firebase কনসোলের
সেটিংস > ইন্টিগ্রেশন পৃষ্ঠা থেকে এটি চালু করতে পারবেন।
আপনার অ্যাপে নিম্নলিখিত ন্যূনতম প্রয়োজনীয় ভার্সন আছে কিনা তা নিশ্চিত করুন:
- Gradle 8.0
- Android Gradle প্লাগ-ইন 8.1.0
- Google পরিষেবা Gradle প্লাগ-ইন 4.4.1
ধাপ ১: আপনার অ্যাপে NDK-এর জন্য Crashlytics SDK যোগ করুন
আপনার মডিউল (অ্যাপ-লেভেল) Gradle ফাইলে (সাধারণত<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:34.19.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.1.1") implementation("com.google.firebase:firebase-analytics:23.2.0") }
ধাপ ২: আপনার অ্যাপে Crashlytics Gradle প্লাগ-ইন যোগ করুন
আপনার রুট-লেভেল (প্রোজেক্ট-লেভেল) 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.5.0" apply false // Add the dependency for the Crashlytics Gradle plugin id("com.google.firebase.crashlytics") version "3.0.8" 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.5.0' apply false // Add the dependency for the Crashlytics Gradle plugin id 'com.google.firebase.crashlytics' version '3.0.8' apply false }
আপনার মডিউল (অ্যাপ-লেভেল) 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' }
ধাপ ৩: আপনার বিল্ডে Crashlytics এক্সটেনশন যোগ করুন
আপনার মডিউল (অ্যাপ-লেভেল) Gradle ফাইলে
(সাধারণত <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 প্লাগ-ইনে
uploadCrashlyticsSymbolFileBUILD_VARIANT
টাস্ক অন্তর্ভুক্ত থাকে।
অটোমেটিক প্রতীক আপলোড করার টাস্ক অ্যাক্সেস করতে, আপনার মডিউল (অ্যাপ-লেভেল) Gradle ফাইলে
nativeSymbolUploadEnabledtrueহিসেবে সেট করা আছে কিনা তা ভালোভাবে দেখে নিন।আপনার স্ট্যাক ট্রেসে মেথডের নাম দেখতে পেতে, আপনাকে অবশ্যই NDK লাইব্রেরির প্রতিটি বিল্ডের পরে
uploadCrashlyticsSymbolFileBUILD_VARIANTটাস্ক স্পষ্টভাবে ইনভোক করতে হবে। যেমন:>./gradlew app:assembleBUILD_VARIANT\ app:uploadCrashlyticsSymbolFileBUILD_VARIANT
নেটিভ শেয়ারড অবজেক্টের মধ্যে GNU বিল্ড আইডির উপস্থিতি Crashlytics NDK-এর জন্য SDK এবং Crashlytics Gradle প্লাগইন দুটির উপরই নির্ভর করে।
প্রতিটি বাইনারিতে
রান করিয়ে আপনি এই আইডির উপস্থিতি যাচাই করতে পারবেন। বিল্ড আইডিতে absent থাকলে, আপনার বিল্ড সিস্টেমের ফ্ল্যাগেreadelf -n যোগ করে সমস্যার সমাধান করুন।-Wl,--build-id
ধাপ ৫: সেট-আপ সম্পূর্ণ করতে একটি টেস্ট ক্র্যাশ করুন
Crashlytics সেট-আপ করা সম্পূর্ণ করতে এবং Firebase কনসোলের Crashlytics ড্যাশবোর্ডে প্রাথমিক ডেটা দেখতে, আপনাকে জোর করে একটি টেস্ট ক্র্যাশ করতে হবে।
আপনার অ্যাপে এমন কোড যোগ করুন যা ব্যবহার করে আপনি জোর করে টেস্ট ক্র্যাশ করতে পারবেন।
আপনার অ্যাপের
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));
আপনার অ্যাপ তৈরি ও রান করুন।
আপনার অ্যাপের প্রথম ক্র্যাশ রিপোর্ট পাঠানোর জন্য জোর করে টেস্ট ক্র্যাশ করুন:
আপনার টেস্ট ডিভাইস বা এমুলেটর থেকে অ্যাপ খুলুন।
আপনার অ্যাপে, উপরে দেওয়া কোড ব্যবহার করে আপনি যে "টেস্ট ক্র্যাশ" বোতামটি যোগ করেছেন সেটি প্রেস করুন ।
আপনার অ্যাপ ক্র্যাশ করার পরে, এটি রিস্টার্ট করুন যাতে আপনার অ্যাপ Firebase-এ ক্র্যাশ রিপোর্ট পাঠাতে পারে।
Firebase কনসোলে, DevOps ও এনগেজমেন্ট > Crashlytics ড্যাশবোর্ডে গিয়ে আপনার টেস্ট ক্র্যাশ রিপোর্ট চেক করুন।
আপনি কনসোল রিফ্রেশ করার পরেও পাঁচ মিনিট পরে টেস্ট ক্র্যাশ দেখতে না পেলে, আপনার অ্যাপ ক্র্যাশ রিপোর্ট পাঠাচ্ছে কিনা তা দেখতে ডিবাগ লগিং চালু করুন।
এইটুকুই! Crashlytics এখন আপনার অ্যাপ ক্র্যাশ করছে কিনা তা মনিটর করছে এবং আপনি
Crashlytics ড্যাশবোর্ডে ক্র্যাশ রিপোর্ট ও পরিসংখ্যান দেখতে ও তদন্ত করে
দেখতে পারবেন।
পরবর্তী ধাপ
(সাজেস্ট করা) নেটিভ মেমরি সংক্রান্ত সমস্যার কারণে ক্র্যাশ হওয়া ডিবাগ করার ব্যাপারে সাহায্য পেতে GWP-ASan রিপোর্ট সংগ্রহ করুন। মেমরি সংক্রান্ত এইসব সমস্যা আপনার অ্যাপের মধ্যে মেমরি করাপশনের সাথে যুক্ত থাকতে পারে, যা অ্যাপের নিরাপত্তা সংক্রান্ত দুর্বলতার প্রধান কারণ। এই ডিবাগিং ফিচারের সুবিধা নিতে, আপনার অ্যাপে GWP-ASan স্পষ্টভাবে চালু করা আছে এবং NDK-এর জন্য লেটেস্ট Crashlytics SDK (v18.3.6+ বা Firebase BoM v31.3.0+) ব্যবহার করা হচ্ছে কিনা দেখুন।
ঐচ্ছিক রিপোর্টিং, লগ, কী এবং মারাত্মক নয় এমন সমস্যার ট্র্যাকিং যোগ করে আপনার ক্র্যাশ রিপোর্ট সেট-আপ কাস্টমাইজ করুন ।
Google Play-এর সাথে ইন্টিগ্রেট করুন যাতে আপনি Google Play ট্র্যাক করে সরাসরি Crashlytics ড্যাশবোর্ড থেকে আপনার Android অ্যাপের ক্র্যাশ রিপোর্ট ফিল্টার করতে পারেন। এর ফলে, আপনি নির্দিষ্ট বিল্ডের উপর ড্যাশবোর্ডকে আরও ভালোভাবে ফোকাস করতে পারবেন।
সমস্যার সমাধান
আপনি যদি Firebase কনসোলে এবং logcat-এ আলাদা আলাদা স্ট্যাক ট্রেস দেখতে পান, তাহলে সমস্যার সমাধানকারী গাইড দেখুন।
প্রতীক আপলোড করার বিকল্প পদ্ধতি
উপরে এই পৃষ্ঠায় দেখানো মূল ওয়ার্কফ্লো স্ট্যান্ডার্ড Gradle বিল্ডের ক্ষেত্রে প্রযোজ্য। তবে, কিছু অ্যাপ আলাদা কনফিগারেশন বা টুলিং ব্যবহার করে (যেমন, Gradle ছাড়া অন্য কোনও বিল্ড প্রসেস)। এইসব পরিস্থিতিতে, প্রতীক সফলভাবে আপলোড করার জন্য নিম্নলিখিত বিকল্পগুলি সহায়ক হতে পারে।
বিকল্প: লাইব্রেরি মডিউল ও এক্সটার্নাল ডিপেন্ডেন্সির জন্য সিম্বল আপলোড করা
নিম্নলিখিত পরিস্থিতিতে এই বিকল্পটি সহায়ক হতে পারে:
- আপনি যদি Gradle-এর মধ্যে কাস্টমাইজ করা NDK বিল্ড প্রসেস ব্যবহার করেন
- আপনার নেটিভ লাইব্রেরি কোনও লাইব্রেরি/ফিচার মডিউলে তৈরি করা হলে অথবা কোনও থার্ড-পার্টির দ্বারা প্রদান করা হলে
- যদি অটোমেটিক সিম্বল আপলোড করার টাস্ক সম্পূর্ণ না হয় অথবা আপনি Crashlytics ড্যাশবোর্ডে সিম্বল না থাকা ক্র্যাশ দেখতে পান
বিকল্প: নন-Gradle বিল্ড বা অ্যাক্সেস করা যায় না এমন আনস্ট্রিপড নেটিভ লাইব্রেরির জন্য সিম্বল আপলোড করা
নিম্নলিখিত পরিস্থিতিতে এই বিকল্পটি সহায়ক হতে পারে:
আপনি Gradle ছাড়া অন্য কোনও বিল্ড প্রসেস ব্যবহার করলে
আপনার আনস্ট্রিপড নেটিভ লাইব্রেরি যদি এমনভাবে প্রদান করা হয় যে Gradle বিল্ডের সময় সেগুলি অ্যাক্সেস করা যায় না