যদি আপনার 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.3.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.1.0") implementation("com.google.firebase:firebase-analytics:22.1.0") }
ধাপ 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 : সেটআপ শেষ করতে একটি পরীক্ষা ক্র্যাশ বাধ্য করুন
Crashlytics সেট আপ শেষ করতে এবং Firebase কনসোলের Crashlytics ড্যাশবোর্ডে প্রাথমিক ডেটা দেখতে, আপনাকে একটি পরীক্ষা ক্র্যাশ করতে বাধ্য করতে হবে।
আপনার অ্যাপে কোড যোগ করুন যা আপনি একটি পরীক্ষা ক্র্যাশ করতে বাধ্য করতে ব্যবহার করতে পারেন।
আপনি আপনার অ্যাপে একটি বোতাম যোগ করতে আপনার অ্যাপের
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 অ্যাপের ক্র্যাশ রিপোর্ট ফিল্টার করতে পারেন। এটি আপনাকে নির্দিষ্ট বিল্ডগুলিতে আপনার ড্যাশবোর্ডকে আরও ভালভাবে ফোকাস করতে দেয়।
সমস্যা সমাধান
আপনি যদি Firebase কনসোলে এবং logcat-এ বিভিন্ন স্ট্যাকের ট্রেস দেখতে পান, তাহলে সমস্যা সমাধানের নির্দেশিকা পড়ুন।
প্রতীক আপলোড করার জন্য বিকল্প বিকল্প
উপরের এই পৃষ্ঠার প্রধান কর্মপ্রবাহটি স্ট্যান্ডার্ড গ্রেডল বিল্ডের জন্য প্রযোজ্য। যাইহোক, কিছু অ্যাপ একটি ভিন্ন কনফিগারেশন বা টুলিং ব্যবহার করে (উদাহরণস্বরূপ Gradle ছাড়া অন্য একটি বিল্ড প্রক্রিয়া)। এই পরিস্থিতিতে, নিম্নলিখিত বিকল্পগুলি সফলভাবে প্রতীক আপলোড করার জন্য সহায়ক হতে পারে।
বিকল্প : লাইব্রেরি মডিউল এবং বাহ্যিক নির্ভরতার জন্য প্রতীক আপলোড করুন
এই বিকল্পটি নিম্নলিখিত পরিস্থিতিতে সহায়ক হতে পারে:
- আপনি যদি Gradle এর মধ্যে একটি কাস্টমাইজড NDK বিল্ড প্রক্রিয়া ব্যবহার করেন
- যদি আপনার নেটিভ লাইব্রেরিগুলি একটি লাইব্রেরি/ফিচার মডিউলে তৈরি করা হয় বা তৃতীয় পক্ষ দ্বারা সরবরাহ করা হয়
- যদি স্বয়ংক্রিয় প্রতীক আপলোড করার কাজটি ব্যর্থ হয় বা আপনি ড্যাশবোর্ডে অপ্রতিরোধ্য ক্র্যাশগুলি দেখতে পান
স্ট্যান্ডার্ড Crashlytics প্রতীক আপলোড টাস্ক অনুমান করে যে আপনি CMake-এর মতো স্ট্যান্ডার্ড NDK বিল্ড টুল ব্যবহার করে আপনার অ্যাপ মডিউলের Gradle বিল্ডের অংশ হিসেবে আপনার নেটিভ লাইব্রেরি তৈরি করছেন।
যাইহোক, যদি আপনি Gradle-এর মধ্যে একটি কাস্টমাইজড NDK বিল্ড প্রক্রিয়া ব্যবহার করেন, বা আপনার নেটিভ লাইব্রেরিগুলি একটি লাইব্রেরি/ফিচার মডিউলে তৈরি করা হয় বা তৃতীয় পক্ষের দ্বারা সরবরাহ করা হয়, তাহলে আপনাকে আপনার আনস্ট্রিপড লাইব্রেরির পথটি স্পষ্টভাবে উল্লেখ করতে হতে পারে। এটি সম্পন্ন করার জন্য, আপনি আপনার Gradle বিল্ড ফাইলে Crashlytics এক্সটেনশনের মধ্যে unstrippedNativeLibsDir
সম্পত্তি যোগ করতে পারেন।
নিশ্চিত করুন যে আপনি এই পৃষ্ঠার মূল ওয়ার্কফ্লো থেকে নিম্নলিখিত প্রাথমিক কাজগুলি সম্পূর্ণ করেছেন:
যাতে স্বয়ংক্রিয় প্রতীক আপলোড করার কাজটি আপনার প্রতীক তথ্য খুঁজে পেতে পারে, আপনার মডিউল (অ্যাপ-লেভেল) গ্রেডল ফাইলে নিম্নলিখিতটি যোগ করুন (সাধারণত
<project>/<app-module>/build.gradle.kts
বা<project>/<app-module>/build.gradle
):Kotlin
import com.google.firebase.crashlytics.buildtools.gradle.CrashlyticsExtension // ... android { // ... buildTypes { release { configure<CrashlyticsExtension> { nativeSymbolUploadEnabled = true unstrippedNativeLibsDir = file("PATH/TO/UNSTRIPPED/DIRECTORY") } } } }
Groovy
// ... android { // ... buildTypes { release { firebaseCrashlytics { nativeSymbolUploadEnabled true unstrippedNativeLibsDir file("PATH/TO/UNSTRIPPED/DIRECTORY") } } } }
Crashlytics প্লাগইন
.so
এক্সটেনশন সহ নেটিভ লাইব্রেরিগুলির জন্য নির্দিষ্ট ডিরেক্টরিটি পুনরাবৃত্তভাবে অনুসন্ধান করবে। Crashlytics তারপর এই ধরনের সমস্ত লাইব্রেরি থেকে ডিবাগিং চিহ্ন বের করে এবং Firebase সার্ভারে আপলোড করে।unstrippedNativeLibsDir
সম্পত্তিতে আপনি যা নির্দিষ্ট করতে পারেন তা এখানে:org.gradle.api.Project#files(Object...)
এর জন্য অনুমোদিত যেকোনো যুক্তি, সহ:java.lang.String
,java.io.File
, বাorg.gradle.api.file.FileCollection
একটি তালিকা বা
FileCollection
উদাহরণ প্রদান করে একক বিল্ড ফ্লেভারের জন্য একাধিক ডিরেক্টরি( Crashlytics Gradle প্লাগইন v3.0.0 দিয়ে শুরু) পৃথক পণ্যে একাধিক ডিরেক্টরি জমা করুন এবং স্বাদ তৈরি করুন।
buildTypes { release { configure<CrashlyticsExtension> { nativeSymbolUploadEnabled = true unstrippedNativeLibsDir = file("MY/NATIVE/LIBS") } } productFlavors { flavorDimensions += "feature" create("basic") { dimension = "feature" // ... } create("featureX") { dimension = "feature" configure<CrashlyticsExtension> { unstrippedNativeLibsDir = file("MY/FEATURE_X/LIBS") } } } }
uploadCrashlyticsSymbolFilesBasicRelease
টাস্কটি শুধুমাত্রMY/NATIVE/LIBS
এ চিহ্নগুলি আপলোড করবে, কিন্তুuploadCrashlyticsSymbolFilesFeatureXRelease
MY/NATIVE/LIBS
এবংMY/FEATURE_X/LIBS
উভয় ক্ষেত্রেই প্রতীক আপলোড করবে।অবশেষে, Crashlytics সেট আপ শেষ করতে এবং Firebase কনসোলের Crashlytics ড্যাশবোর্ডে প্রাথমিক ডেটা দেখতে একটি পরীক্ষা ক্র্যাশ করতে বাধ্য করুন ।
বিকল্প : নন-গ্রেডল বিল্ড বা অ্যাক্সেসযোগ্য আনস্ট্রিপড নেটিভ লাইব্রেরির জন্য প্রতীক আপলোড করুন
এই বিকল্পটি নিম্নলিখিত পরিস্থিতিতে সহায়ক হতে পারে:
আপনি যদি Gradle ছাড়া অন্য একটি বিল্ড প্রক্রিয়া ব্যবহার করেন
যদি আপনার আনস্ট্রিপড নেটিভ লাইব্রেরিগুলি আপনাকে এমনভাবে সরবরাহ করা হয় যে সেগুলি গ্রেডল বিল্ডের সময় অ্যাক্সেসযোগ্য নয়
এই বিকল্পের জন্য প্রয়োজন যে আপনি একটি Firebase CLI কমান্ড চালান যখন আপনি একটি রিলিজ বিল্ড তৈরি করেন বা যে কোনো বিল্ড যার জন্য আপনি Firebase কনসোলে প্রতীকী স্ট্যাকের ট্রেস দেখতে চান।
নিশ্চিত করুন যে আপনি এই পৃষ্ঠার মূল ওয়ার্কফ্লো থেকে নিম্নলিখিত প্রাথমিক কাজগুলি সম্পূর্ণ করেছেন:
NDK এর জন্য Crashlytics SDK এবং Crashlytics Gradle প্লাগইন যোগ করা হয়েছে।
মনে রাখবেন যে এই বিকল্পের সাথে, আপনাকে
firebaseCrashlytics
এক্সটেনশন যোগ করতে হবে না বা স্বয়ংক্রিয় প্রতীক আপলোডিং সেট আপ করতে হবে না কারণ আপনি পরিবর্তে আপনার প্রতীক ফাইলগুলি তৈরি এবং আপলোড করতে Firebase CLI (নীচের পরবর্তী ধাপগুলি) ব্যবহার করবেন৷প্রতীক আপলোড করার জন্য আপনার পরিবেশ এবং প্রকল্প সেট আপ করুন:
Firebase CLI ইনস্টল করতে নির্দেশাবলী অনুসরণ করুন।
আপনি যদি ইতিমধ্যেই CLI ইনস্টল করে থাকেন, তাহলে নিশ্চিত করুন যে এটির সর্বশেষ সংস্করণে আপডেট করুন ।
(শুধুমাত্র Android API স্তর 30+ ব্যবহার করা অ্যাপগুলির জন্য) পয়েন্টার ট্যাগিং অক্ষম করতে আপনার অ্যাপের
AndroidManifest.xml
টেমপ্লেট আপডেট করুন:অ্যান্ড্রয়েড প্লেয়ার সেটিংস > প্রকাশনা সেটিংস > বিল্ড > কাস্টম প্রধান ম্যানিফেস্টের জন্য বক্সটি চেক করুন।
Assets/Plugins/Android/AndroidManifest.xml
এ অবস্থিত ম্যানিফেস্ট টেমপ্লেটটি খুলুন।অ্যাপ্লিকেশন ট্যাগে নিম্নলিখিত বৈশিষ্ট্য যোগ করুন:
<application android:allowNativeHeapPointerTagging="false" ... />
আপনার প্রকল্প তৈরি করুন.
আপনার প্রতীক তথ্য আপলোড করুন.
আপনার বিল্ড শেষ হয়ে গেলে, একটি Crashlytics -compatible প্রতীক ফাইল তৈরি করুন এবং নিম্নলিখিত Firebase CLI কমান্ডটি চালিয়ে Firebase সার্ভারে আপলোড করুন:
firebase crashlytics:symbols:upload --app=FIREBASE_APP_ID PATH/TO/SYMBOLS
FIREBASE_APP_ID : আপনার Firebase Android App ID (আপনার প্যাকেজের নাম নয়)
উদাহরণ ফায়ারবেস অ্যান্ড্রয়েড অ্যাপ আইডি:1:567383003300:android:17104a2ced0c9b9b
আপনার ফায়ারবেস অ্যাপ আইডি খোঁজার দুটি উপায় এখানে রয়েছে:
আপনার
google-services.json
ফাইলে, আপনার অ্যাপ আইডি হলmobilesdk_app_id
মান; বাFirebase কনসোলে, আপনার প্রকল্প সেটিংসে যান। আপনার অ্যাপস কার্ডে নিচে স্ক্রোল করুন, তারপর পছন্দসই Firebase অ্যাপের অ্যাপ আইডি খুঁজতে ক্লিক করুন।
PATH/TO/SYMBOLS : CLI দ্বারা তৈরি প্রতীক ফাইলের পথ
একটি Android স্টুডিও প্রকল্পে রপ্তানি করা হয়েছে — PATH/TO/SYMBOLS যেকোন ডিরেক্টরি হতে পারে। Firebase CLI একটি
.so
এক্সটেনশনের সাহায্যে নেটিভ লাইব্রেরির জন্য নির্দিষ্ট ডিরেক্টরিটি পুনরাবৃত্তভাবে অনুসন্ধান করবে।Unity-এর মধ্যে থেকে সরাসরি APK তৈরি করুন — PATH/TO/SYMBOLS হল জিপ করা সিম্বল ফাইলের পথ যা প্রোজেক্ট রুট ডিরেক্টরিতে জেনারেট করা হয় যখন আপনার বিল্ড শেষ হয় (উদাহরণস্বরূপ:
myproject/myapp-1.0-v100.symbols.zip
)।
প্রতীক ফাইল তৈরি এবং আপলোডের জন্য Firebase CLI কমান্ড ব্যবহার করার জন্য উন্নত বিকল্পগুলি দেখুন
পতাকা বর্ণনা --generator=csym
ডিফল্ট ব্রেকপ্যাড জেনারেটরের পরিবর্তে লিগ্যাসি cSYM প্রতীক ফাইল জেনারেটর ব্যবহার করে
ব্যবহারের জন্য সুপারিশ করা হয় না. আমরা ডিফল্ট ব্রেকপ্যাড প্রতীক ফাইল জেনারেটর ব্যবহার করার পরামর্শ দিই।
--generator=breakpad
ব্রেকপ্যাড প্রতীক ফাইল জেনারেটর ব্যবহার করে
মনে রাখবেন যে প্রতীক ফাইল তৈরির জন্য ডিফল্ট হল ব্রেকপ্যাড। আপনি যোগ করে থাকলে শুধুমাত্র এই পতাকা ব্যবহার করুন
আপনার বিল্ড কনফিগারেশনে symbolGenerator { csym() }
এবং আপনি ব্রেকপ্যাড ব্যবহার করার জন্য এটিকে ওভাররাইড করতে চান।--dry-run
প্রতীক ফাইল তৈরি করে কিন্তু সেগুলি আপলোড করে না
এই পতাকাটি দরকারী যদি আপনি পাঠানো ফাইলগুলির বিষয়বস্তু পরিদর্শন করতে চান৷
--debug
অতিরিক্ত ডিবাগিং তথ্য প্রদান করে অবশেষে, Crashlytics সেট আপ শেষ করতে এবং Firebase কনসোলের Crashlytics ড্যাশবোর্ডে প্রাথমিক ডেটা দেখতে একটি পরীক্ষা ক্র্যাশ করতে বাধ্য করুন ।
ক্র্যাশ বাধ্য করার অংশ হিসাবে আপনি আপনার অ্যাপ তৈরি করার পরে, আপনার প্রতীক ফাইল আপলোড করতে Firebase CLI
crashlytics:symbols:upload
কমান্ডটি চালানো নিশ্চিত করুন।
,
যদি আপনার 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.3.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.1.0") implementation("com.google.firebase:firebase-analytics:22.1.0") }
ধাপ 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 : সেটআপ শেষ করতে একটি পরীক্ষা ক্র্যাশ বাধ্য করুন
Crashlytics সেট আপ শেষ করতে এবং Firebase কনসোলের Crashlytics ড্যাশবোর্ডে প্রাথমিক ডেটা দেখতে, আপনাকে একটি পরীক্ষা ক্র্যাশ করতে বাধ্য করতে হবে।
আপনার অ্যাপে কোড যোগ করুন যা আপনি একটি পরীক্ষা ক্র্যাশ করতে বাধ্য করতে ব্যবহার করতে পারেন।
আপনি আপনার অ্যাপে একটি বোতাম যোগ করতে আপনার অ্যাপের
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 অ্যাপের ক্র্যাশ রিপোর্ট ফিল্টার করতে পারেন। এটি আপনাকে নির্দিষ্ট বিল্ডগুলিতে আপনার ড্যাশবোর্ডকে আরও ভালভাবে ফোকাস করতে দেয়।
সমস্যা সমাধান
আপনি যদি Firebase কনসোলে এবং logcat-এ বিভিন্ন স্ট্যাকের ট্রেস দেখতে পান, তাহলে সমস্যা সমাধানের নির্দেশিকা পড়ুন।
প্রতীক আপলোড করার জন্য বিকল্প বিকল্প
উপরের এই পৃষ্ঠার প্রধান কর্মপ্রবাহটি স্ট্যান্ডার্ড গ্রেডল বিল্ডের জন্য প্রযোজ্য। যাইহোক, কিছু অ্যাপ একটি ভিন্ন কনফিগারেশন বা টুলিং ব্যবহার করে (উদাহরণস্বরূপ Gradle ছাড়া অন্য একটি বিল্ড প্রক্রিয়া)। এই পরিস্থিতিতে, নিম্নলিখিত বিকল্পগুলি সফলভাবে প্রতীক আপলোড করার জন্য সহায়ক হতে পারে।
বিকল্প : লাইব্রেরি মডিউল এবং বাহ্যিক নির্ভরতার জন্য প্রতীক আপলোড করুন
এই বিকল্পটি নিম্নলিখিত পরিস্থিতিতে সহায়ক হতে পারে:
- আপনি যদি Gradle এর মধ্যে একটি কাস্টমাইজড NDK বিল্ড প্রক্রিয়া ব্যবহার করেন
- যদি আপনার নেটিভ লাইব্রেরিগুলি একটি লাইব্রেরি/ফিচার মডিউলে তৈরি করা হয় বা তৃতীয় পক্ষ দ্বারা সরবরাহ করা হয়
- যদি স্বয়ংক্রিয় প্রতীক আপলোড করার কাজটি ব্যর্থ হয় বা আপনি ড্যাশবোর্ডে অপ্রতিরোধ্য ক্র্যাশগুলি দেখতে পান
স্ট্যান্ডার্ড Crashlytics প্রতীক আপলোড টাস্ক অনুমান করে যে আপনি CMake-এর মতো স্ট্যান্ডার্ড NDK বিল্ড টুল ব্যবহার করে আপনার অ্যাপ মডিউলের Gradle বিল্ডের অংশ হিসেবে আপনার নেটিভ লাইব্রেরি তৈরি করছেন।
যাইহোক, যদি আপনি Gradle-এর মধ্যে একটি কাস্টমাইজড NDK বিল্ড প্রক্রিয়া ব্যবহার করেন, বা আপনার নেটিভ লাইব্রেরিগুলি একটি লাইব্রেরি/ফিচার মডিউলে তৈরি করা হয় বা তৃতীয় পক্ষের দ্বারা সরবরাহ করা হয়, তাহলে আপনাকে আপনার আনস্ট্রিপড লাইব্রেরির পথটি স্পষ্টভাবে উল্লেখ করতে হতে পারে। এটি সম্পন্ন করার জন্য, আপনি আপনার Gradle বিল্ড ফাইলে Crashlytics এক্সটেনশনের মধ্যে unstrippedNativeLibsDir
সম্পত্তি যোগ করতে পারেন।
নিশ্চিত করুন যে আপনি এই পৃষ্ঠার মূল ওয়ার্কফ্লো থেকে নিম্নলিখিত প্রাথমিক কাজগুলি সম্পূর্ণ করেছেন:
যাতে স্বয়ংক্রিয় প্রতীক আপলোড করার কাজটি আপনার প্রতীক তথ্য খুঁজে পেতে পারে, আপনার মডিউল (অ্যাপ-লেভেল) গ্রেডল ফাইলে নিম্নলিখিতটি যোগ করুন (সাধারণত
<project>/<app-module>/build.gradle.kts
বা<project>/<app-module>/build.gradle
):Kotlin
import com.google.firebase.crashlytics.buildtools.gradle.CrashlyticsExtension // ... android { // ... buildTypes { release { configure<CrashlyticsExtension> { nativeSymbolUploadEnabled = true unstrippedNativeLibsDir = file("PATH/TO/UNSTRIPPED/DIRECTORY") } } } }
Groovy
// ... android { // ... buildTypes { release { firebaseCrashlytics { nativeSymbolUploadEnabled true unstrippedNativeLibsDir file("PATH/TO/UNSTRIPPED/DIRECTORY") } } } }
Crashlytics প্লাগইন
.so
এক্সটেনশন সহ নেটিভ লাইব্রেরিগুলির জন্য নির্দিষ্ট ডিরেক্টরিটি পুনরাবৃত্তভাবে অনুসন্ধান করবে। Crashlytics তারপর এই ধরনের সমস্ত লাইব্রেরি থেকে ডিবাগিং চিহ্ন বের করে এবং Firebase সার্ভারে আপলোড করে।unstrippedNativeLibsDir
সম্পত্তিতে আপনি যা নির্দিষ্ট করতে পারেন তা এখানে:org.gradle.api.Project#files(Object...)
এর জন্য অনুমোদিত যেকোনো যুক্তি, সহ:java.lang.String
,java.io.File
, বাorg.gradle.api.file.FileCollection
একটি তালিকা বা
FileCollection
উদাহরণ প্রদান করে একক বিল্ড ফ্লেভারের জন্য একাধিক ডিরেক্টরি( Crashlytics Gradle প্লাগইন v3.0.0 দিয়ে শুরু) পৃথক পণ্যে একাধিক ডিরেক্টরি জমা করুন এবং স্বাদ তৈরি করুন।
buildTypes { release { configure<CrashlyticsExtension> { nativeSymbolUploadEnabled = true unstrippedNativeLibsDir = file("MY/NATIVE/LIBS") } } productFlavors { flavorDimensions += "feature" create("basic") { dimension = "feature" // ... } create("featureX") { dimension = "feature" configure<CrashlyticsExtension> { unstrippedNativeLibsDir = file("MY/FEATURE_X/LIBS") } } } }
uploadCrashlyticsSymbolFilesBasicRelease
টাস্কটি শুধুমাত্রMY/NATIVE/LIBS
এ চিহ্নগুলি আপলোড করবে, কিন্তুuploadCrashlyticsSymbolFilesFeatureXRelease
MY/NATIVE/LIBS
এবংMY/FEATURE_X/LIBS
উভয় ক্ষেত্রেই প্রতীক আপলোড করবে।অবশেষে, Crashlytics সেট আপ শেষ করতে এবং Firebase কনসোলের Crashlytics ড্যাশবোর্ডে প্রাথমিক ডেটা দেখতে একটি পরীক্ষা ক্র্যাশ করতে বাধ্য করুন ।
বিকল্প : নন-গ্রেডল বিল্ড বা অ্যাক্সেসযোগ্য আনস্ট্রিপড নেটিভ লাইব্রেরির জন্য প্রতীক আপলোড করুন
এই বিকল্পটি নিম্নলিখিত পরিস্থিতিতে সহায়ক হতে পারে:
আপনি যদি Gradle ছাড়া অন্য একটি বিল্ড প্রক্রিয়া ব্যবহার করেন
যদি আপনার আনস্ট্রিপড নেটিভ লাইব্রেরিগুলি আপনাকে এমনভাবে সরবরাহ করা হয় যে সেগুলি গ্রেডল বিল্ডের সময় অ্যাক্সেসযোগ্য নয়
এই বিকল্পের জন্য প্রয়োজন যে আপনি একটি Firebase CLI কমান্ড চালান যখন আপনি একটি রিলিজ বিল্ড তৈরি করেন বা যে কোনো বিল্ড যার জন্য আপনি Firebase কনসোলে প্রতীকী স্ট্যাকের ট্রেস দেখতে চান।
নিশ্চিত করুন যে আপনি এই পৃষ্ঠার মূল ওয়ার্কফ্লো থেকে নিম্নলিখিত প্রাথমিক কাজগুলি সম্পূর্ণ করেছেন:
NDK এর জন্য Crashlytics SDK এবং Crashlytics Gradle প্লাগইন যোগ করা হয়েছে।
মনে রাখবেন যে এই বিকল্পের সাথে, আপনাকে
firebaseCrashlytics
এক্সটেনশন যোগ করতে হবে না বা স্বয়ংক্রিয় প্রতীক আপলোডিং সেট আপ করতে হবে না কারণ আপনি পরিবর্তে আপনার প্রতীক ফাইলগুলি তৈরি এবং আপলোড করতে Firebase CLI (নীচের পরবর্তী ধাপগুলি) ব্যবহার করবেন৷প্রতীক আপলোড করার জন্য আপনার পরিবেশ এবং প্রকল্প সেট আপ করুন:
Firebase CLI ইনস্টল করতে নির্দেশাবলী অনুসরণ করুন।
আপনি যদি ইতিমধ্যেই CLI ইনস্টল করে থাকেন, তাহলে নিশ্চিত করুন যে এটির সর্বশেষ সংস্করণে আপডেট করুন ।
(শুধুমাত্র Android API স্তর 30+ ব্যবহার করা অ্যাপগুলির জন্য) পয়েন্টার ট্যাগিং অক্ষম করতে আপনার অ্যাপের
AndroidManifest.xml
টেমপ্লেট আপডেট করুন:অ্যান্ড্রয়েড প্লেয়ার সেটিংস > প্রকাশনা সেটিংস > বিল্ড > কাস্টম প্রধান ম্যানিফেস্টের জন্য বক্সটি চেক করুন।
Assets/Plugins/Android/AndroidManifest.xml
এ অবস্থিত ম্যানিফেস্ট টেমপ্লেটটি খুলুন।অ্যাপ্লিকেশন ট্যাগে নিম্নলিখিত বৈশিষ্ট্য যোগ করুন:
<application android:allowNativeHeapPointerTagging="false" ... />
আপনার প্রকল্প তৈরি করুন.
আপনার প্রতীক তথ্য আপলোড করুন.
আপনার বিল্ড শেষ হয়ে গেলে, একটি Crashlytics -compatible প্রতীক ফাইল তৈরি করুন এবং নিম্নলিখিত Firebase CLI কমান্ডটি চালিয়ে Firebase সার্ভারে আপলোড করুন:
firebase crashlytics:symbols:upload --app=FIREBASE_APP_ID PATH/TO/SYMBOLS
FIREBASE_APP_ID : আপনার Firebase Android App ID (আপনার প্যাকেজের নাম নয়)
উদাহরণ ফায়ারবেস অ্যান্ড্রয়েড অ্যাপ আইডি:1:567383003300:android:17104a2ced0c9b9b
আপনার ফায়ারবেস অ্যাপ আইডি খোঁজার দুটি উপায় এখানে রয়েছে:
আপনার
google-services.json
ফাইলে, আপনার অ্যাপ আইডি হলmobilesdk_app_id
মান; বাFirebase কনসোলে, আপনার প্রকল্প সেটিংসে যান। আপনার অ্যাপস কার্ডে নিচে স্ক্রোল করুন, তারপর পছন্দসই Firebase অ্যাপের অ্যাপ আইডি খুঁজতে ক্লিক করুন।
PATH/TO/SYMBOLS : CLI দ্বারা তৈরি প্রতীক ফাইলের পথ
একটি Android স্টুডিও প্রকল্পে রপ্তানি করা হয়েছে — PATH/TO/SYMBOLS যেকোন ডিরেক্টরি হতে পারে। Firebase CLI একটি
.so
এক্সটেনশনের সাহায্যে নেটিভ লাইব্রেরির জন্য নির্দিষ্ট ডিরেক্টরিটি পুনরাবৃত্তভাবে অনুসন্ধান করবে।Unity-এর মধ্যে থেকে সরাসরি APK তৈরি করুন — PATH/TO/SYMBOLS হল জিপ করা সিম্বল ফাইলের পথ যা প্রোজেক্ট রুট ডিরেক্টরিতে জেনারেট করা হয় যখন আপনার বিল্ড শেষ হয় (উদাহরণস্বরূপ:
myproject/myapp-1.0-v100.symbols.zip
)।
প্রতীক ফাইল তৈরি এবং আপলোডের জন্য Firebase CLI কমান্ড ব্যবহার করার জন্য উন্নত বিকল্পগুলি দেখুন
পতাকা বর্ণনা --generator=csym
ডিফল্ট ব্রেকপ্যাড জেনারেটরের পরিবর্তে লিগ্যাসি cSYM প্রতীক ফাইল জেনারেটর ব্যবহার করে
ব্যবহারের জন্য সুপারিশ করা হয় না. আমরা ডিফল্ট ব্রেকপ্যাড প্রতীক ফাইল জেনারেটর ব্যবহার করার পরামর্শ দিই।
--generator=breakpad
ব্রেকপ্যাড প্রতীক ফাইল জেনারেটর ব্যবহার করে
মনে রাখবেন যে প্রতীক ফাইল তৈরির জন্য ডিফল্ট হল ব্রেকপ্যাড। আপনি যোগ করে থাকলে শুধুমাত্র এই পতাকা ব্যবহার করুন
আপনার বিল্ড কনফিগারেশনে symbolGenerator { csym() }
এবং আপনি ব্রেকপ্যাড ব্যবহার করার জন্য এটিকে ওভাররাইড করতে চান।--dry-run
প্রতীক ফাইল তৈরি করে কিন্তু সেগুলি আপলোড করে না
এই পতাকাটি দরকারী যদি আপনি পাঠানো ফাইলগুলির বিষয়বস্তু পরিদর্শন করতে চান৷
--debug
অতিরিক্ত ডিবাগিং তথ্য প্রদান করে অবশেষে, Crashlytics সেট আপ শেষ করতে এবং Firebase কনসোলের Crashlytics ড্যাশবোর্ডে প্রাথমিক ডেটা দেখতে একটি পরীক্ষা ক্র্যাশ করতে বাধ্য করুন ।
ক্র্যাশ বাধ্য করার অংশ হিসাবে আপনি আপনার অ্যাপ তৈরি করার পরে, আপনার প্রতীক ফাইল আপলোড করতে Firebase CLI
crashlytics:symbols:upload
কমান্ডটি চালানো নিশ্চিত করুন।