যদি আপনার Android অ্যাপে নেটিভ লাইব্রেরি থাকে, তাহলে আপনি আপনার অ্যাপের বিল্ড কনফিগারেশনে কয়েকটি ছোট আপডেট সহ Firebase Crashlytics থেকে আপনার নেটিভ কোডের জন্য সম্পূর্ণ স্ট্যাক ট্রেস এবং বিস্তারিত ক্র্যাশ রিপোর্ট সক্ষম করতে পারেন।
NDK-এর জন্য Firebase Crashlytics SDK-এর সাথে কীভাবে ক্র্যাশ রিপোর্টিং কনফিগার করতে হয় এই নির্দেশিকাটি বর্ণনা করে।
আপনি যদি আপনার ইউনিটি প্রকল্পগুলিতে Crashlytics সাথে কীভাবে শুরু করবেন তা সন্ধা�� করছেন, ইউনিটি শুরু করার নির্দেশিকাটি দেখুন।
আপনি শুরু করার আগে
যদি আপনি ইতিমধ্যে না করে থাকেন, তাহলে আপনার Android প্রকল্পে Firebase যোগ করুন । আপনার যদি অ্যান্ড্রয়েড অ্যাপ না থাকে, তাহলে আপনি একটি নমুনা অ্যাপ ডাউনলোড করতে পারেন।
প্রস্তাবিত : ক্র্যাশ, নন-ফেটাল বা ANR ইভেন্ট পর্যন্ত ব্যবহারকারীর অ্যাকশন বোঝার জন্য স্বয়ংক্রিয়ভাবে ব্রেডক্রাম্ব লগ পেতে, আপনাকে আপনার Firebase প্রোজেক্টে Google Analytics সক্ষম করতে হবে।
যদি আপনার বিদ্যমান ফায়ারবেস প্রকল্পে Google Analytics সক্ষম না থাকে, তাহলে আপনি আপনার ইন্টিগ্রেশন ট্যাব থেকে Google Analytics সক্ষম করতে পারেন
Firebase কনসোলে প্রকল্প সেটিংস । >আপনি যদি একটি নতুন ফায়ারবেস প্রজেক্ট তৈরি করেন, তাহলে প্রোজেক্ট তৈরির ওয়ার্কফ্লো চলাকালীন Google Analytics সক্ষম করুন।
নিশ্চিত করুন যে আপনার অ্যাপে নিম্নলিখিত ন্যূনতম প্রয়োজনীয় সংস্করণ রয়েছে: গ্রেডেল 8.0 অ্যান্ড্রয়েড গ্রেডল প্লাগইন 8.1.0 Google পরিষেবা গ্রেডল প্লাগইন 4.4.1
ধাপ 1 : আপনার অ্যাপে 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:33.7.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 লাইব্রেরি সংস্করণ তার নির্ভরতা লাইনে উল্লেখ করতে হবে।
মনে রাখবেন যে আপনি যদি আপনার অ্যাপে একাধিক ফায়ারবেস লাইব্রেরি ব্যবহার করেন, আমরা দৃঢ়ভাবে লাইব্রেরি সংস্করণগুলি পরিচালনা করতে 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.3.0") implementation("com.google.firebase:firebase-analytics:22.1.2") }
ধাপ 2 : আপনার অ্যাপে Crashlytics 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.2" apply false // Add the dependency for the Crashlytics Gradle plugin id("com.google.firebase.crashlytics") version "3.0.2" 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.2' apply false // Add the dependency for the Crashlytics Gradle plugin id 'com.google.firebase.crashlytics' version '3.0.2' apply false }
আপনার মডিউলে (অ্যাপ-লেভেল) গ্রেডল ফাইলে (সাধারণত
<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' }
ধাপ 3 : আপনার বিল্ডে 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
}
}
}
}
ধাপ 4 : নেটিভ চিহ্নগুলির স্বয়ংক্রিয় আপলোডিং সেট আপ করুন৷
NDK ক্র্যাশ থেকে পঠনযোগ্য স্ট্যাক ট্রেস তৈরি করতে, Crashlytics আপনার নেটিভ বাইনারিতে থাকা চিহ্নগুলি সম্পর্কে জানতে হবে। Crashlytics Gradle প্লাগইনে এই প্রক্রিয়াটিকে স্বয়ংক্রিয়ভাবে আপলোড করার জন্য uploadCrashlyticsSymbolFile BUILD_VARIANT
টাস্ক অন্তর্ভুক্ত রয়েছে।
যাতে আপনি স্বয়ংক্রিয় প্রতীক আপলোডের জন্য কাজটি অ্যাক্সেস করতে পারেন, নিশ্চিত করুন যে আপনার মডিউল (অ্যাপ-লেভেল) গ্রেডল ফাইলে
nativeSymbolUploadEnabled
true
হিসাবে সেট করা আছে।আপনার স্ট্যাকের চিহ্নগুলিতে পদ্ধতির নামগুলি উপস্থিত হওয়ার জন্য, আপনাকে অবশ্যই আপনার NDK লাইব্রেরির প্রতিটি নির্মাণের পরে
uploadCrashlyticsSymbolFile BUILD_VARIANT
টাস্কটি স্পষ্টভাবে আহ্বান করতে হবে। যেমন:>./gradlew app:assembleBUILD_VARIANT\ app:uploadCrashlyticsSymbolFileBUILD_VARIANT
NDK-এর জন্য Crashlytics SDK এবং Crashlytics Gradle প্লাগইন উভয়ই নেটিভ শেয়ার করা বস্তুর মধ্যে GNU বিল্ড আইডির উপস্থিতির উপর নির্ভর করে।
আপনি রান করে এই আইডির উপস্থিতি যাচাই করতে পারেন প্রতিটি বাইনারিতে readelf -n
। বিল্ড আইডি অনুপস্থিত থাকলে, যোগ করুনসমস্যা সমাধানের জন্য আপনার বিল্ড সিস্টেমের পতাকাগুলিতে -Wl,--build-id
।
ধাপ 5 : সেটআপ শেষ করতে একটি পরীক্ষা ক্র্যাশ বাধ্য করুন
আপনার অ্যাপে কোড যোগ করুন যা আপনি একটি পরীক্ষা ক্র্যাশ করতে বাধ্য করতে ব্যবহার করতে পারেন। আপনি আপনার অ্যাপে একটি বোতাম যোগ করতে আপনার অ্যাপের MainActivity
নিম্নলিখিত কোডটি ব্যবহার করতে পারেন যা চাপলে ক্র্যাশ হয়ে যায়। বোতামটি "টেস্ট ক্র্যাশ" লেবেলযুক্ত।Kotlin+KTX 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 কনসোলের Crashlytics ড্যাশবোর্ডে যান। আপনি যদি কনসোলটি রিফ্রেশ করে থাকেন এবং আপনি এখনও পাঁচ মিনিটের পরেও পরীক্ষা ক্র্যাশ দেখতে না পান, আপনার অ্যাপ ক্র্যাশ রিপোর্ট পাঠাচ্ছে কিনা তা দেখতে ডিবাগ লগিং সক্ষম করুন ৷
আর এটাই! Crashlytics এখন ক্র্যাশের জন্য আপনার অ্যাপ নিরীক্ষণ করছে এবং আপনি Crashlytics ড্যাশবোর্ডে ক্র্যাশ রিপোর্ট এবং পরিসংখ্যান দেখতে ও তদন্ত করতে পারেন।
পরবর্তী পদক্ষেপ
(প্রস্তাবিত) GWP-ASan রিপোর্ট সংগ্রহ করে নেটিভ মেমরি ত্রুটির কারণে সৃষ্ট ক্র্যাশ ডিবাগ করার জন্য সহায়তা পান। এই মেমরি-সম্পর্কিত ত্রুটিগুলি আপনার অ্যাপের মধ্যে মেমরি দুর্নীতির সাথে যুক্ত হতে পারে, যা অ্যাপ নিরাপত্তা দুর্বলতার প্রধান কারণ। এই ডিবাগিং বৈশিষ্ট্যের সুবিধা নিতে, নিশ্চিত করুন যে আপনার অ্যাপটিতে GWP-ASan স্পষ্টভাবে সক্রিয় করা আছে এবং NDK (v18.3.6+ বা Firebase BoM v31.3.0+) এর জন্য সর্বশেষ Crashlytics SDK ব্যবহার করছে। অপ্ট-ইন রিপোর্টিং, লগ, কী, এবং অ-মারাত্মক ত্রুটির ট্র্যাকিং যোগ করে আপনার ক্র্যাশ রিপোর্ট সেটআপ কাস্টমাইজ করুন । Google Play এর সাথে ইন্টিগ্রেট করুন যাতে আপনি Crashlytics ড্যাশবোর্ডে সরাসরি Google Play ট্র্যাকের মাধ্যমে আপনার Android অ্যাপের ক্র্যাশ রিপোর্ট ফিল্টার করতে পারেন। এটি আপনাকে নির্দিষ্ট বিল্ডগুলিতে আপনার ড্যাশবোর্ডকে আরও ভালভাবে ফোকাস করতে দেয়।
সমস্যা সমাধান
প্রতীক আপলোড করার জন্য বিকল্প বিকল্প
বিকল্প : লাইব্রেরি মডিউল এবং বাহ্যিক নির্ভরতার জন্য প্রতীক আপলোড করুন
আপনি যদি Gradle এর মধ্যে একটি কাস্টমাইজড NDK বিল্ড প্রক্রিয়া ব্যবহার করেন যদি আপনার নেটিভ লাইব্রেরিগুলি একটি লাইব্রেরি/ফিচার মডিউলে তৈরি করা হয় বা তৃতীয় পক্ষ দ্বারা সরবরাহ করা হয় যদি স্বয়ংক্রিয় প্রতীক আপলোড করার কাজটি ব্যর্থ হয় বা আপনি ড্যাশবোর্ডে অপ্রতিরোধ্য ক্র্যাশগুলি দেখতে পান
বিকল্প : নন-গ্রেডল বিল্ড বা অ্যাক্সেসযোগ্য আনস্ট্রিপড নেটিভ লাইব্রেরির জন্য প্রতীক আপলোড করুন
আপনি যদি Gradle ছাড়া অন্য একটি বিল্ড প্রক্রিয়া ব্যবহার করেন যদি আপনার আনস্ট্রিপড নেটিভ লাইব্রেরিগুলি আপনাকে এমনভাবে সরবরাহ করা হয় যে সেগুলি গ্রেডল বিল্ডের সময় অ্যাক্সেসযোগ্য নয়