এই পৃষ্ঠাটি Crashlytics ব্যবহার করার বিষয়ে প্রায়শই জিজ্ঞাসিত প্রশ্নের সমস্যা সমাধানে সহায়তা এবং উত্তর প্রদান করে। আপনি যা খুঁজছেন তা খুঁজে না পেলে বা অতিরিক্ত সাহায্যের প্রয়োজন হলে, Firebase সহায়তার সাথে যোগাযোগ করুন।
সাধারণ সমস্যা সমাধান/FAQ
Firebase কনসোলে আপনার ইস্যু টেবিলে তালিকাভুক্ত সমস্যার জন্য আপনি দুটি ভিন্ন ফর্ম্যাট লক্ষ্য করতে পারেন। এবং আপনি আপনার কিছু সমস্যার মধ্যে "ভেরিয়েন্ট" নামক একটি বৈশিষ্ট্যও লক্ষ্য করতে পারেন। এখানে কেন!
2023 সালের গোড়ার দিকে, আমরা ইভেন্টগুলিকে গ্রুপ করার জন্য একটি উন্নত বিশ্লেষণ ইঞ্জিনের পাশাপাশি একটি আপডেট করা ডিজাইন এবং নতুন সমস্যাগুলির জন্য কিছু উন্নত বৈশিষ্ট্য নিয়ে এসেছি (যেমন বৈকল্পিক!)। সমস্ত বিবরণের জন্য আমাদের সাম্প্রতিক ব্লগ পোস্টটি দেখুন, তবে আপনি হাইলাইটগুলির জন্য নীচে পড়তে পারেন।
Crashlytics আপনার অ্যাপ থেকে সমস্ত ইভেন্ট বিশ্লেষণ করে (যেমন ক্র্যাশ, নন-ফেটাল, এবং ANR) এবং ইভেন্টের গ্রুপ তৈরি করে যাকে সমস্যা বলা হয় — একটি ইস্যুতে সমস্ত ইভেন্টের ব্যর্থতার একটি সাধারণ পয়েন্ট থাকে।
এই সমস্যাগুলির মধ্যে ইভেন্টগুলিকে গোষ্ঠীভুক্ত করার জন্য, উন্নত বিশ্লেষণ ইঞ্জিন এখন ইভেন্টের অনেক দিককে দেখে, যার মধ্যে স্ট্যাক ট্রেসের ফ্রেম, ব্যতিক্রম বার্তা, ত্রুটি কোড এবং অন্যান্য প্ল্যাটফর্ম বা ত্রুটির ধরন বৈশিষ্ট্যগুলি রয়েছে৷
যাইহোক, ইভেন্টের এই গ্রুপের মধ্যে, ব্যর্থতার দিকে পরিচালিত স্ট্যাক ট্রেসগুলি ভিন্ন হতে পারে। একটি ভিন্ন স্ট্যাক ট্রেস একটি ভিন্ন মূল কারণ বোঝাতে পারে। একটি ইস্যুতে এই সম্ভাব্য পার্থক্যটি উপস্থাপন করার জন্য, আমরা এখন সমস্যার মধ্যে ভেরিয়েন্ট তৈরি করি - প্রতিটি ভেরিয়েন্ট হল একটি ইস্যুতে ইভেন্টগুলির একটি সাব-গ্রুপ যার একই ব্যর্থতা পয়েন্ট এবং একই স্ট্যাক ট্রেস রয়েছে। ভেরিয়েন্টের সাহায্যে, আপনি একটি সমস্যার মধ্যে সবচেয়ে সাধারণ স্ট্যাক ট্রেসগুলি ডিবাগ করতে পারেন এবং বিভিন্ন মূল কারণগুলি ব্যর্থতার দিকে নিয়ে যাচ্ছে কিনা তা নির্ধারণ করতে পারেন।
এই উন্নতিগুলির সাথে আপনি যা অনুভব করবেন তা এখানে:
সংশোধিত মেটাডেটা ইস্যু সারির মধ্যে প্রদর্শিত হয়
আপনার অ্যাপে সমস্যাগুলি বোঝা এবং ট্রাইজ করা এখন সহজ।কম ডুপ্লিকেট সমস্যা
একটি লাইন নম্বর পরিবর্তনের ফলে একটি নতুন সমস্যা হয় না।বিভিন্ন মূল কারণ সহ জটিল সমস্যার সহজ ডিবাগিং
একটি সমস্যার মধ্যে সবচেয়ে সাধারণ স্ট্যাক ট্রেস ডিবাগ করতে ভেরিয়েন্ট ব্যবহার করুন।আরও অর্থপূর্ণ সতর্কতা এবং সংকেত
একটি নতুন সমস্যা আসলে একটি নতুন বাগ প্রতিনিধিত্ব করে।আরো শক্তিশালী অনুসন্ধান
প্রতিটি সমস্যায় আরও অনুসন্ধানযোগ্য মেটাডেটা থাকে, যেমন ব্যতিক্রমের ধরন এবং প্যাকেজের নাম।
এই উন্নতিগুলি কীভাবে ঘটছে তা এখানে:
যখন আমরা আপনার অ্যাপ থেকে নতুন ইভেন্টগুলি পাই, তখন আমরা তা একটি বিদ্যমান সমস্যার সাথে মেলে কিনা তা পরীক্ষা করব।
যদি কোন মিল না থাকে, আমরা স্বয়ংক্রিয়ভাবে ইভেন্টে আমাদের স্মার্ট ইভেন্ট-গ্রুপিং অ্যালগরিদম প্রয়োগ করব এবং পরিমার্জিত মেটাডেটা ডিজাইনের সাথে একটি নতুন সমস্যা তৈরি করব।
এটিই প্রথম বড় আপডেট যা আমরা আমাদের ইভেন্ট গ্রুপিংয়ে তৈরি করছি। আপনার যদি প্রতিক্রিয়া থাকে বা কোনো সমস্যার সম্মুখীন হন, তাহলে অনুগ্রহ করে একটি প্রতিবেদন দাখিল করে আমাদের জানান।
আপনি যদি ব্রেডক্রাম্ব লগ দেখতে না পান, তাহলে আমরা Google Analytics জন্য আপনার অ্যাপের কনফিগারেশন চেক করার পরামর্শ দিই। আপনি নিম্নলিখিত প্রয়োজনীয়তা পূরণ নিশ্চিত করুন:
আপনি আপনার Firebase প্রকল্পে Google Analytics সক্ষম করেছেন ।
আপনি Google Analytics জন্য ডেটা শেয়ারিং সক্ষম করেছেন। আপনার Analytics ডেটা শেয়ারিং সেটিংস পরিচালনা করুন- এ এই সেটিং সম্পর্কে আরও জানুন
আপনি করেছেনGoogle Analytics এর জন্য Firebase SDK যোগ করা হয়েছেআপনার অ্যাপে। এই SDK অবশ্যই Crashlytics SDK ছাড়াও যোগ করতে হবে।
আপনি ব্যবহার করছেনসর্বশেষ Firebase SDK সংস্করণআপনি আপনার অ্যাপে যে সমস্ত পণ্য ব্যবহার করেন তার জন্য।
বিশেষ করে দেখে নিন যে আপনি Google Analytics জন্য Firebase SDK-এর ন্যূনতম নিম্নলিখিত সংস্করণটি ব্যবহার করছেন:
Android — v17.2.3+ ( BoM v24.7.1+)।
আপনি যদি বেগের সতর্কতা দেখতে না পান তবে নিশ্চিত করুন যে আপনি ব্যবহার করছেনCrashlytics SDK v18.6.0+ (বা Firebase BoM v32.6.0+)।
আপনি যদি ক্র্যাশ-মুক্ত মেট্রিক্স (যেমন ক্র্যাশ-মুক্ত ব্যবহারকারী এবং সেশন) দেখতে না পান বা অবিশ্বস্ত মেট্রিক না দেখেন তবে নিম্নলিখিতগুলি পরীক্ষা করুন:
আপনি ব্যবহার করছেন তা নিশ্চিত করুনCrashlytics SDK v18.6.0+ (বা Firebase BoM v32.6.0+)।
নিশ্চিত করুন যে আপনার ডেটা সংগ্রহের সেটিংস আপনার ক্র্যাশ-মুক্ত মেট্রিক্সের গুণমানকে প্রভাবিত করছে না:
আপনি যদি স্বয়ংক্রিয় ক্র্যাশ রিপোর্টিং অক্ষম করে অপ্ট-ইন রিপোর্টিং সক্ষম করেন , তবে ক্র্যাশ তথ্য শুধুমাত্র সেই ব্যবহারকারীদের কাছ থেকে Crashlytics এ পাঠানো যেতে পারে যারা স্পষ্টভাবে ডেটা সংগ্রহে নির্বাচন করেছেন। এইভাবে, ক্র্যাশ-মুক্ত মেট্রিক্সের নির্ভুলতা প্রভাবিত হবে কারণ Crashlytics শুধুমাত্র এই অপ্ট-ইন ব্যবহারকারীদের (আপনার সমস্ত ব্যবহারকারীর পরিবর্তে) থেকে ক্র্যাশ তথ্য রয়েছে। এর মানে হল যে আপনার ক্র্যাশ-মুক্ত মেট্রিকগুলি কম নির্ভরযোগ্য এবং আপনার অ্যাপের সামগ্রিক স্থিতিশীলতার কম প্রতিফলিত হতে পারে।
আপনার যদি স্বয়ংক্রিয় ডেটা সংগ্রহ অক্ষম থাকে, তাহলে আপনি Crashlytics এ ডিভাইসে ক্যাশে করা রিপোর্ট পাঠাতে
sendUnsentReports
ব্যবহার করতে পারেন। এই পদ্ধতিটি ব্যবহার করলে Crashlytics ক্র্যাশ ডেটা পাঠানো হবে, কিন্তু সেশন ডেটা নয় যার কারণে কনসোল চার্টগুলি ক্র্যাশ-মুক্ত মেট্রিক্সের জন্য কম বা শূন্য মান দেখায়৷
ক্র্যাশ-মুক্ত মেট্রিক্স বুঝুন দেখুন।
Crashlytics অ্যান্ড্রয়েড 11 এবং উচ্চতর সংস্করণে চালিত ডিভাইসগুলি থেকে Android অ্যাপগুলির জন্য ANR রিপোর্টিং সমর্থন করে। আমরা ANR ( getHistoricalProcessExitReasons ) সংগ্রহ করতে যে অন্তর্নিহিত API ব্যবহার করি তা SIGQUIT বা ওয়াচডগ-ভিত্তিক পদ্ধতির চেয়ে বেশি নির্ভরযোগ্য। এই API শুধুমাত্র Android 11+ ডিভাইসে উপলব্ধ।
যদি আপনার কিছু ANR তাদের BuildId
অনুপস্থিত থাকে, তাহলে নিম্নরূপ সমস্যা সমাধান করুন:
নিশ্চিত করুন যে আপনি একটি আপ-টু-ডেট Crashlytics Android SDK এবং Crashlytics Gradle প্লাগইন সংস্করণ ব্যবহার করছেন।
আপনি যদি Android 11 এবং কিছু Android 12 ANR-এর জন্য
BuildId
অনুপস্থিত থাকেন, তাহলে সম্ভবত আপনি একটি পুরানো SDK, Gradle প্লাগইন বা উভয়ই ব্যবহার করছেন। এই ANR-এর জন্য সঠিকভাবেBuildId
সংগ্রহ করতে, আপনাকে নিম্নলিখিত সংস্করণগুলি ব্যবহার করতে হবে:- Crashlytics Android SDK v18.3.5+ ( Firebase BoM v31.2.2+)
- Crashlytics Gradle প্লাগইন v2.9.4+
আপনি আপনার শেয়ার করা লাইব্রেরিগুলির জন্য একটি অ-মানক অবস্থান ব্যবহার করছেন কিনা তা পরীক্ষা করুন৷
আপনি যদি আপনার অ্যাপের শেয়ার করা লাইব্রেরির জন্য শুধুমাত্র
BuildId
গুলি না পেয়ে থাকেন, তাহলে সম্ভবত আপনি শেয়ার করা লাইব্রেরির জন্য স্ট্যান্ডার্ড, ডিফল্ট অবস্থান ব্যবহার করছেন না। যদি এটি হয়, তাহলে Crashlytics সংশ্লিষ্টBuildId
s সনাক্ত করতে সক্ষম হবে না। আমরা সুপারিশ করছি যে আপনি শেয়ার করা লাইব্রেরির জন্য স্ট্যান্ডার্ড অবস্থান ব্যবহার করার কথা বিবেচনা করুন।নিশ্চিত করুন যে আপনি বিল্ড প্রক্রিয়া চলাকালীন
BuildId
গুলি ছিনিয়ে নিচ্ছেন না৷মনে রাখবেন যে নিম্নলিখিত সমস্যা সমাধানের টিপস ANR এবং নেটিভ ক্র্যাশ উভয় ক্ষেত্রেই প্রযোজ্য।
আপনার বাইনারিগুলিতে
readelf -n
চালিয়েBuildId
বিদ্যমান কিনা তা পরীক্ষা করুন। যদিBuildId
অনুপস্থিত থাকে, তাহলে আপনার বিল্ড সিস্টেমের জন্য পতাকাগুলিতে-Wl,--build-id
যোগ করুন।আপনার APK সাইজ কমানোর প্রয়াসে আপনি অনিচ্ছাকৃতভাবে
BuildId
গুলি খুলে ফেলছেন না তা পরীক্ষা করুন৷আপনি যদি একটি লাইব্রেরির স্ট্রাইপড এবং আনস্ট্রিপড ভার্সন রাখেন, তাহলে আপনার কোডে সঠিক ভার্সনটি নির্দেশ করতে ভুলবেন না।
Google Play এবং Crashlytics মধ্যে ANR গণনার মধ্যে অমিল থাকতে পারে। ANR ডেটা সংগ্রহ এবং রিপোর্ট করার পদ্ধতির পার্থক্যের কারণে এটি প্রত্যাশিত। Crashlytics অ্যাপটি পরবর্তীতে শুরু হলে ANR রিপোর্ট করে, যেখানে Android Vitals ANR হওয়ার পরে ANR ডেটা পাঠায়।
উপরন্তু, Crashlytics শুধুমাত্র ANR গুলি প্রদর্শন করে যা Android 11+ চালিত ডিভাইসগুলিতে ঘটে, Google Play এর তুলনায় যা Google Play পরিষেবা এবং ডেটা সংগ্রহের সম্মতি সহ ডিভাইসগুলি থেকে ANR প্রদর্শন করে।
LLVM এবং GNU টুলচেইনের স্বতন্ত্র ডিফল্ট এবং আপনার অ্যাপের বাইনারিগুলির পঠনযোগ্য অংশের জন্য চিকিত্সা রয়েছে, যা Firebase কনসোলে অসামঞ্জস্যপূর্ণ স্ট্যাক ট্রেস তৈরি করতে পারে। এটি প্রশমিত করতে, আপনার বিল্ড প্রক্রিয়াতে নিম্নলিখিত লিঙ্কার ফ্ল্যাগগুলি যুক্ত করুন:
আপনি যদি LLVM টুলচেন থেকে
lld
লিঙ্কার ব্যবহার করছেন, যোগ করুন:-Wl,--no-rosegment
আপনি যদি GNU টুলচেন থেকে
ld.gold
লিঙ্কার ব্যবহার করেন, তাহলে যোগ করুন:-Wl,--rosegment
আপনি যদি এখনও স্ট্যাক ট্রেস অসঙ্গতি দেখতে পান (বা যদি কোনও পতাকা আপনার টুলচেইনের সাথে প্রাসঙ্গিক না হয়), পরিবর্তে আপনার বিল্ড প্রক্রিয়াতে নিম্নলিখিতগুলি যোগ করার চেষ্টা করুন:
-fno-omit-frame-pointer
Crashlytics প্লাগইন একটি কাস্টমাইজড ব্রেকপ্যাড প্রতীক ফাইল জেনারেটর বান্ডেল করে। আপনি যদি ব্রেকপ্যাড প্রতীক ফাইল তৈরি করার জন্য আপনার নিজস্ব বাইনারি ব্যবহার করতে পছন্দ করেন (উদাহরণস্বরূপ, যদি আপনি উত্স থেকে আপনার বিল্ড চেইনে সমস্ত নেটিভ এক্সিকিউটেবল তৈরি করতে পছন্দ করেন), এক্সিকিউটেবলের পাথ নির্দিষ্ট করতে ঐচ্ছিক symbolGeneratorBinary
এক্সটেনশন সম্পত্তি ব্যবহার করুন।
আপনি দুটি উপায়ের একটিতে ব্রেকপ্যাড প্রতীক ফাইল জেনারেটর বাইনারির পথটি নির্দিষ্ট করতে পারেন:
বিকল্প 1 : আপনার
build.gradle
ফাইলেfirebaseCrashlytics
এক্সটেনশনের মাধ্যমে পথটি নির্দিষ্ট করুনআপনার অ্যাপ-স্তরের
build.gradle.kts
ফাইলে নিম্নলিখিত যোগ করুন:গ্রেডল প্লাগইন v3.0.0+
android { buildTypes { release { configure<CrashlyticsExtension> { nativeSymbolUploadEnabled = true // Add these optional fields to specify the path to the executable symbolGeneratorType = "breakpad" breakpadBinary = file("/PATH/TO/BREAKPAD/DUMP_SYMS") } } } }
নিম্ন প্লাগইন সংস্করণ
android { // ... buildTypes { // ... release { // ... firebaseCrashlytics { // existing; required for either symbol file generator nativeSymbolUploadEnabled true // Add this optional new block to specify the path to the executable symbolGenerator { breakpad { binary file("/PATH/TO/BREAKPAD/DUMP_SYMS") } } } } }
বিকল্প 2 : আপনার Gradle বৈশিষ্ট্য ফাইলে একটি সম্পত্তি লাইনের মাধ্যমে পথটি নির্দিষ্ট করুন
এক্সিকিউটেবলের পাথ নির্দিষ্ট করতে আপনি
com.google.firebase.crashlytics.breakpadBinary
প্রপার্টি ব্যবহার করতে পারেন।আপনি ম্যানুয়ালি আপনার Gradle বৈশিষ্ট্য ফাইল আপডেট করতে পারেন বা কমান্ড লাইনের মাধ্যমে ফাইল আপডেট করতে পারেন। উদাহরণস্বরূপ, কমান্ড লাইনের মাধ্যমে পথটি নির্দিষ্ট করতে, নিম্নলিখিতগুলির মতো একটি কমান্ড ব্যবহার করুন:
./gradlew -Pcom.google.firebase.crashlytics.symbolGenerator=breakpad \ -Pcom.google.firebase.crashlytics.breakpadBinary=/PATH/TO/BREAKPAD/DUMP_SYMS \ app:assembleRelease app:uploadCrashlyticsSymbolFileRelease
আপনি যদি নিম্নলিখিত ব্যতিক্রমটি দেখতে পান, তাহলে সম্ভবত আপনি DexGuard-এর এমন একটি সংস্করণ ব্যবহার করছেন যা Firebase Crashlytics SDK-এর সাথে সামঞ্জস্যপূর্ণ নয়:
java.lang.IllegalArgumentException: Transport backend 'cct' is not registered
এই ব্যতিক্রম আপনার অ্যাপ ক্র্যাশ করে না কিন্তু ক্র্যাশ রিপোর্ট পাঠাতে বাধা দেয়। এটি ঠিক করতে:
আপনি সর্বশেষ DexGuard 8.x রিলিজ ব্যবহার করছেন তা নিশ্চিত করুন। সর্বশেষ সংস্করণে Firebase Crashlytics SDK-এর জন্য প্রয়োজনীয় নিয়ম রয়েছে।
আপনি যদি আপনার DexGuard সংস্করণ পরিবর্তন করতে না চান, তাহলে আপনার অস্পষ্টতা নিয়মে নিম্নলিখিত লাইন যোগ করার চেষ্টা করুন (আপনার DexGuard কনফিগারেশন ফাইলে):
-keepresourcexmlelements manifest/application/service/meta-data@value=cct
যখন একটি অ্যাপ এমন একটি অস্পষ্টকারী ব্যবহার করে যা ফাইল এক্সটেনশন প্রকাশ করে না, তখন Crashlytics ডিফল্টরূপে .java
ফাইল এক্সটেনশনের সাথে প্রতিটি সমস্যা তৈরি করে।
যাতে Crashlytics সঠিক ফাইল এক্সটেনশনের সাথে সমস্যা তৈরি করতে পারে, নিশ্চিত করুন যে আপনার অ্যাপ নিম্নলিখিত সেটআপ ব্যবহার করছে:
- Android Gradle 4.2.0 বা উচ্চতর ব্যবহার করে
- অস্পষ্টতা চালু থাকা অবস্থায় R8 ব্যবহার করে। R8 এ আপনার অ্যাপ আপডেট করতে, এই ডকুমেন্টেশন অনুসরণ করুন।
মনে রাখবেন যে উপরে বর্ণিত সেটআপে আপডেট করার পরে, আপনি নতুন .kt
সমস্যাগুলি দেখতে শুরু করতে পারেন যা বিদ্যমান .java
সমস্যাগুলির সদৃশ। সেই পরিস্থিতি সম্পর্কে আরও জানতে FAQ দেখুন।
2021 সালের ডিসেম্বরের মাঝামাঝি থেকে, Crashlytics কোটলিন ব্যবহার করে এমন অ্যাপ্লিকেশনগুলির জন্য সমর্থন উন্নত করেছে।
সম্প্রতি অবধি, উপলব্ধ অস্পষ্টকারীরা ফাইল এক্সটেনশনটি প্রকাশ করেনি, তাই Crashlytics ডিফল্টরূপে একটি .java
ফাইল এক্সটেনশনের সাথে প্রতিটি সমস্যা তৈরি করেছে। যাইহোক, Android Gradle 4.2.0 অনুযায়ী, R8 ফাইল এক্সটেনশন সমর্থন করে।
এই আপডেটের মাধ্যমে, Crashlytics এখন নির্ধারণ করতে পারে যে অ্যাপের মধ্যে ব্যবহৃত প্রতিটি ক্লাস কোটলিনে লেখা আছে কিনা এবং ইস্যু স্বাক্ষরে সঠিক ফাইলের নাম অন্তর্ভুক্ত করা হয়েছে। আপনার অ্যাপে নিম্নলিখিত সেটআপ থাকলে ক্র্যাশগুলি এখন সঠিকভাবে .kt
ফাইলগুলিতে (যথাযথ হিসাবে) দায়ী করা হয়েছে:
- আপনার অ্যাপ Android Gradle 4.2.0 বা উচ্চতর ব্যবহার করে।
- অস্পষ্টতা চালু থাকা অবস্থায় আপনার অ্যাপ R8 ব্যবহার করে।
যেহেতু নতুন ক্র্যাশগুলি এখন তাদের ইস্যু স্বাক্ষরে সঠিক ফাইল এক্সটেনশন অন্তর্ভুক্ত করে, আপনি নতুন .kt
সমস্যাগুলি দেখতে পারেন যা আসলে বিদ্যমান .java
লেবেলযুক্ত সমস্যাগুলির নকল। Firebase কনসোলে, যদি একটি নতুন .kt
সমস্যা বিদ্যমান .java
লেবেলযুক্ত সমস্যার একটি সম্ভাব্য অনুলিপি হয় তবে আমরা সনাক্ত করার এবং আপনার সাথে যোগাযোগ করার চেষ্টা করি৷
নোটগুলি প্রকল্পের সদস্যদের প্রশ্ন, স্ট্যাটাস আপডেট ইত্যাদির সাথে নির্দিষ্ট বিষয়ে মন্তব্য করার অনুমতি দেয়।
যখন কোনও প্রকল্প সদস্য একটি নোট পোস্ট করে, তখন এটি তাদের Google অ্যাকাউন্টের ইমেলের সাথে লেবেল করা হয়। এই ইমেল ঠিকানাটি নোটের সাথে, নোটটি দেখার অ্যাক্সেস সহ সমস্ত প্রকল্প সদস্যদের কাছে দৃশ্যমান।
নিম্নলিখিতগুলি নোটগুলি দেখতে, লিখতে এবং মুছতে প্রয়োজনীয় অ্যাক্সেস বর্ণনা করে:
নিম্নলিখিত যেকোনও ভূমিকা সহ প্রকল্প সদস্যরা বিদ্যমান নোটগুলি দেখতে এবং মুছে ফেলতে পারেন এবং একটি সমস্যায় নতুন নোট লিখতে পারেন।
- প্রকল্পের মালিক বা সম্পাদক , ফায়ারবেস অ্যাডমিন , কোয়ালিটি অ্যাডমিন বা ক্র্যাশলাইটিক্স অ্যাডমিন
নিম্নলিখিত ভূমিকাগুলির মধ্যে যেকোনও প্রকল্পের সদস্যরা একটি ইস্যুতে পোস্ট করা নোটগুলি দেখতে পারেন, কিন্তু তারা একটি নোট মুছতে বা লিখতে পারবেন না।
- প্রজেক্ট ভিউয়ার , ফায়ারবেস ভিউয়ার , কোয়ালিটি ভিউয়ার বা ক্র্যাশলাইটিক্স ভিউয়ার
ইন্টিগ্রেশন
আপনার প্রোজেক্ট যদি Google Mobile Ads SDK-এর পাশাপাশি Crashlytics ব্যবহার করে, তাহলে ব্যতিক্রম হ্যান্ডলারদের নিবন্ধন করার সময় ক্র্যাশ রিপোর্টাররা হস্তক্ষেপ করছে। সমস্যা সমাধানের জন্য, disableSDKCrashReporting
কল করে Mobile Ads SDK-এ ক্র্যাশ রিপোর্টিং বন্ধ করুন।
আপনি BigQuery-এর সাথে Crashlytics লিঙ্ক করার পরে, আপনার তৈরি করা নতুন ডেটাসেটগুলি স্বয়ংক্রিয়ভাবে মার্কিন যুক্তরাষ্ট্রে অবস্থিত হবে, আপনার Firebase প্রকল্পের অবস্থান নির্বিশেষে।
প্ল্যাটফর্ম সমর্থন
Firebase Crashlytics NDK ARMv5 (armeabi) সমর্থন করে না। NDK r17 হিসাবে এই ABI-এর জন্য সমর্থন সরানো হয়েছে।
প্রত্যাবর্তিত সমস্যা
আপনি পূর্বে সমস্যাটি বন্ধ করার সময় একটি সমস্যাটি রিগ্রেশন হয়েছে কিন্তু Crashlytics একটি নতুন প্রতিবেদন পায় যে সমস্যাটি আবার ঘটেছে। Crashlytics স্বয়ংক্রিয়ভাবে এই প্রত্যাবর্তিত সমস্যাগুলি পুনরায় খোলে যাতে আপনি সেগুলিকে আপনার অ্যাপের জন্য উপযুক্ত হিসাবে সমাধান করতে পারেন।
এখানে একটি উদাহরণের দৃশ্য যা ব্যাখ্যা করে যে কীভাবে Crashlytics একটি সমস্যাকে রিগ্রেশন হিসাবে শ্রেণীবদ্ধ করে:
- প্রথমবারের মতো, Crashlytics ক্র্যাশ "A" সম্পর্কে একটি ক্র্যাশ রিপোর্ট পায়৷ Crashlytics সেই ক্র্যাশের জন্য একটি সংশ্লিষ্ট সমস্যা খোলে (ইস্যু "A")।
- আপনি এই বাগটি দ্রুত ঠিক করুন, সমস্যা "A" বন্ধ করুন এবং তারপর আপনার অ্যাপের একটি নতুন সংস্করণ প্রকাশ করুন৷
- আপনি সমস্যাটি বন্ধ করার পরে Crashlytics ইস্যু "A" সম্পর্কে আরেকটি প্রতিবেদন পায়।
- প্রতিবেদনটি যদি এমন কোনো অ্যাপ সংস্করণ থেকে হয় যা Crashlytics জানত যে আপনি যখন সমস্যাটি বন্ধ করেছিলেন (অর্থাৎ সংস্করণটি কোনও ক্র্যাশের জন্য একটি ক্র্যাশ রিপোর্ট পাঠিয়েছিল), তাহলে Crashlytics সমস্যাটিকে প্রত্যাবর্তন হিসাবে বিবেচনা করবে না। বিষয়টি বন্ধ থাকবে।
- প্রতিবেদনটি যদি এমন কোনো অ্যাপ সংস্করণ থেকে হয় যা Crashlytics জানত না যে আপনি কখন সমস্যাটি বন্ধ করেছিলেন (অর্থাৎ সংস্করণটি কোনও ক্র্যাশের জন্য কোনও ক্র্যাশ রিপোর্ট পাঠায়নি ), তাহলে Crashlytics সমস্যাটিকে প্রত্যাবর্তন বলে বিবেচনা করে এবং সমস্যাটি আবার খুলবে।
যখন একটি সমস্যা রিগ্রেস হয়, তখন আমরা একটি রিগ্রেশন শনাক্তকরণ সতর্কতা পাঠাই এবং সমস্যাটিতে একটি রিগ্রেশন সিগন্যাল যোগ করি যাতে আপনাকে জানানো হয় যে Crashlytics সমস্যাটি আবার খুলেছে। আপনি যদি আমাদের রিগ্রেশন অ্যালগরিদমের কারণে কোনো সমস্যা পুনরায় খুলতে না চান, তাহলে সমস্যাটিকে বন্ধ করার পরিবর্তে "নিঃশব্দ" করুন।
যদি কোনও রিপোর্ট কোনও পুরানো অ্যাপ সংস্করণ থেকে হয় যেটি আপনি সমস্যাটি বন্ধ করার সময় কোনও ক্র্যাশ রিপোর্ট পাঠাননি, তাহলে Crashlytics সমস্যাটিকে প্রত্যাবর্তন বলে বিবেচনা করে এবং সমস্যাটি আবার খুলবে।
এই পরিস্থিতি নিম্নলিখিত পরিস্থিতিতে ঘটতে পারে: আপনি একটি বাগ সংশোধন করেছেন এবং আপনার অ্যাপের একটি নতুন সংস্করণ প্রকাশ করেছেন, কিন্তু আপনার কাছে এখনও বাগ সংশোধন ছাড়াই পুরানো সংস্করণে ব্যবহারকারীরা আছে৷ যদি, ঘটনাক্রমে, আপনি সমস্যাটি বন্ধ করার সময় সেই পুরানো সংস্করণগুলির মধ্যে একটি কখনই কোনও ক্র্যাশ রিপোর্ট না পাঠায়, এবং সেই ব্যবহারকারীরা বাগটির সম্মুখীন হতে শুরু করে, তাহলে সেই ক্র্যাশ রিপোর্টগুলি একটি প্রত্যাবর্তিত সমস্যাকে ট্রিগার করবে৷
আপনি যদি আমাদের রিগ্রেশন অ্যালগরিদমের কারণে কোনো সমস্যা পুনরায় খুলতে না চান, তাহলে সমস্যাটিকে বন্ধ করার পরিবর্তে "নিঃশব্দ" করুন।
,এই পৃষ্ঠাটি Crashlytics ব্যবহার করার বিষয়ে প্রায়শই জিজ্ঞাসিত প্রশ্নের সমস্যা সমাধানে সহায়তা এবং উত্তর প্রদান করে। আপনি যা খুঁজছেন তা খুঁজে না পেলে বা অতিরিক্ত সাহায্যের প্রয়োজন হলে, Firebase সহায়তার সাথে যোগাযোগ করুন।
সাধারণ সমস্যা সমাধান/FAQ
Firebase কনসোলে আপনার ইস্যু টেবিলে তালিকাভুক্ত সমস্যার জন্য আপনি দুটি ভিন্ন ফর্ম্যাট লক্ষ্য করতে পারেন। এবং আপনি আপনার কিছু সমস্যার মধ্যে "ভেরিয়েন্ট" নামক একটি বৈশিষ্ট্যও লক্ষ্য করতে পারেন। এখানে কেন!
2023 সালের গোড়ার দিকে, আমরা ইভেন্টগুলিকে গ্রুপ করার জন্য একটি উন্নত বিশ্লেষণ ইঞ্জিনের পাশাপাশি একটি আপডেট করা ডিজাইন এবং নতুন সমস্যাগুলির জন্য কিছু উন্নত বৈশিষ্ট্য নিয়ে এসেছি (যেমন বৈকল্পিক!)। সমস্ত বিবরণের জন্য আমাদের সাম্প্রতিক ব্লগ পোস্টটি দেখুন, তবে আপনি হাইলাইটগুলির জন্য নীচে পড়তে পারেন।
Crashlytics আপনার অ্যাপ থেকে সমস্ত ইভেন্ট বিশ্লেষণ করে (যেমন ক্র্যাশ, নন-ফেটাল, এবং ANR) এবং ইভেন্টের গ্রুপ তৈরি করে যাকে সমস্যা বলা হয় — একটি ইস্যুতে সমস্ত ইভেন্টের ব্যর্থতার একটি সাধারণ পয়েন্ট থাকে।
এই সমস্যাগুলির মধ্যে ইভেন্টগুলিকে গোষ্ঠীভুক্ত করার জন্য, উন্নত বিশ্লেষণ ইঞ্জিন এখন ইভেন্টের অনেক দিককে দেখে, যার মধ্যে স্ট্যাক ট্রেসের ফ্রেম, ব্যতিক্রম বার্তা, ত্রুটি কোড এবং অন্যান্য প্ল্যাটফর্ম বা ত্রুটির ধরন বৈশিষ্ট্যগুলি রয়েছে৷
যাইহোক, ইভেন্টের এই গ্রুপের মধ্যে, ব্যর্থতার দিকে পরিচালিত স্ট্যাক ট্রেসগুলি ভিন্ন হতে পারে। একটি ভিন্ন স্ট্যাক ট্রেস একটি ভিন্ন মূল কারণ বোঝাতে পারে। একটি ইস্যুতে এই সম্ভাব্য পার্থক্যটি উপস্থাপন করার জন্য, আমরা এখন সমস্যার মধ্যে ভেরিয়েন্ট তৈরি করি - প্রতিটি ভেরিয়েন্ট হল একটি ইস্যুতে ইভেন্টগুলির একটি সাব-গ্রুপ যার একই ব্যর্থতা পয়েন্ট এবং একই স্ট্যাক ট্রেস রয়েছে। ভেরিয়েন্টের সাহায্যে, আপনি একটি সমস্যার মধ্যে সবচেয়ে সাধারণ স্ট্যাক ট্রেসগুলি ডিবাগ করতে পারেন এবং বিভিন্ন মূল কারণগুলি ব্যর্থতার দিকে নিয়ে যাচ্ছে কিনা তা নির্ধারণ করতে পারেন।
এই উন্নতিগুলির সাথে আপনি যা অনুভব করবেন তা এখানে:
সংশোধিত মেটাডেটা ইস্যু সারির মধ্যে প্রদর্শিত হয়
আপনার অ্যাপে সমস্যাগুলি বোঝা এবং ট্রাইজ করা এখন সহজ।কম ডুপ্লিকেট সমস্যা
একটি লাইন নম্বর পরিবর্তনের ফলে একটি নতুন সমস্যা হয় না।বিভিন্ন মূল কারণ সহ জটিল সমস্যার সহজ ডিবাগিং
একটি সমস্যার মধ্যে সবচেয়ে সাধারণ স্ট্যাক ট্রেস ডিবাগ করতে ভেরিয়েন্ট ব্যবহার করুন।আরও অর্থপূর্ণ সতর্কতা এবং সংকেত
একটি নতুন সমস্যা আসলে একটি নতুন বাগ প্রতিনিধিত্ব করে।আরো শক্তিশালী অনুসন্ধান
প্রতিটি সমস্যায় আরও অনুসন্ধানযোগ্য মেটাডেটা থাকে, যেমন ব্যতিক্রমের ধরন এবং প্যাকেজের নাম।
এই উন্নতিগুলি কীভাবে ঘটছে তা এখানে:
যখন আমরা আপনার অ্যাপ থেকে নতুন ইভেন্টগুলি পাই, তখন আমরা তা একটি বিদ্যমান সমস্যার সাথে মেলে কিনা তা পরীক্ষা করব।
যদি কোন মিল না থাকে, আমরা স্বয়ংক্রিয়ভাবে ইভেন্টে আমাদের স্মার্ট ইভেন্ট-গ্রুপিং অ্যালগরিদম প্রয়োগ করব এবং পরিমার্জিত মেটাডেটা ডিজাইনের সাথে একটি নতুন সমস্যা তৈরি করব।
এটিই প্রথম বড় আপডেট যা আমরা আমাদের ইভেন্ট গ্রুপিংয়ে তৈরি করছি। আপনার যদি প্রতিক্রিয়া থাকে বা কোনো সমস্যার সম্মুখীন হন, তাহলে অনুগ্রহ করে একটি প্রতিবেদন দাখিল করে আমাদের জানান।
আপনি যদি ব্রেডক্রাম্ব লগ দেখতে না পান, তাহলে আমরা Google Analytics জন্য আপনার অ্যাপের কনফিগারেশন চেক করার পরামর্শ দিই। আপনি নিম্নলিখিত প্রয়োজনীয়তা পূরণ নিশ্চিত করুন:
আপনি আপনার Firebase প্রকল্পে Google Analytics সক্ষম করেছেন ।
আপনি Google Analytics জন্য ডেটা শেয়ারিং সক্ষম করেছেন। আপনার Analytics ডেটা শেয়ারিং সেটিংস পরিচালনা করুন- এ এই সেটিং সম্পর্কে আরও জানুন
আপনি করেছেনGoogle Analytics এর জন্য Firebase SDK যোগ করা হয়েছেআপনার অ্যাপে। এই SDK অবশ্যই Crashlytics SDK ছাড়াও যোগ করতে হবে।
আপনি ব্যবহার করছেনসর্বশেষ Firebase SDK সংস্করণআপনি আপনার অ্যাপে যে সমস্ত পণ্য ব্যবহার করেন তার জন্য।
বিশেষ করে দেখে নিন যে আপনি Google Analytics জন্য Firebase SDK-এর ন্যূনতম নিম্নলিখিত সংস্করণটি ব্যবহার করছেন:
Android — v17.2.3+ ( BoM v24.7.1+)।
আপনি যদি বেগের সতর্কতা দেখতে না পান তবে নিশ্চিত করুন যে আপনি ব্যবহার করছেনCrashlytics SDK v18.6.0+ (বা Firebase BoM v32.6.0+)।
আপনি যদি ক্র্যাশ-মুক্ত মেট্রিক্স (যেমন ক্র্যাশ-মুক্ত ব্যবহারকারী এবং সেশন) দেখতে না পান বা অবিশ্বস্ত মেট্রিক না দেখেন তবে নিম্নলিখিতগুলি পরীক্ষা করুন:
আপনি ব্যবহার করছেন তা নিশ্চিত করুনCrashlytics SDK v18.6.0+ (বা Firebase BoM v32.6.0+)।
নিশ্চিত করুন যে আপনার ডেটা সংগ্রহের সেটিংস আপনার ক্র্যাশ-মুক্ত মেট্রিক্সের গুণমানকে প্রভাবিত করছে না:
আপনি যদি স্বয়ংক্রিয় ক্র্যাশ রিপোর্টিং অক্ষম করে অপ্ট-ইন রিপোর্টিং সক্ষম করেন , তবে ক্র্যাশ তথ্য শুধুমাত্র সেই ব্যবহারকারীদের কাছ থেকে Crashlytics এ পাঠানো যেতে পারে যারা স্পষ্টভাবে ডেটা সংগ্রহে নির্বাচন করেছেন। এইভাবে, ক্র্যাশ-মুক্ত মেট্রিক্সের নির্ভুলতা প্রভাবিত হবে কারণ Crashlytics শুধুমাত্র এই অপ্ট-ইন ব্যবহারকারীদের (আপনার সমস্ত ব্যবহারকারীর পরিবর্তে) থেকে ক্র্যাশ তথ্য রয়েছে। এর মানে হল যে আপনার ক্র্যাশ-মুক্ত মেট্রিকগুলি কম নির্ভরযোগ্য এবং আপনার অ্যাপের সামগ্রিক স্থিতিশীলতার কম প্রতিফলিত হতে পারে।
আপনার যদি স্বয়ংক্রিয় ডেটা সংগ্রহ অক্ষম থাকে, তাহলে আপনি Crashlytics এ ডিভাইসে ক্যাশে করা রিপোর্ট পাঠাতে
sendUnsentReports
ব্যবহার করতে পারেন। এই পদ্ধতিটি ব্যবহার করলে Crashlytics ক্র্যাশ ডেটা পাঠানো হবে, কিন্তু সেশন ডেটা নয় যার কারণে কনসোল চার্টগুলি ক্র্যাশ-মুক্ত মেট্রিক্সের জন্য কম বা শূন্য মান দেখায়৷
ক্র্যাশ-মুক্ত মেট্রিক্স বুঝুন দেখুন।
Crashlytics অ্যান্ড্রয়েড 11 এবং উচ্চতর সংস্করণে চালিত ডিভাইসগুলি থেকে Android অ্যাপগুলির জন্য ANR রিপোর্টিং সমর্থন করে। আমরা ANR ( getHistoricalProcessExitReasons ) সংগ্রহ করতে যে অন্তর্নিহিত API ব্যবহার করি তা SIGQUIT বা ওয়াচডগ-ভিত্তিক পদ্ধতির চেয়ে বেশি নির্ভরযোগ্য। এই API শুধুমাত্র Android 11+ ডিভাইসে উপলব্ধ।
যদি আপনার কিছু ANR তাদের BuildId
অনুপস্থিত থাকে, তাহলে নিম্নরূপ সমস্যা সমাধান করুন:
নিশ্চিত করুন যে আপনি একটি আপ-টু-ডেট Crashlytics Android SDK এবং Crashlytics Gradle প্লাগইন সংস্করণ ব্যবহার করছেন।
আপনি যদি Android 11 এবং কিছু Android 12 ANR-এর জন্য
BuildId
অনুপস্থিত থাকেন, তাহলে সম্ভবত আপনি একটি পুরানো SDK, Gradle প্লাগইন বা উভয়ই ব্যবহার করছেন। এই ANR-এর জন্য সঠিকভাবেBuildId
সংগ্রহ করতে, আপনাকে নিম্নলিখিত সংস্করণগুলি ব্যবহার করতে হবে:- Crashlytics Android SDK v18.3.5+ ( Firebase BoM v31.2.2+)
- Crashlytics Gradle প্লাগইন v2.9.4+
আপনি আপনার শেয়ার করা লাইব্রেরিগুলির জন্য একটি অ-মানক অবস্থান ব্যবহার করছেন কিনা তা পরীক্ষা করুন৷
আপনি যদি আপনার অ্যাপের শেয়ার করা লাইব্রেরির জন্য শুধুমাত্র
BuildId
গুলি না পেয়ে থাকেন, তাহলে সম্ভবত আপনি শেয়ার করা লাইব্রেরির জন্য স্ট্যান্ডার্ড, ডিফল্ট অবস্থান ব্যবহার করছেন না। যদি এটি হয়, তাহলে Crashlytics সংশ্লিষ্টBuildId
s সনাক্ত করতে সক্ষম হবে না। আমরা সুপারিশ করছি যে আপনি শেয়ার করা লাইব্রেরির জন্য স্ট্যান্ডার্ড অবস্থান ব্যবহার করার কথা বিবেচনা করুন।নিশ্চিত করুন যে আপনি বিল্ড প্রক্রিয়া চলাকালীন
BuildId
গুলি ছিনিয়ে নিচ্ছেন না৷মনে রাখবেন যে নিম্নলিখিত সমস্যা সমাধানের টিপস ANR এবং নেটিভ ক্র্যাশ উভয় ক্ষেত্রেই প্রযোজ্য।
আপনার বাইনারিগুলিতে
readelf -n
চালিয়েBuildId
বিদ্যমান কিনা তা পরীক্ষা করুন। যদিBuildId
অনুপস্থিত থাকে, তাহলে আপনার বিল্ড সিস্টেমের জন্য পতাকাগুলিতে-Wl,--build-id
যোগ করুন।আপনার APK সাইজ কমানোর প্রয়াসে আপনি অনিচ্ছাকৃতভাবে
BuildId
গুলি খুলে ফেলছেন না তা পরীক্ষা করুন৷আপনি যদি একটি লাইব্রেরির স্ট্রাইপড এবং আনস্ট্রিপড ভার্সন রাখেন, তাহলে আপনার কোডে সঠিক ভার্সনটি নির্দেশ করতে ভুলবেন না।
Google Play এবং Crashlytics মধ্যে ANR গণনার মধ্যে অমিল থাকতে পারে। ANR ডেটা সংগ্রহ এবং রিপোর্ট করার পদ্ধতির পার্থক্যের কারণে এটি প্রত্যাশিত। Crashlytics অ্যাপটি পরবর্তীতে শুরু হলে ANR রিপোর্ট করে, যেখানে Android Vitals ANR হওয়ার পরে ANR ডেটা পাঠায়।
উপরন্তু, Crashlytics শুধুমাত্র ANR গুলি প্রদর্শন করে যা Android 11+ চালিত ডিভাইসগুলিতে ঘটে, Google Play এর তুলনায় যা Google Play পরিষেবা এবং ডেটা সংগ্রহের সম্মতি সহ ডিভাইসগুলি থেকে ANR প্রদর্শন করে।
LLVM এবং GNU টুলচেইনের স্বতন্ত্র ডিফল্ট এবং আপনার অ্যাপের বাইনারিগুলির পঠনযোগ্য অংশের জন্য চিকিত্সা রয়েছে, যা Firebase কনসোলে অসামঞ্জস্যপূর্ণ স্ট্যাক ট্রেস তৈরি করতে পারে। এটি প্রশমিত করতে, আপনার বিল্ড প্রক্রিয়াতে নিম্নলিখিত লিঙ্কার ফ্ল্যাগগুলি যুক্ত করুন:
আপনি যদি LLVM টুলচেন থেকে
lld
লিঙ্কার ব্যবহার করছেন, যোগ করুন:-Wl,--no-rosegment
আপনি যদি GNU টুলচেন থেকে
ld.gold
লিঙ্কার ব্যবহার করেন, তাহলে যোগ করুন:-Wl,--rosegment
আপনি যদি এখনও স্ট্যাক ট্রেস অসঙ্গতি দেখতে পান (বা যদি কোনও পতাকা আপনার টুলচেইনের সাথে প্রাসঙ্গিক না হয়), পরিবর্তে আপনার বিল্ড প্রক্রিয়াতে নিম্নলিখিতগুলি যোগ করার চেষ্টা করুন:
-fno-omit-frame-pointer
Crashlytics প্লাগইন একটি কাস্টমাইজড ব্রেকপ্যাড প্রতীক ফাইল জেনারেটর বান্ডেল করে। আপনি যদি ব্রেকপ্যাড প্রতীক ফাইল তৈরি করার জন্য আপনার নিজস্ব বাইনারি ব্যবহার করতে পছন্দ করেন (উদাহরণস্বরূপ, যদি আপনি উত্স থেকে আপনার বিল্ড চেইনে সমস্ত নেটিভ এক্সিকিউটেবল তৈরি করতে পছন্দ করেন), এক্সিকিউটেবলের পাথ নির্দিষ্ট করতে ঐচ্ছিক symbolGeneratorBinary
এক্সটেনশন সম্পত্তি ব্যবহার করুন।
আপনি দুটি উপায়ের একটিতে ব্রেকপ্যাড প্রতীক ফাইল জেনারেটর বাইনারির পথটি নির্দিষ্ট করতে পারেন:
বিকল্প 1 : আপনার
build.gradle
ফাইলেfirebaseCrashlytics
এক্সটেনশনের মাধ্যমে পথটি নির্দিষ্ট করুনআপনার অ্যাপ-স্তরের
build.gradle.kts
ফাইলে নিম্নলিখিত যোগ করুন:গ্রেডল প্লাগইন v3.0.0+
android { buildTypes { release { configure<CrashlyticsExtension> { nativeSymbolUploadEnabled = true // Add these optional fields to specify the path to the executable symbolGeneratorType = "breakpad" breakpadBinary = file("/PATH/TO/BREAKPAD/DUMP_SYMS") } } } }
নিম্ন প্লাগইন সংস্করণ
android { // ... buildTypes { // ... release { // ... firebaseCrashlytics { // existing; required for either symbol file generator nativeSymbolUploadEnabled true // Add this optional new block to specify the path to the executable symbolGenerator { breakpad { binary file("/PATH/TO/BREAKPAD/DUMP_SYMS") } } } } }
বিকল্প 2 : আপনার Gradle বৈশিষ্ট্য ফাইলে একটি সম্পত্তি লাইনের মাধ্যমে পথটি নির্দিষ্ট করুন
এক্সিকিউটেবলের পাথ নির্দিষ্ট করতে আপনি
com.google.firebase.crashlytics.breakpadBinary
প্রপার্টি ব্যবহার করতে পারেন।আপনি ম্যানুয়ালি আপনার Gradle বৈশিষ্ট্য ফাইল আপডেট করতে পারেন বা কমান্ড লাইনের মাধ্যমে ফাইল আপডেট করতে পারেন। উদাহরণস্বরূপ, কমান্ড লাইনের মাধ্যমে পথটি নির্দিষ্ট করতে, নিম্নলিখিতগুলির মতো একটি কমান্ড ব্যবহার করুন:
./gradlew -Pcom.google.firebase.crashlytics.symbolGenerator=breakpad \ -Pcom.google.firebase.crashlytics.breakpadBinary=/PATH/TO/BREAKPAD/DUMP_SYMS \ app:assembleRelease app:uploadCrashlyticsSymbolFileRelease
আপনি যদি নিম্নলিখিত ব্যতিক্রমটি দেখতে পান, তাহলে সম্ভবত আপনি DexGuard-এর এমন একটি সংস্করণ ব্যবহার করছেন যা Firebase Crashlytics SDK-এর সাথে সামঞ্জস্যপূর্ণ নয়:
java.lang.IllegalArgumentException: Transport backend 'cct' is not registered
এই ব্যতিক্রম আপনার অ্যাপ ক্র্যাশ করে না কিন্তু ক্র্যাশ রিপোর্ট পাঠাতে বাধা দেয়। এটি ঠিক করতে:
আপনি সর্বশেষ DexGuard 8.x রিলিজ ব্যবহার করছেন তা নিশ্চিত করুন। সর্বশেষ সংস্করণে Firebase Crashlytics SDK-এর জন্য প্রয়োজনীয় নিয়ম রয়েছে।
আপনি যদি আপনার DexGuard সংস্করণ পরিবর্তন করতে না চান, তাহলে আপনার অস্পষ্টতা নিয়মে নিম্নলিখিত লাইন যোগ করার চেষ্টা করুন (আপনার DexGuard কনফিগারেশন ফাইলে):
-keepresourcexmlelements manifest/application/service/meta-data@value=cct
যখন একটি অ্যাপ এমন একটি অস্পষ্টকারী ব্যবহার করে যা ফাইল এক্সটেনশন প্রকাশ করে না, তখন Crashlytics ডিফল্টরূপে .java
ফাইল এক্সটেনশনের সাথে প্রতিটি সমস্যা তৈরি করে।
যাতে Crashlytics সঠিক ফাইল এক্সটেনশনের সাথে সমস্যা তৈরি করতে পারে, নিশ্চিত করুন যে আপনার অ্যাপ নিম্নলিখিত সেটআপ ব্যবহার করছে:
- Android Gradle 4.2.0 বা উচ্চতর ব্যবহার করে
- অস্পষ্টতা চালু থাকা অবস্থায় R8 ব্যবহার করে। R8 এ আপনার অ্যাপ আপডেট করতে, এই ডকুমেন্টেশন অনুসরণ করুন।
মনে রাখবেন যে উপরে বর্ণিত সেটআপে আপডেট করার পরে, আপনি নতুন .kt
সমস্যাগুলি দেখতে শুরু করতে পারেন যা বিদ্যমান .java
সমস্যাগুলির সদৃশ। সেই পরিস্থিতি সম্পর্কে আরও জানতে FAQ দেখুন।
2021 সালের ডিসেম্বরের মাঝামাঝি থেকে শুরু করে, Crashlytics কোটলিন ব্যবহার করে এমন অ্যাপ্লিকেশনগুলির জন্য সমর্থন উন্নত করে।
সম্প্রতি অবধি, উপলভ্য ওবফাসেক্টরগুলি ফাইল এক্সটেনশনটি প্রকাশ করেনি, সুতরাং Crashlytics প্রতিটি ইস্যু একটি .java
ফাইল এক্সটেনশন দিয়ে ডিফল্টরূপে উত্পন্ন করে। তবে অ্যান্ড্রয়েড গ্রেডল 4.2.0 হিসাবে, আর 8 ফাইল এক্সটেনশনগুলিকে সমর্থন করে।
এই আপডেটের সাহায্যে, Crashlytics এখন নির্ধারণ করতে পারে যে অ্যাপ্লিকেশনটির মধ্যে ব্যবহৃত প্রতিটি শ্রেণি কোটলিনে লেখা আছে এবং ইস্যু স্বাক্ষরটিতে সঠিক ফাইলের নাম অন্তর্ভুক্ত করে। আপনার অ্যাপ্লিকেশনটিতে নিম্নলিখিত সেটআপ থাকলে ক্র্যাশগুলি এখন .kt
ফাইলগুলিতে (যথাযথ হিসাবে) সঠিকভাবে দায়ী করা হয়েছে:
- আপনার অ্যাপ্লিকেশনটি অ্যান্ড্রয়েড গ্রেডল 4.2.0 বা তার বেশি ব্যবহার করে।
- আপনার অ্যাপ্লিকেশনটি obfuscation চালু সঙ্গে R8 ব্যবহার করে।
যেহেতু নতুন ক্র্যাশগুলি এখন তাদের ইস্যু স্বাক্ষরগুলিতে সঠিক ফাইল এক্সটেনশন অন্তর্ভুক্ত করে, আপনি নতুন .kt
সমস্যাগুলি দেখতে পাবেন যা আসলে বিদ্যমান .java
-লেবেলযুক্ত সমস্যাগুলির সদৃশ। Firebase কনসোলে, আমরা যদি নতুন .kt
সমস্যাটি বিদ্যমান। .java
-লেবেলড ইস্যুর সম্ভাব্য সদৃশ হয় তবে আমরা আপনাকে সনাক্ত এবং যোগাযোগ করার চেষ্টা করি।
নোটগুলি প্রকল্পের সদস্যদের প্রশ্ন, স্ট্যাটাস আপডেট ইত্যাদির সাথে নির্দিষ্ট বিষয়ে মন্তব্য করার অনুমতি দেয়।
যখন কোনও প্রকল্পের সদস্য একটি নোট পোস্ট করেন, এটি তাদের গুগল অ্যাকাউন্টের ইমেল সহ লেবেলযুক্ত। এই ইমেল ঠিকানাটি নোটের পাশাপাশি নোটটি দেখার জন্য অ্যাক্সেস সহ সমস্ত প্রকল্পের সদস্যদের কাছে দৃশ্যমান।
নিম্নলিখিত নোটগুলি দেখতে, লিখতে এবং মুছতে প্রয়োজনীয় অ্যাক্সেসের বর্ণনা দেয়:
নিম্নলিখিত যেকোনও ভূমিকা সহ প্রকল্প সদস্যরা বিদ্যমান নোটগুলি দেখতে এবং মুছে ফেলতে পারেন এবং একটি সমস্যায় নতুন নোট লিখতে পারেন।
- প্রকল্পের মালিক বা সম্পাদক , ফায়ারবেস অ্যাডমিন , কোয়ালিটি অ্যাডমিন বা ক্র্যাশলাইটিক্স অ্যাডমিন
নিম্নলিখিত যে কোনও ভূমিকা সহ প্রকল্পের সদস্যরা কোনও ইস্যুতে পোস্ট করা নোটগুলি দেখতে পারে তবে তারা কোনও নোট মুছতে বা লিখতে পারে না।
- প্রজেক্ট ভিউয়ার , ফায়ারবেস ভিউয়ার , কোয়ালিটি ভিউয়ার বা ক্র্যাশলাইটিক্স ভিউয়ার
ইন্টিগ্রেশন
আপনার প্রোজেক্ট যদি Google Mobile Ads SDK-এর পাশাপাশি Crashlytics ব্যবহার করে, তাহলে ব্যতিক্রম হ্যান্ডলারদের নিবন্ধন করার সময় ক্র্যাশ রিপোর্টাররা হস্তক্ষেপ করছে। সমস্যাটি সমাধান করার জন্য, Mobile Ads ক্র্যাশ রিপোর্টিং বন্ধ করুন disableSDKCrashReporting
কল করে।
আপনি BigQuery-এর সাথে Crashlytics লিঙ্ক করার পরে, আপনার তৈরি করা নতুন ডেটাসেটগুলি স্বয়ংক্রিয়ভাবে মার্কিন যুক্তরাষ্ট্রে অবস্থিত হবে, আপনার Firebase প্রকল্পের অবস্থান নির্বিশেষে।
প্ল্যাটফর্ম সমর্থন
Firebase Crashlytics এনডিকে আর্মভি 5 (আর্মেবি) সমর্থন করে না। এই এবিআইয়ের পক্ষে সমর্থনটি এনডিকে আর 17 হিসাবে সরানো হয়েছিল।
রেজিস্টেড ইস্যু
আপনি যখন ইস্যুটি আগে বন্ধ করে দিয়েছেন তখন কোনও ইস্যুতে একটি রিগ্রেশন রয়েছে তবে Crashlytics একটি নতুন প্রতিবেদন পেয়েছে যে বিষয়টি পুনরায় সংঘটিত হয়েছে। Crashlytics স্বয়ংক্রিয়ভাবে এই প্রত্যাবর্তিত সমস্যাগুলি পুনরায় খোলে যাতে আপনি সেগুলিকে আপনার অ্যাপের জন্য উপযুক্ত হিসাবে সমাধান করতে পারেন।
এখানে একটি উদাহরণ দৃশ্য যা ব্যাখ্যা করে যে Crashlytics কীভাবে কোনও ইস্যুকে রিগ্রেশন হিসাবে শ্রেণিবদ্ধ করে:
- প্রথমবারের মতো, Crashlytics ক্র্যাশ "এ" সম্পর্কে একটি ক্র্যাশ রিপোর্ট পেয়েছে। Crashlytics সেই ক্র্যাশের জন্য একটি সংশ্লিষ্ট সমস্যা খোলে (ইস্যু "A")।
- আপনি এই বাগটি দ্রুত ঠিক করুন, সমস্যা "A" বন্ধ করুন এবং তারপর আপনার অ্যাপের একটি নতুন সংস্করণ প্রকাশ করুন৷
- আপনি সমস্যাটি বন্ধ করার পরে "এ" ইস্যু সম্পর্কে আরও একটি প্রতিবেদন পেয়েছেন Crashlytics ।
- প্রতিবেদনটি যদি এমন কোনো অ্যাপ সংস্করণ থেকে হয় যা Crashlytics জানত যে আপনি যখন সমস্যাটি বন্ধ করেছিলেন (অর্থাৎ সংস্করণটি কোনও ক্র্যাশের জন্য একটি ক্র্যাশ রিপোর্ট পাঠিয়েছিল), তাহলে Crashlytics সমস্যাটিকে প্রত্যাবর্তন হিসাবে বিবেচনা করবে না। বিষয়টি বন্ধ থাকবে।
- যদি প্রতিবেদনটি এমন কোনও অ্যাপ্লিকেশন সংস্করণ থেকে আসে যা Crashlytics আপনি কখন সমস্যাটি বন্ধ করে দিয়েছিলেন তা সম্পর্কে জানেন না (যার অর্থ সংস্করণটি কোনও ক্র্যাশের জন্য কোনও ক্র্যাশ রিপোর্ট কখনও প্রেরণ করেনি), তবে Crashlytics বিষয়টি পুনরায় বিবেচনা করে বিবেচনা করে এবং বিষয়টি পুনরায় খোলা হবে।
যখন একটি সমস্যা রিগ্রেস হয়, তখন আমরা একটি রিগ্রেশন শনাক্তকরণ সতর্কতা পাঠাই এবং সমস্যাটিতে একটি রিগ্রেশন সিগন্যাল যোগ করি যাতে আপনাকে জানানো হয় যে Crashlytics সমস্যাটি আবার খুলেছে। আপনি যদি আমাদের রিগ্রেশন অ্যালগরিদমের কারণে কোনও সমস্যা পুনরায় খোলা না চান তবে এটি বন্ধ করার পরিবর্তে "নিঃশব্দ"।
যদি কোনও রিপোর্ট কোনও পুরানো অ্যাপ সংস্করণ থেকে হয় যেটি আপনি সমস্যাটি বন্ধ করার সময় কোনও ক্র্যাশ রিপোর্ট পাঠাননি, তাহলে Crashlytics সমস্যাটিকে প্রত্যাবর্তন বলে বিবেচনা করে এবং সমস্যাটি আবার খুলবে।
এই পরিস্থিতি নিম্নলিখিত পরিস্থিতিতে ঘটতে পারে: আপনি একটি বাগ ঠিক করেছেন এবং আপনার অ্যাপ্লিকেশনটির একটি নতুন সংস্করণ প্রকাশ করেছেন, তবে আপনার এখনও বাগ ফিক্স ছাড়াই পুরানো সংস্করণগুলিতে ব্যবহারকারী রয়েছে। যদি, সুযোগে, সেই পুরানো সংস্করণগুলির মধ্যে একটি যদি আপনি সমস্যাটি বন্ধ করে দেন তখন কোনও ক্র্যাশ রিপোর্ট কখনও প্রেরণ করেনি এবং সেই ব্যবহারকারীরা বাগের মুখোমুখি হতে শুরু করে, তবে এই ক্র্যাশ রিপোর্টগুলি একটি প্রতিরোধিত সমস্যাটিকে ট্রিগার করবে।
আপনি যদি আমাদের রিগ্রেশন অ্যালগরিদমের কারণে কোনও সমস্যা পুনরায় খোলা না চান তবে এটি বন্ধ করার পরিবর্তে "নিঃশব্দ"।
,এই পৃষ্ঠাটি Crashlytics ব্যবহার করার বিষয়ে প্রায়শই জিজ্ঞাসিত প্রশ্নের সমস্যা সমাধানে সহায়তা এবং উত্তর প্রদান করে। আপনি যা খুঁজছেন বা অতিরিক্ত সহায়তার প্রয়োজন তা যদি আপনি খুঁজে না পান তবে ফায়ারবেস সমর্থনের সাথে যোগাযোগ করুন।
সাধারণ সমস্যা সমাধান/FAQ
Firebase কনসোলে আপনার ইস্যু টেবিলে তালিকাভুক্ত সমস্যার জন্য আপনি দুটি ভিন্ন ফর্ম্যাট লক্ষ্য করতে পারেন। এবং আপনি আপনার কিছু সমস্যার মধ্যে "ভেরিয়েন্ট" নামক একটি বৈশিষ্ট্যও লক্ষ্য করতে পারেন। এখানে কেন!
2023 এর গোড়ার দিকে, আমরা গ্রুপিং ইভেন্টগুলির জন্য একটি উন্নত বিশ্লেষণ ইঞ্জিন পাশাপাশি একটি আপডেট ডিজাইন এবং নতুন সমস্যার জন্য কিছু উন্নত বৈশিষ্ট্য (যেমন ভেরিয়েন্টস!) তৈরি করেছি। সমস্ত তথ্যের জন্য আমাদের সাম্প্রতিক ব্লগ পোস্টটি দেখুন, তবে আপনি হাইলাইটগুলির জন্য নীচে পড়তে পারেন।
Crashlytics আপনার অ্যাপ্লিকেশন থেকে সমস্ত ইভেন্ট বিশ্লেষণ করে (যেমন ক্র্যাশ, ফ্যাটালস এবং এএনআরএস) এবং ইস্যু নামক ইভেন্টগুলির গোষ্ঠী তৈরি করে-একটি ইস্যুতে সমস্ত ইভেন্টের ব্যর্থতার একটি সাধারণ বিষয় রয়েছে।
এই সমস্যাগুলির মধ্যে ইভেন্টগুলিকে গোষ্ঠীভুক্ত করার জন্য, উন্নত বিশ্লেষণ ইঞ্জিন এখন ইভেন্টের অনেক দিককে দেখে, যার মধ্যে স্ট্যাক ট্রেসের ফ্রেম, ব্যতিক্রম বার্তা, ত্রুটি কোড এবং অন্যান্য প্ল্যাটফর্ম বা ত্রুটির ধরন বৈশিষ্ট্যগুলি রয়েছে৷
যাইহোক, ইভেন্টগুলির এই গোষ্ঠীর মধ্যে, ব্যর্থতার দিকে পরিচালিত স্ট্যাকের চিহ্নগুলি আলাদা হতে পারে। একটি পৃথক স্ট্যাক ট্রেসের অর্থ একটি ভিন্ন মূল কারণ হতে পারে। কোনও ইস্যুর মধ্যে এই সম্ভাব্য পার্থক্যের প্রতিনিধিত্ব করার জন্য, আমরা এখন ইস্যুগুলির মধ্যে বৈকল্পিক তৈরি করি - প্রতিটি বৈকল্পিক একটি ইস্যুতে ইভেন্টগুলির একটি উপ -গ্রুপ যা একই ব্যর্থতা পয়েন্ট এবং অনুরূপ স্ট্যাক ট্রেস রয়েছে। ভেরিয়েন্টগুলির সাহায্যে আপনি কোনও ইস্যুর মধ্যে সর্বাধিক সাধারণ স্ট্যাক ট্রেসগুলি ডিবাগ করতে পারেন এবং বিভিন্ন মূল কারণগুলি ব্যর্থতার দিকে পরিচালিত করে কিনা তা নির্ধারণ করতে পারেন।
এই উন্নতিগুলির সাথে আপনি যা অনুভব করবেন তা এখানে:
সংশোধিত মেটাডেটা ইস্যু সারির মধ্যে প্রদর্শিত হয়
আপনার অ্যাপ্লিকেশনটিতে এখন সমস্যাগুলি বোঝা এবং ট্রায়েজ সমস্যাগুলি বোঝা সহজ।কম ডুপ্লিকেট সমস্যা
একটি লাইন নম্বর পরিবর্তনের ফলে কোনও নতুন সমস্যা হয় না।বিভিন্ন মূল কারণগুলির সাথে জটিল সমস্যাগুলির সহজ ডিবাগিং
কোনও সমস্যার মধ্যে সর্বাধিক সাধারণ স্ট্যাক ট্রেসগুলি ডিবাগ করতে ভেরিয়েন্টগুলি ব্যবহার করুন।আরও অর্থপূর্ণ সতর্কতা এবং সংকেত
একটি নতুন সমস্যা আসলে একটি নতুন বাগ উপস্থাপন করে।আরো শক্তিশালী অনুসন্ধান
প্রতিটি সমস্যায় আরও অনুসন্ধানযোগ্য মেটাডেটা থাকে, যেমন ব্যতিক্রমের ধরন এবং প্যাকেজের নাম।
এই উন্নতিগুলি কীভাবে ঘুরছে তা এখানে:
যখন আমরা আপনার অ্যাপ থেকে নতুন ইভেন্টগুলি পাই, তখন আমরা তা একটি বিদ্যমান সমস্যার সাথে মেলে কিনা তা পরীক্ষা করব।
যদি কোনও মিল না থাকে তবে আমরা স্বয়ংক্রিয়ভাবে ইভেন্টটিতে আমাদের স্মার্ট ইভেন্ট-গ্রুপিং অ্যালগরিদম প্রয়োগ করব এবং পুনর্নির্মাণ মেটাডেটা ডিজাইনের সাহায্যে একটি নতুন সমস্যা তৈরি করব।
এটিই প্রথম বড় আপডেট যা আমরা আমাদের ইভেন্ট গ্রুপিংয়ে তৈরি করছি। আপনার যদি প্রতিক্রিয়া থাকে বা কোনও সমস্যার মুখোমুখি হন তবে দয়া করে একটি প্রতিবেদন দায়ের করে আমাদের জানান।
আপনি যদি ব্রেডক্র্যাম্ব লগগুলি না দেখেন তবে আমরা Google Analytics জন্য আপনার অ্যাপ্লিকেশনটির কনফিগারেশনটি পরীক্ষা করার পরামর্শ দিই। আপনি নিম্নলিখিত প্রয়োজনীয়তাগুলি পূরণ করেছেন তা নিশ্চিত করুন:
আপনি আপনার Firebase প্রকল্পে Google Analytics সক্ষম করেছেন ।
আপনি Google Analytics জন্য ডেটা শেয়ারিং সক্ষম করেছেন। আপনার বিশ্লেষণ ডেটা ভাগ করে নেওয়ার সেটিংস পরিচালনা করতে এই সেটিং সম্পর্কে আরও জানুন
আপনি করেছেনGoogle Analytics জন্য ফায়ারবেস এসডিকে যুক্ত করেছেনআপনার অ্যাপ্লিকেশন। এই SDK অবশ্যই Crashlytics SDK ছাড়াও যোগ করতে হবে।
আপনি ব্যবহার করছেনসর্বশেষ ফায়ারবেস এসডিকে সংস্করণআপনি আপনার অ্যাপ্লিকেশনটিতে যে সমস্ত পণ্য ব্যবহার করেন তার জন্য।
বিশেষত পরীক্ষা করুন যে আপনি Google Analytics জন্য ফায়ারবেস এসডিকে ন্যূনতম নিম্নলিখিত সংস্করণটি ব্যবহার করছেন:
অ্যান্ড্রয়েড - ভি 17.2.3+ ( BoM ভি 24.7.1+)।
আপনি যদি বেগ সতর্কতাগুলি না দেখেন তবে নিশ্চিত হয়ে নিন যে আপনি এটি ব্যবহার করছেনক্র্যাশলিটিক্স এসডিকে ভি 18.6.0+ (বা Firebase BoM ভি 32.6.0+)।
আপনি যদি ক্র্যাশ-মুক্ত মেট্রিকগুলি (যেমন ক্র্যাশ-মুক্ত ব্যবহারকারী এবং সেশনগুলির মতো) না দেখেন বা অবিশ্বাস্য মেট্রিকগুলি না দেখেন তবে নিম্নলিখিতগুলি পরীক্ষা করুন:
আপনি ব্যবহার করছেন তা নিশ্চিত করুনক্র্যাশলিটিক্স এসডিকে ভি 18.6.0+ (বা Firebase BoM ভি 32.6.0+)।
আপনার ডেটা সংগ্রহের সেটিংস আপনার ক্র্যাশ-মুক্ত মেট্রিকগুলির গুণমানকে প্রভাবিত করছে না তা নিশ্চিত করুন:
আপনি যদি স্বয়ংক্রিয় ক্র্যাশ রিপোর্টিং অক্ষম করে অপ্ট-ইন রিপোর্টিং সক্ষম করেন তবে ক্র্যাশ তথ্য কেবলমাত্র ব্যবহারকারীদের কাছ থেকে Crashlytics প্রেরণ করা যেতে পারে যারা স্পষ্টভাবে ডেটা সংগ্রহে বেছে নিয়েছেন। সুতরাং, ক্র্যাশ-মুক্ত মেট্রিকগুলির যথার্থতা প্রভাবিত হবে যেহেতু Crashlytics কেবল এই অপ্ট-ইন ব্যবহারকারীদের (আপনার সমস্ত ব্যবহারকারীর চেয়ে) ক্র্যাশ তথ্য রয়েছে। এর অর্থ হ'ল আপনার ক্র্যাশ-মুক্ত মেট্রিকগুলি আপনার অ্যাপ্লিকেশনটির সামগ্রিক স্থিতিশীলতার কম নির্ভরযোগ্য এবং কম প্রতিফলিত হতে পারে।
আপনার যদি স্বয়ংক্রিয় ডেটা সংগ্রহ অক্ষম থাকে তবে আপনি Crashlytics অন-ডিভাইস ক্যাশেড প্রতিবেদনগুলি প্রেরণে
sendUnsentReports
ব্যবহার করতে পারেন। এই পদ্ধতিটি ব্যবহার করা Crashlytics ক্র্যাশ ডেটা প্রেরণ করবে, তবে সেশন ডেটা নয় যা কনসোল চার্টগুলি ক্র্যাশ-মুক্ত মেট্রিকগুলির জন্য কম বা শূন্য মানগুলি দেখায়।
ক্র্যাশ-মুক্ত মেট্রিক্স বুঝুন দেখুন।
Crashlytics অ্যান্ড্রয়েড 11 এবং উচ্চতর ডিভাইসগুলি থেকে অ্যান্ড্রয়েড অ্যাপ্লিকেশনগুলির জন্য এএনআর রিপোর্টিং সমর্থন করে। অন্তর্নিহিত এপিআই যা আমরা এএনআরএস সংগ্রহ করতে ব্যবহার করি ( গেথিস্টোরিকাল প্রসেসেক্সিট্রেসনস ) সিগকুইট বা ওয়াচডগ-ভিত্তিক পদ্ধতির চেয়ে বেশি নির্ভরযোগ্য। এই এপিআই কেবল অ্যান্ড্রয়েড 11+ ডিভাইসে উপলব্ধ।
যদি আপনার কিছু এএনআর তাদের BuildId
অনুপস্থিত থাকে তবে নিম্নলিখিত সমস্যা সমাধান:
নিশ্চিত হয়ে নিন যে আপনি একটি আপ-টু-ডেট Crashlytics অ্যান্ড্রয়েড এসডিকে এবং Crashlytics গ্রেডল প্লাগইন সংস্করণ ব্যবহার করছেন।
যদি আপনি অ্যান্ড্রয়েড 11 এবং কিছু অ্যান্ড্রয়েড 12 এএনআরএসের জন্য
BuildId
এস মিস করছেন তবে সম্ভবত আপনি কোনও তারিখের বাইরে এসডিকে, গ্রেডল প্লাগইন বা উভয় ব্যবহার করছেন। এই এএনআরগুলির জন্যBuildId
এস সঠিকভাবে সংগ্রহ করতে, আপনাকে নিম্নলিখিত সংস্করণগুলি ব্যবহার করতে হবে:- Crashlytics অ্যান্ড্রয়েড এসডিকে ভি 18.3.5+ ( Firebase BoM 31.2.2+)
- Crashlytics গ্রেডল প্লাগইন v2.9.4+
আপনি আপনার ভাগ করা লাইব্রেরিগুলির জন্য কোনও মানহীন অবস্থান ব্যবহার করছেন কিনা তা পরীক্ষা করুন।
আপনি যদি কেবল আপনার অ্যাপের ভাগ করা লাইব্রেরির জন্য
BuildId
এস অনুপস্থিত থাকেন তবে সম্ভবত আপনি ভাগ করা লাইব্রেরির জন্য স্ট্যান্ডার্ড, ডিফল্ট অবস্থান ব্যবহার করছেন না। যদি এটি হয় তবে Crashlytics সম্পর্কিতBuildId
সনাক্ত করতে সক্ষম নাও হতে পারে। আমরা আপনাকে ভাগ করা লাইব্রেরির জন্য স্ট্যান্ডার্ড অবস্থান ব্যবহার করার বিষয়টি বিবেচনা করার পরামর্শ দিই।নিশ্চিত হয়ে নিন যে আপনি বিল্ড প্রক্রিয়া চলাকালীন
BuildId
ছিনিয়ে নিচ্ছেন না।নোট করুন যে নিম্নলিখিত সমস্যা সমাধানের টিপস এএনআর এবং নেটিভ ক্র্যাশ উভয়ের জন্যই প্রযোজ্য।
আপনার বাইনারিগুলিতে
readelf -n
চালিয়েBuildId
এস বিদ্যমান কিনা তা পরীক্ষা করুন। যদিBuildId
অনুপস্থিত থাকে তবে আপনার বিল্ড সিস্টেমের জন্য পতাকাগুলিতে-Wl,--build-id
যুক্ত করুন।পরীক্ষা করুন যে আপনি আপনার এপিকে আকার হ্রাস করার প্রয়াসে অজান্তেই
BuildId
এসকে ছিনিয়ে নিচ্ছেন না।আপনি যদি কোনও লাইব্রেরির স্ট্রিপড এবং আনস্ট্রিপড সংস্করণগুলি চালিয়ে যান তবে আপনার কোডের সঠিক সংস্করণটি নির্দেশ করতে ভুলবেন না।
গুগল প্লে এবং Crashlytics মধ্যে এএনআরএসের গণনার মধ্যে একটি অমিল থাকতে পারে। এএনআর ডেটা সংগ্রহ এবং প্রতিবেদনের প্রক্রিয়াটির পার্থক্যের কারণে এটি প্রত্যাশিত। Crashlytics এএনআরএসের প্রতিবেদন করে যখন অ্যাপটি পরবর্তী শুরু হয়, যেখানে অ্যান্ড্রয়েড ভাইটালস এএনআর হওয়ার পরে এএনআর ডেটা প্রেরণ করে।
অতিরিক্তভাবে, Crashlytics কেবলমাত্র এএনআরএস প্রদর্শন করে যা অ্যান্ড্রয়েড 11+ চলমান ডিভাইসগুলিতে ঘটে, গুগল প্লে এর তুলনায় যা গুগল প্লে পরিষেবাদি এবং ডেটা সংগ্রহের সম্মতি স্বীকৃত ডিভাইসগুলি থেকে এএনআরগুলি প্রদর্শন করে।
এলএলভিএম এবং জিএনইউ টুলচেইনে আপনার অ্যাপের বাইনারিগুলির কেবলমাত্র পঠনযোগ্য বিভাগের জন্য স্বতন্ত্র ডিফল্ট এবং চিকিত্সা রয়েছে, যা Firebase কনসোলে বেমানান স্ট্যাক ট্রেস তৈরি করতে পারে। এটি প্রশমিত করতে, আপনার বিল্ড প্রক্রিয়াতে নিম্নলিখিত লিঙ্কার পতাকাগুলি যুক্ত করুন:
আপনি যদি এলএলভিএম টুলচেইন থেকে
lld
লিঙ্কার ব্যবহার করছেন তবে যুক্ত করুন:-Wl,--no-rosegment
আপনি যদি জিএনইউ টুলচেইন থেকে
ld.gold
লিঙ্কার ব্যবহার করছেন তবে যুক্ত করুন:-Wl,--rosegment
আপনি যদি এখনও স্ট্যাক ট্রেসের অসঙ্গতিগুলি দেখেন (বা যদি কোনও পতাকা আপনার সরঞ্জামচেইনের সাথে প্রাসঙ্গিক না হয়) তবে পরিবর্তে আপনার বিল্ড প্রক্রিয়ায় নিম্নলিখিতটি যুক্ত করার চেষ্টা করুন:
-fno-omit-frame-pointer
Crashlytics প্লাগইন একটি কাস্টমাইজড ব্রেকপ্যাড প্রতীক ফাইল জেনারেটর বান্ডিল করে। আপনি যদি ব্রেকপ্যাড প্রতীক ফাইলগুলি উত্পন্ন করার জন্য নিজের বাইনারি ব্যবহার করতে পছন্দ করেন (উদাহরণস্বরূপ, আপনি যদি উত্স থেকে আপনার বিল্ড চেইনে সমস্ত নেটিভ এক্সিকিউটেবলগুলি তৈরি করতে পছন্দ করেন) তবে এক্সিকিউটেবলের পাথ নির্দিষ্ট করতে al চ্ছিক symbolGeneratorBinary
এক্সটেনশন সম্পত্তিটি ব্যবহার করুন।
আপনি দুটি উপায়ে একটিতে ব্রেকপ্যাড প্রতীক ফাইল জেনারেটর বাইনারিটির পথ নির্দিষ্ট করতে পারেন:
বিকল্প 1 : আপনার
build.gradle
ফাইলেfirebaseCrashlytics
এক্সটেনশনের মাধ্যমে পথটি নির্দিষ্ট করুননিম্নলিখিতগুলি আপনার অ্যাপ্লিকেশন-স্তরের
build.gradle.kts
ফাইলটিতে যুক্ত করুন:গ্রেড প্লাগইন v3.0.0+
android { buildTypes { release { configure<CrashlyticsExtension> { nativeSymbolUploadEnabled = true // Add these optional fields to specify the path to the executable symbolGeneratorType = "breakpad" breakpadBinary = file("/PATH/TO/BREAKPAD/DUMP_SYMS") } } } }
নিম্ন প্লাগইন সংস্করণ
android { // ... buildTypes { // ... release { // ... firebaseCrashlytics { // existing; required for either symbol file generator nativeSymbolUploadEnabled true // Add this optional new block to specify the path to the executable symbolGenerator { breakpad { binary file("/PATH/TO/BREAKPAD/DUMP_SYMS") } } } } }
বিকল্প 2 : আপনার গ্রেডল প্রোপার্টি ফাইলের একটি সম্পত্তি লাইনের মাধ্যমে পথটি নির্দিষ্ট করুন
এক্সিকিউটেবলের পথ নির্দিষ্ট করতে আপনি
com.google.firebase.crashlytics.breakpadBinary
সম্পত্তি ব্যবহার করতে পারেন।আপনি ম্যানুয়ালি আপনার গ্রেডল প্রোপার্টি ফাইল আপডেট করতে পারেন বা কমান্ড লাইনের মাধ্যমে ফাইলটি আপডেট করতে পারেন। উদাহরণস্বরূপ, কমান্ড লাইনের মাধ্যমে পথটি নির্দিষ্ট করতে, নিম্নলিখিতগুলির মতো একটি কমান্ড ব্যবহার করুন:
./gradlew -Pcom.google.firebase.crashlytics.symbolGenerator=breakpad \ -Pcom.google.firebase.crashlytics.breakpadBinary=/PATH/TO/BREAKPAD/DUMP_SYMS \ app:assembleRelease app:uploadCrashlyticsSymbolFileRelease
আপনি যদি নিম্নলিখিত ব্যতিক্রমটি দেখতে পান তবে সম্ভবত আপনি ডেক্সগার্ডের একটি সংস্করণ ব্যবহার করছেন যা Firebase Crashlytics এসডিকে -র সাথে বেমানান:
java.lang.IllegalArgumentException: Transport backend 'cct' is not registered
এই ব্যতিক্রমটি আপনার অ্যাপ্লিকেশনটি ক্র্যাশ করে না তবে ক্র্যাশ রিপোর্টগুলি প্রেরণে বাধা দেয়। এটি ঠিক করতে:
আপনি সর্বশেষতম ডেক্সগার্ড 8.x রিলিজ ব্যবহার করছেন তা নিশ্চিত করুন। সর্বশেষতম সংস্করণে Firebase Crashlytics এসডিকে প্রয়োজনীয় নিয়ম রয়েছে।
আপনি যদি নিজের ডেক্সগার্ড সংস্করণটি পরিবর্তন করতে না চান তবে আপনার অবহেলিত বিধিগুলিতে নিম্নলিখিত লাইনটি যুক্ত করার চেষ্টা করুন (আপনার ডেক্সগার্ড কনফিগারেশন ফাইলে):
-keepresourcexmlelements manifest/application/service/meta-data@value=cct
যখন কোনও অ্যাপ্লিকেশন কোনও ওবফাসেক্টর ব্যবহার করে যা ফাইল এক্সটেনশনটি প্রকাশ করে না, Crashlytics প্রতিটি ইস্যু .java
ফাইল এক্সটেনশন দিয়ে ডিফল্টরূপে উত্পন্ন করে।
যাতে Crashlytics সঠিক ফাইল এক্সটেনশনের সাথে সমস্যা তৈরি করতে পারে, নিশ্চিত করুন যে আপনার অ্যাপ্লিকেশনটি নিম্নলিখিত সেটআপটি ব্যবহার করেছে:
- অ্যান্ড্রয়েড গ্রেডল 4.2.0 বা উচ্চতর ব্যবহার করে
- অবহেলার সাথে আর 8 ব্যবহার করে। আপনার অ্যাপ্লিকেশনটিকে আর 8 এ আপডেট করতে, এই ডকুমেন্টেশন অনুসরণ করুন।
মনে রাখবেন যে উপরে বর্ণিত সেটআপটি আপডেট করার পরে, আপনি নতুন .kt
সমস্যাগুলি দেখতে শুরু করতে পারেন যা বিদ্যমান .java
ইস্যুগুলির সদৃশ। এই পরিস্থিতি সম্পর্কে আরও জানতে FAQ দেখুন।
2021 সালের ডিসেম্বরের মাঝামাঝি থেকে শুরু করে, Crashlytics কোটলিন ব্যবহার করে এমন অ্যাপ্লিকেশনগুলির জন্য সমর্থন উন্নত করে।
সম্প্রতি অবধি, উপলভ্য ওবফাসেক্টরগুলি ফাইল এক্সটেনশনটি প্রকাশ করেনি, সুতরাং Crashlytics প্রতিটি ইস্যু একটি .java
ফাইল এক্সটেনশন দিয়ে ডিফল্টরূপে উত্পন্ন করে। তবে অ্যান্ড্রয়েড গ্রেডল 4.2.0 হিসাবে, আর 8 ফাইল এক্সটেনশনগুলিকে সমর্থন করে।
এই আপডেটের সাহায্যে, Crashlytics এখন নির্ধারণ করতে পারে যে অ্যাপ্লিকেশনটির মধ্যে ব্যবহৃত প্রতিটি শ্রেণি কোটলিনে লেখা আছে এবং ইস্যু স্বাক্ষরটিতে সঠিক ফাইলের নাম অন্তর্ভুক্ত করে। আপনার অ্যাপ্লিকেশনটিতে নিম্নলিখিত সেটআপ থাকলে ক্র্যাশগুলি এখন .kt
ফাইলগুলিতে (যথাযথ হিসাবে) সঠিকভাবে দায়ী করা হয়েছে:
- আপনার অ্যাপ্লিকেশনটি অ্যান্ড্রয়েড গ্রেডল 4.2.0 বা তার বেশি ব্যবহার করে।
- আপনার অ্যাপ্লিকেশনটি obfuscation চালু সঙ্গে R8 ব্যবহার করে।
যেহেতু নতুন ক্র্যাশগুলি এখন তাদের ইস্যু স্বাক্ষরগুলিতে সঠিক ফাইল এক্সটেনশন অন্তর্ভুক্ত করে, আপনি নতুন .kt
সমস্যাগুলি দেখতে পাবেন যা আসলে বিদ্যমান .java
-লেবেলযুক্ত সমস্যাগুলির সদৃশ। Firebase কনসোলে, আমরা যদি নতুন .kt
সমস্যাটি বিদ্যমান। .java
-লেবেলড ইস্যুর সম্ভাব্য সদৃশ হয় তবে আমরা আপনাকে সনাক্ত এবং যোগাযোগ করার চেষ্টা করি।
নোটগুলি প্রকল্পের সদস্যদের প্রশ্ন, স্ট্যাটাস আপডেট ইত্যাদির সাথে নির্দিষ্ট বিষয়ে মন্তব্য করার অনুমতি দেয়।
যখন কোনও প্রকল্পের সদস্য একটি নোট পোস্ট করেন, এটি তাদের গুগল অ্যাকাউন্টের ইমেল সহ লেবেলযুক্ত। এই ইমেল ঠিকানাটি নোটের পাশাপাশি নোটটি দেখার জন্য অ্যাক্সেস সহ সমস্ত প্রকল্পের সদস্যদের কাছে দৃশ্যমান।
নিম্নলিখিত নোটগুলি দেখতে, লিখতে এবং মুছতে প্রয়োজনীয় অ্যাক্সেসের বর্ণনা দেয়:
নিম্নলিখিত যেকোনও ভূমিকা সহ প্রকল্প সদস্যরা বিদ্যমান নোটগুলি দেখতে এবং মুছে ফেলতে পারেন এবং একটি সমস্যায় নতুন নোট লিখতে পারেন।
- প্রকল্পের মালিক বা সম্পাদক , ফায়ারবেস অ্যাডমিন , কোয়ালিটি অ্যাডমিন বা ক্র্যাশলাইটিক্স অ্যাডমিন
নিম্নলিখিত যে কোনও ভূমিকা সহ প্রকল্পের সদস্যরা কোনও ইস্যুতে পোস্ট করা নোটগুলি দেখতে পারে তবে তারা কোনও নোট মুছতে বা লিখতে পারে না।
- প্রজেক্ট ভিউয়ার , ফায়ারবেস ভিউয়ার , কোয়ালিটি ভিউয়ার বা ক্র্যাশলাইটিক্স ভিউয়ার
ইন্টিগ্রেশন
আপনার প্রোজেক্ট যদি Google Mobile Ads SDK-এর পাশাপাশি Crashlytics ব্যবহার করে, তাহলে ব্যতিক্রম হ্যান্ডলারদের নিবন্ধন করার সময় ক্র্যাশ রিপোর্টাররা হস্তক্ষেপ করছে। সমস্যাটি সমাধান করার জন্য, Mobile Ads ক্র্যাশ রিপোর্টিং বন্ধ করুন disableSDKCrashReporting
কল করে।
আপনি BigQuery-এর সাথে Crashlytics লিঙ্ক করার পরে, আপনার তৈরি করা নতুন ডেটাসেটগুলি স্বয়ংক্রিয়ভাবে মার্কিন যুক্তরাষ্ট্রে অবস্থিত হবে, আপনার Firebase প্রকল্পের অবস্থান নির্বিশেষে।
প্ল্যাটফর্ম সমর্থন
Firebase Crashlytics এনডিকে আর্মভি 5 (আর্মেবি) সমর্থন করে না। এই এবিআইয়ের পক্ষে সমর্থনটি এনডিকে আর 17 হিসাবে সরানো হয়েছিল।
রেজিস্টেড ইস্যু
আপনি যখন ইস্যুটি আগে বন্ধ করে দিয়েছেন তখন কোনও ইস্যুতে একটি রিগ্রেশন রয়েছে তবে Crashlytics একটি নতুন প্রতিবেদন পেয়েছে যে বিষয়টি পুনরায় সংঘটিত হয়েছে। Crashlytics স্বয়ংক্রিয়ভাবে এই প্রত্যাবর্তিত সমস্যাগুলি পুনরায় খোলে যাতে আপনি সেগুলিকে আপনার অ্যাপের জন্য উপযুক্ত হিসাবে সমাধান করতে পারেন।
এখানে একটি উদাহরণ দৃশ্য যা ব্যাখ্যা করে যে Crashlytics কীভাবে কোনও ইস্যুকে রিগ্রেশন হিসাবে শ্রেণিবদ্ধ করে:
- প্রথমবারের মতো, Crashlytics ক্র্যাশ "এ" সম্পর্কে একটি ক্র্যাশ রিপোর্ট পেয়েছে। Crashlytics সেই ক্র্যাশের জন্য একটি সংশ্লিষ্ট সমস্যা খোলে (ইস্যু "A")।
- আপনি এই বাগটি দ্রুত ঠিক করুন, সমস্যা "A" বন্ধ করুন এবং তারপর আপনার অ্যাপের একটি নতুন সংস্করণ প্রকাশ করুন৷
- আপনি সমস্যাটি বন্ধ করার পরে "এ" ইস্যু সম্পর্কে আরও একটি প্রতিবেদন পেয়েছেন Crashlytics ।
- প্রতিবেদনটি যদি এমন কোনো অ্যাপ সংস্করণ থেকে হয় যা Crashlytics জানত যে আপনি যখন সমস্যাটি বন্ধ করেছিলেন (অর্থাৎ সংস্করণটি কোনও ক্র্যাশের জন্য একটি ক্র্যাশ রিপোর্ট পাঠিয়েছিল), তাহলে Crashlytics সমস্যাটিকে প্রত্যাবর্তন হিসাবে বিবেচনা করবে না। বিষয়টি বন্ধ থাকবে।
- যদি প্রতিবেদনটি এমন কোনও অ্যাপ্লিকেশন সংস্করণ থেকে আসে যা Crashlytics আপনি কখন সমস্যাটি বন্ধ করে দিয়েছিলেন তা সম্পর্কে জানেন না (যার অর্থ সংস্করণটি কোনও ক্র্যাশের জন্য কোনও ক্র্যাশ রিপোর্ট কখনও প্রেরণ করেনি), তবে Crashlytics বিষয়টি পুনরায় বিবেচনা করে বিবেচনা করে এবং বিষয়টি পুনরায় খোলা হবে।
যখন একটি সমস্যা রিগ্রেস হয়, তখন আমরা একটি রিগ্রেশন শনাক্তকরণ সতর্কতা পাঠাই এবং সমস্যাটিতে একটি রিগ্রেশন সিগন্যাল যোগ করি যাতে আপনাকে জানানো হয় যে Crashlytics সমস্যাটি আবার খুলেছে। আপনি যদি আমাদের রিগ্রেশন অ্যালগরিদমের কারণে কোনও সমস্যা পুনরায় খোলা না চান তবে এটি বন্ধ করার পরিবর্তে "নিঃশব্দ"।
যদি কোনও রিপোর্ট কোনও পুরানো অ্যাপ সংস্করণ থেকে হয় যেটি আপনি সমস্যাটি বন্ধ করার সময় কোনও ক্র্যাশ রিপোর্ট পাঠাননি, তাহলে Crashlytics সমস্যাটিকে প্রত্যাবর্তন বলে বিবেচনা করে এবং সমস্যাটি আবার খুলবে।
এই পরিস্থিতি নিম্নলিখিত পরিস্থিতিতে ঘটতে পারে: আপনি একটি বাগ ঠিক করেছেন এবং আপনার অ্যাপ্লিকেশনটির একটি নতুন সংস্করণ প্রকাশ করেছেন, তবে আপনার এখনও বাগ ফিক্স ছাড়াই পুরানো সংস্করণগুলিতে ব্যবহারকারী রয়েছে। যদি, সুযোগে, সেই পুরানো সংস্করণগুলির মধ্যে একটি যদি আপনি সমস্যাটি বন্ধ করে দেন তখন কোনও ক্র্যাশ রিপোর্ট কখনও প্রেরণ করেনি এবং সেই ব্যবহারকারীরা বাগের মুখোমুখি হতে শুরু করে, তবে এই ক্র্যাশ রিপোর্টগুলি একটি প্রতিরোধিত সমস্যাটিকে ট্রিগার করবে।
আপনি যদি আমাদের রিগ্রেশন অ্যালগরিদমের কারণে কোনও সমস্যা পুনরায় খোলা না চান তবে এটি বন্ধ করার পরিবর্তে "নিঃশব্দ"।
,এই পৃষ্ঠাটি Crashlytics ব্যবহার করার বিষয়ে প্রায়শই জিজ্ঞাসিত প্রশ্নের সমস্যা সমাধানে সহায়তা এবং উত্তর প্রদান করে। If you can't find what you're looking for or need additional help, contact Firebase support .
General troubleshooting/FAQ
Firebase কনসোলে আপনার ইস্যু টেবিলে তালিকাভুক্ত সমস্যার জন্য আপনি দুটি ভিন্ন ফর্ম্যাট লক্ষ্য করতে পারেন। এবং আপনি আপনার কিছু সমস্যার মধ্যে "ভেরিয়েন্ট" নামক একটি বৈশিষ্ট্যও লক্ষ্য করতে পারেন। এখানে কেন!
In early 2023, we rolled out an improved analysis engine for grouping events as well as an updated design and some advanced features for new issues (like variants!). Check out our recent blog post for all the details, but you can read below for the highlights.
Crashlytics analyzes all the events from your app (like crashes, non-fatals, and ANRs) and creates groups of events called issues — all events in an issue have a common point of failure.
এই সমস্যাগুলির মধ্যে ইভেন্টগুলিকে গোষ্ঠীভুক্ত করার জন্য, উন্নত বিশ্লেষণ ইঞ্জিন এখন ইভেন্টের অনেক দিককে দেখে, যার মধ্যে স্ট্যাক ট্রেসের ফ্রেম, ব্যতিক্রম বার্তা, ত্রুটি কোড এবং অন্যান্য প্ল্যাটফর্ম বা ত্রুটির ধরন বৈশিষ্ট্যগুলি রয়েছে৷
However, within this group of events, the stack traces leading to the failure might be different. A different stack trace could mean a different root cause. To represent this possible difference within an issue, we now create variants within issues - each variant is a sub-group of events in an issue that have the same failure point and a similar stack trace. With variants, you can debug the most common stack traces within an issue and determine if different root causes are leading to the failure.
এই উন্নতিগুলির সাথে আপনি যা অনুভব করবেন তা এখানে:
সংশোধিত মেটাডেটা ইস্যু সারির মধ্যে প্রদর্শিত হয়
It's now easier to understand and triage issues in your app.কম ডুপ্লিকেট সমস্যা
A line number change doesn't result in a new issue.Easier debugging of complex issues with various root causes
Use variants to debug the most common stack traces within an issue.আরও অর্থপূর্ণ সতর্কতা এবং সংকেত
A new issue actually represents a new bug.আরো শক্তিশালী অনুসন্ধান
প্রতিটি সমস্যায় আরও অনুসন্ধানযোগ্য মেটাডেটা থাকে, যেমন ব্যতিক্রমের ধরন এবং প্যাকেজের নাম।
Here's how these improvements are rolling out:
যখন আমরা আপনার অ্যাপ থেকে নতুন ইভেন্টগুলি পাই, তখন আমরা তা একটি বিদ্যমান সমস্যার সাথে মেলে কিনা তা পরীক্ষা করব।
If there's no match, we'll automatically apply our smarter event-grouping algorithm to the event and create a new issue with the revamped metadata design.
এটিই প্রথম বড় আপডেট যা আমরা আমাদের ইভেন্ট গ্রুপিংয়ে তৈরি করছি। If you have feedback or encounter any issues, please let us know by filing a report.
If you're not seeing breadcrumb logs , we recommend checking your app's configuration for Google Analytics . Make sure you meet the following requirements:
আপনি আপনার Firebase প্রকল্পে Google Analytics সক্ষম করেছেন ।
আপনি Google Analytics জন্য ডেটা শেয়ারিং সক্ষম করেছেন। Learn more about this setting in Manage your Analytics data sharing settings
আপনি করেছেনadded the Firebase SDK for Google Analyticsto your app. এই SDK অবশ্যই Crashlytics SDK ছাড়াও যোগ করতে হবে।
You're using thelatest Firebase SDK versionsfor all the products that you use in your app.
Especially check that you're using at minimum the following version of the Firebase SDK for Google Analytics :
Android — v17.2.3+ ( BoM v24.7.1+) .
If you're not seeing velocity alerts, make sure that you're using theCrashlytics SDK v18.6.0+ (or Firebase BoM v32.6.0+).
If you're not seeing crash-free metrics (like crash-free users and sessions) or seeing unreliable metrics, check the following:
Make sure that you're using theCrashlytics SDK v18.6.0+ (or Firebase BoM v32.6.0+).
Make sure that your data collection settings aren't impacting the quality of your crash-free metrics:
If you enable opt-in reporting by disabling automatic crash reporting, crash information can only be sent to Crashlytics from users who have explicitly opted into data collection. Thus, the accuracy of crash-free metrics will be affected since Crashlytics only has crash information from these opted-in users (rather than all your users). This means that your crash-free metrics may be less reliable and less reflective of the overall stability of your app.
If you have automatic data collection disabled, you can use
sendUnsentReports
to send on-device cached reports to Crashlytics . Using this method will send crash data to Crashlytics , but not sessions data which causes the console charts to show low or zero values for crash-free metrics.
ক্র্যাশ-মুক্ত মেট্রিক্স বুঝুন দেখুন।
Crashlytics supports ANR reporting for Android apps from devices that run Android 11 and higher. The underlying API that we use to collect ANRs ( getHistoricalProcessExitReasons ) is more reliable than SIGQUIT or watchdog-based approaches. This API is available only on Android 11+ devices.
If some of your ANRs are missing their BuildId
s, troubleshoot as follows:
Make sure that you're using an up-to-date Crashlytics Android SDK and Crashlytics Gradle plugin version.
If you're missing
BuildId
s for Android 11 and some Android 12 ANRs, then it's likely that you're using an out-of-date SDK, Gradle plugin, or both. To properly collectBuildId
s for these ANRs, you need to use the following versions:- Crashlytics Android SDK v18.3.5+ ( Firebase BoM v31.2.2+)
- Crashlytics Gradle plugin v2.9.4+
Check if you're using a non-standard location for your shared libraries.
If you're only missing
BuildId
s for your app's shared libraries, it's likely that you're not using the standard, default location for shared libraries. If this is the case, then Crashlytics might not be able to locate the associatedBuildId
s. We recommend that you consider using the standard location for shared libraries.Make sure that you're not stripping
BuildId
s during the build process.Note that the following troubleshooting tips apply to both ANRs and native crashes.
Check if the
BuildId
s exist by runningreadelf -n
on your binaries. If theBuildId
s are absent, then add-Wl,--build-id
to the flags for your build system.Check that you're not unintentionally stripping the
BuildId
s in an effort to reduce your APK size.If you keep stripped and unstripped versions of a library, make sure to point to the correct version in your code.
There can be a mismatch between the count of ANRs between Google Play and Crashlytics . This is expected due to the difference in the mechanism of collecting and reporting ANR data. Crashlytics reports ANRs when the app next starts up, whereas Android Vitals sends ANR data after the ANR occurs.
Additionally, Crashlytics only displays ANRs that occur on devices running Android 11+, compared to Google Play which displays ANRs from devices with Google Play services and data collection consent accepted.
LLVM and GNU toolchains have distinct defaults and treatments for the read-only segment of your app's binaries, which may generate inconsistent stack traces in the Firebase console. To mitigate this, add the following linker flags to your build process:
If you're using the
lld
linker from the LLVM toolchain, add:-Wl,--no-rosegment
If you're using the
ld.gold
linker from the GNU toolchain, add:-Wl,--rosegment
If you're still seeing stack trace inconsistencies (or if neither flag is pertinent to your toolchain), try adding the following to your build process instead:
-fno-omit-frame-pointer
The Crashlytics plugin bundles a customized Breakpad symbol file generator . If you prefer to use your own binary for generating Breakpad symbol files (for example, if you prefer to build all native executables in your build chain from source), use the optional symbolGeneratorBinary
extension property to specify the path to the executable.
You can specify the path to the Breakpad symbol file generator binary in one of two ways:
Option 1 : Specify the path via the
firebaseCrashlytics
extension in yourbuild.gradle
fileAdd the following to your app-level
build.gradle.kts
file:Gradle plugin v3.0.0+
android { buildTypes { release { configure<CrashlyticsExtension> { nativeSymbolUploadEnabled = true // Add these optional fields to specify the path to the executable symbolGeneratorType = "breakpad" breakpadBinary = file("/PATH/TO/BREAKPAD/DUMP_SYMS") } } } }
lower plugin versions
android { // ... buildTypes { // ... release { // ... firebaseCrashlytics { // existing; required for either symbol file generator nativeSymbolUploadEnabled true // Add this optional new block to specify the path to the executable symbolGenerator { breakpad { binary file("/PATH/TO/BREAKPAD/DUMP_SYMS") } } } } }
Option 2 : Specify the path via a property line in your Gradle properties file
You can use the
com.google.firebase.crashlytics.breakpadBinary
property to specify the path to the executable.You can manually update your Gradle properties file or update the file via the command line. For example, to specify the path via the command line, use a command like the following:
./gradlew -Pcom.google.firebase.crashlytics.symbolGenerator=breakpad \ -Pcom.google.firebase.crashlytics.breakpadBinary=/PATH/TO/BREAKPAD/DUMP_SYMS \ app:assembleRelease app:uploadCrashlyticsSymbolFileRelease
If you see the following exception, it's likely you're using a version of DexGuard that's incompatible with the Firebase Crashlytics SDK:
java.lang.IllegalArgumentException: Transport backend 'cct' is not registered
This exception does not crash your app but prevents it from sending crash reports. এটি ঠিক করতে:
Make sure you're using the latest DexGuard 8.x release. The latest version contains rules that are required by the Firebase Crashlytics SDK.
If you don't want to change your DexGuard version, try adding the following line to your obfuscation rules (in your DexGuard config file):
-keepresourcexmlelements manifest/application/service/meta-data@value=cct
When an app uses an obfuscator that doesn't expose the file extension, Crashlytics generates each issue with a .java
file extension by default.
So that Crashlytics can generate issues with the correct file extension, make sure your app uses the following setup:
- Uses Android Gradle 4.2.0 or higher
- Uses R8 with obfuscation turned on. To update your app to R8, follow this documentation .
Note that after updating to the setup described above, you might start seeing new .kt
issues that are duplicates of existing .java
issues. See the FAQ to learn more about that circumstance.
Starting in mid-December 2021, Crashlytics improved support for applications that use Kotlin.
Until recently, the available obfuscators did not expose the file extension, so Crashlytics generated each issue with a .java
file extension by default. However, as of Android Gradle 4.2.0, R8 supports file extensions.
With this update, Crashlytics can now determine if each class used within the app is written in Kotlin and include the correct filename in the issue signature. Crashes are now correctly attributed to .kt
files (as appropriate) if your app has the following setup:
- Your app uses Android Gradle 4.2.0 or higher.
- Your app uses R8 with obfuscation turned on.
Since new crashes now include the correct file extension in their issue signatures, you might see new .kt
issues that are actually just duplicates of existing .java
-labeled issues. In the Firebase console, we try to identify and communicate to you if a new .kt
issue is a possible duplicate of an existing .java
-labeled issue.
নোটগুলি প্রকল্পের সদস্যদের প্রশ্ন, স্ট্যাটাস আপডেট ইত্যাদির সাথে নির্দিষ্ট বিষয়ে মন্তব্য করার অনুমতি দেয়।
When a project member posts a note, it's labeled with the email of their Google account. This email address is visible, along with the note, to all project members with access to view the note.
The following describes the access required to view, write, and delete notes:
নিম্নলিখিত যেকোনও ভূমিকা সহ প্রকল্প সদস্যরা বিদ্যমান নোটগুলি দেখতে এবং মুছে ফেলতে পারেন এবং একটি সমস্যায় নতুন নোট লিখতে পারেন।
- প্রকল্পের মালিক বা সম্পাদক , ফায়ারবেস অ্যাডমিন , কোয়ালিটি অ্যাডমিন বা ক্র্যাশলাইটিক্স অ্যাডমিন
Project members with any of the following roles can view the notes posted on an issue, but they cannot delete or write a note.
- প্রজেক্ট ভিউয়ার , ফায়ারবেস ভিউয়ার , কোয়ালিটি ভিউয়ার বা ক্র্যাশলাইটিক্স ভিউয়ার
ইন্টিগ্রেশন
আপনার প্রোজেক্ট যদি Google Mobile Ads SDK-এর পাশাপাশি Crashlytics ব্যবহার করে, তাহলে ব্যতিক্রম হ্যান্ডলারদের নিবন্ধন করার সময় ক্র্যাশ রিপোর্টাররা হস্তক্ষেপ করছে। To fix the issue, turn off crash reporting in the Mobile Ads SDK by calling disableSDKCrashReporting
.
আপনি BigQuery-এর সাথে Crashlytics লিঙ্ক করার পরে, আপনার তৈরি করা নতুন ডেটাসেটগুলি স্বয়ংক্রিয়ভাবে মার্কিন যুক্তরাষ্ট্রে অবস্থিত হবে, আপনার Firebase প্রকল্পের অবস্থান নির্বিশেষে।
প্ল্যাটফর্ম সমর্থন
The Firebase Crashlytics NDK does not support ARMv5 (armeabi). Support for this ABI was removed as of NDK r17.
Regressed issues
An issue has had a regression when you've previously closed the issue but Crashlytics gets a new report that the issue has re-occurred. Crashlytics স্বয়ংক্রিয়ভাবে এই প্রত্যাবর্তিত সমস্যাগুলি পুনরায় খোলে যাতে আপনি সেগুলিকে আপনার অ্যাপের জন্য উপযুক্ত হিসাবে সমাধান করতে পারেন।
Here's an example scenario that explains how Crashlytics categorizes an issue as a regression:
- For the first time ever, Crashlytics gets a crash report about Crash "A". Crashlytics সেই ক্র্যাশের জন্য একটি সংশ্লিষ্ট সমস্যা খোলে (ইস্যু "A")।
- আপনি এই বাগটি দ্রুত ঠিক করুন, সমস্যা "A" বন্ধ করুন এবং তারপর আপনার অ্যাপের একটি নতুন সংস্করণ প্রকাশ করুন৷
- Crashlytics gets another report about Issue "A" after you've closed the issue.
- প্রতিবেদনটি যদি এমন কোনো অ্যাপ সংস্করণ থেকে হয় যা Crashlytics জানত যে আপনি যখন সমস্যাটি বন্ধ করেছিলেন (অর্থাৎ সংস্করণটি কোনও ক্র্যাশের জন্য একটি ক্র্যাশ রিপোর্ট পাঠিয়েছিল), তাহলে Crashlytics সমস্যাটিকে প্রত্যাবর্তন হিসাবে বিবেচনা করবে না। বিষয়টি বন্ধ থাকবে।
- If the report is from an app version that Crashlytics did not know about when you closed the issue (meaning that the version had never sent any crash report for any crash at all), then Crashlytics considers the issue regressed and will re-open the issue.
যখন একটি সমস্যা রিগ্রেস হয়, তখন আমরা একটি রিগ্রেশন শনাক্তকরণ সতর্কতা পাঠাই এবং সমস্যাটিতে একটি রিগ্রেশন সিগন্যাল যোগ করি যাতে আপনাকে জানানো হয় যে Crashlytics সমস্যাটি আবার খুলেছে। If you do not want an issue to re-open due to our regression algorithm, "mute" the issue instead of closing it.
যদি কোনও রিপোর্ট কোনও পুরানো অ্যাপ সংস্করণ থেকে হয় যেটি আপনি সমস্যাটি বন্ধ করার সময় কোনও ক্র্যাশ রিপোর্ট পাঠাননি, তাহলে Crashlytics সমস্যাটিকে প্রত্যাবর্তন বলে বিবেচনা করে এবং সমস্যাটি আবার খুলবে।
This situation can happen in the following situation: You've fixed a bug and released a new version of your app, but you still have users on older versions without the bug fix. If, by chance, one of those older versions had never sent any crash reports at all when you closed the issue, and those users start encountering the bug, then those crash reports would trigger a regressed issue.
If you do not want an issue to re-open due to our regression algorithm, "mute" the issue instead of closing it.