Android NDK ক্র্যাশ রিপোর্ট পান

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

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

আপনি যদি আপনার ইউনিটি প্রকল্পগুলিতে ক্র্যাশলিটিক্সের সাথে কীভাবে শুরু করবেন তা সন্ধান করছেন, ইউনিটি শুরু করার নির্দেশিকাটি দেখুন।

তুমি শুরু করার আগে

  1. যদি আপনি ইতিমধ্যে না করে থাকেন, তাহলে আপনার Android প্রকল্পে Firebase যোগ করুন । আপনার যদি অ্যান্ড্রয়েড অ্যাপ না থাকে, তাহলে আপনি একটি নমুনা অ্যাপ ডাউনলোড করতে পারেন।

  2. প্রস্তাবিত : ক্র্যাশ-মুক্ত ব্যবহারকারী, ব্রেডক্রাম্ব লগ এবং বেগ সতর্কতার মতো বৈশিষ্ট্যগুলি পেতে, আপনাকে আপনার Firebase প্রকল্পে Google Analytics সক্ষম করতে হবে৷

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

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

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

Firebase Android BoM ব্যবহার করে, আপনার মডিউল (অ্যাপ-লেভেল) গ্রেডল ফাইলে (সাধারণত app/build.gradle ) Crashlytics NDK Android লাইব্রেরির জন্য নির্ভরতা ঘোষণা করুন।

Crashlytics-এর সাথে একটি সর্বোত্তম অভিজ্ঞতার জন্য, আমরা আপনার Firebase প্রকল্পে Google Analytics সক্ষম করার এবং আপনার অ্যাপে Google Analytics-এর জন্য Firebase SDK যোগ করার পরামর্শ দিই।

Java

dependencies {
    // Import the BoM for the Firebase platform
    implementation platform('com.google.firebase:firebase-bom:30.2.0')

    // Declare the dependencies for the Crashlytics NDK and Analytics libraries
    // When using the BoM, you don't specify versions in Firebase library dependencies
    implementation 'com.google.firebase:firebase-crashlytics-ndk'
    implementation 'com.google.firebase:firebase-analytics'
}

Firebase Android BoM ব্যবহার করে, আপনার অ্যাপ সবসময় Firebase Android লাইব্রেরির সামঞ্জস্যপূর্ণ সংস্করণ ব্যবহার করবে।

(বিকল্প) BoM ব্যবহার না করে Firebase লাইব্রেরি নির্ভরতা ঘোষণা করুন

আপনি যদি Firebase BoM ব্যবহার না করা বেছে নেন, তাহলে আপনাকে অবশ্যই প্রতিটি Firebase লাইব্রেরি সংস্করণ তার নির্ভরতা লাইনে উল্লেখ করতে হবে।

মনে রাখবেন যে আপনি যদি আপনার অ্যাপে একাধিক Firebase লাইব্রেরি ব্যবহার করেন, তাহলে আমরা লাইব্রেরি সংস্করণগুলি পরিচালনা করতে BoM ব্যবহার করার সুপারিশ করি, যা নিশ্চিত করে যে সমস্ত সংস্করণ সামঞ্জস্যপূর্ণ।

dependencies {
    // Declare 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:18.2.11'
    implementation 'com.google.firebase:firebase-analytics:21.0.0'
}

Kotlin+KTX

dependencies {
    // Import the BoM for the Firebase platform
    implementation platform('com.google.firebase:firebase-bom:30.2.0')

    // Declare 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-ktx'
}

Firebase Android BoM ব্যবহার করে, আপনার অ্যাপ সবসময় Firebase Android লাইব্রেরির সামঞ্জস্যপূর্ণ সংস্করণ ব্যবহার করবে।

(বিকল্প) BoM ব্যবহার না করে Firebase লাইব্রেরি নির্ভরতা ঘোষণা করুন

আপনি যদি Firebase BoM ব্যবহার না করা বেছে নেন, তাহলে আপনাকে অবশ্যই প্রতিটি Firebase লাইব্রেরি সংস্করণ তার নির্ভরতা লাইনে উল্লেখ করতে হবে।

মনে রাখবেন যে আপনি যদি আপনার অ্যাপে একাধিক Firebase লাইব্রেরি ব্যবহার করেন, তাহলে আমরা লাইব্রেরি সংস্করণগুলি পরিচালনা করতে BoM ব্যবহার করার সুপারিশ করি, যা নিশ্চিত করে যে সমস্ত সংস্করণ সামঞ্জস্যপূর্ণ।

dependencies {
    // Declare 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:18.2.11'
    implementation 'com.google.firebase:firebase-analytics-ktx:21.0.0'
}

ধাপ 2 : আপনার অ্যাপে Firebase Crashlytics প্লাগইন যোগ করুন

  1. আপনার প্রকল্প-স্তরের build.gradle ফাইলে, বিল্ডস্ক্রিপ্ট নির্ভরতা হিসাবে Crashlytics Gradle প্লাগইন যোগ করুন।

    buildscript {
        repositories {
            // Check that you have Google's Maven repository (if not, add it).
            google()
        }
    
        dependencies {
            // ...
    
            // Check that you have the Google services Gradle plugin v4.3.2 or later
            // (if not, add it).
            classpath 'com.google.gms:google-services:4.3.13'
    
            // Add the Crashlytics Gradle plugin
            classpath 'com.google.firebase:firebase-crashlytics-gradle:2.9.1'
        }
    }
    
    allprojects {
        repositories {
            // Check that you have Google's Maven repository (if not, add it).
            google()
        }
    }
  2. আপনার অ্যাপ-স্তরের build.gradle ফাইলে, Crashlytics Gradle প্লাগইন প্রয়োগ করুন:

    apply plugin: 'com.android.application'
    apply plugin: 'com.google.gms.google-services' // Google services Gradle plugin
    
    // Apply the Crashlytics Gradle plugin
    apply plugin: 'com.google.firebase.crashlytics'
    

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

আপনার মডিউলে (অ্যাপ-লেভেল) গ্রেডল ফাইলে (সাধারণত app/build.gradle firebaseCrashlytics , FirebaseCrashlytics এক্সটেনশন যোগ করুন।

Java

// ...

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
          }
      }
  }
}

Kotlin+KTX

// ...

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 টাস্ক অন্তর্ভুক্ত রয়েছে।

  1. যাতে আপনি স্বয়ংক্রিয় প্রতীক আপলোডের জন্য কাজটি অ্যাক্সেস করতে পারেন, নিশ্চিত করুন যে আপনার মডিউল (অ্যাপ-লেভেল) গ্রেডল ফাইলে nativeSymbolUploadEnabled সক্ষম করা true হিসাবে সেট করা আছে।

  2. আপনার স্ট্যাকের চিহ্নগুলিতে পদ্ধতির নামগুলি উপস্থিত হওয়ার জন্য, আপনাকে অবশ্যই আপনার NDK লাইব্রেরির প্রতিটি নির্মাণের পরে uploadCrashlyticsSymbolFile BUILD_VARIANT স্পষ্টভাবে আহ্বান করতে হবে। উদাহরণ স্বরূপ:

    >./gradlew app:assembleBUILD_VARIANT\
               app:uploadCrashlyticsSymbolFileBUILD_VARIANT
    
  3. NDK-এর জন্য Crashlytics SDK এবং Crashlytics Gradle প্লাগইন উভয়ই নেটিভ শেয়ার করা বস্তুর মধ্যে GNU বিল্ড আইডির উপস্থিতির উপর নির্ভর করে।

    আপনি প্রতিটি বাইনারিতে readelf -n চালিয়ে এই আইডিটির উপস্থিতি যাচাই করতে পারেন। যদি বিল্ড আইডি অনুপস্থিত থাকে, তাহলে সমস্যা সমাধানের জন্য আপনার বিল্ড সিস্টেমের ফ্ল্যাগে -Wl,--build-id যোগ করুন।

ধাপ 5 : সেটআপ শেষ করতে একটি পরীক্ষা ক্র্যাশ বাধ্য করুন

Crashlytics সেট আপ শেষ করতে এবং Firebase কনসোলের Crashlytics ড্যাশবোর্ডে প্রাথমিক ডেটা দেখতে, আপনাকে একটি পরীক্ষা ক্র্যাশ করতে বাধ্য করতে হবে।

  1. আপনার অ্যাপে কোড যোগ করুন যা আপনি একটি পরীক্ষা ক্র্যাশ করতে বাধ্য করতে ব্যবহার করতে পারেন।

    আপনি আপনার অ্যাপে একটি বোতাম যোগ করতে আপনার অ্যাপের MainActivity নিম্নলিখিত কোডটি ব্যবহার করতে পারেন যা চাপলে ক্র্যাশ হয়ে যায়। বোতামটি "টেস্ট ক্র্যাশ" লেবেলযুক্ত।

    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));
    

    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))
    
  2. আপনার অ্যাপ তৈরি করুন এবং চালান।

  3. আপনার অ্যাপের প্রথম ক্র্যাশ রিপোর্ট পাঠানোর জন্য পরীক্ষা ক্র্যাশ জোরপূর্বক করুন:

    1. আপনার পরীক্ষা ডিভাইস বা এমুলেটর থেকে আপনার অ্যাপ্লিকেশন খুলুন.

    2. আপনার অ্যাপে, উপরের কোডটি ব্যবহার করে আপনি যোগ করা "টেস্ট ক্র্যাশ" বোতাম টিপুন।

    3. আপনার অ্যাপ ক্র্যাশ হওয়ার পরে, এটি পুনরায় চালু করুন যাতে আপনার অ্যাপটি Firebase-এ ক্র্যাশ রিপোর্ট পাঠাতে পারে।

  4. আপনার পরীক্ষা ক্র্যাশ দেখতে Firebase কনসোলের Crashlytics ড্যাশবোর্ডে যান।

    আপনি যদি কনসোলটি রিফ্রেশ করে থাকেন এবং আপনি এখনও পাঁচ মিনিটের পরেও পরীক্ষা ক্র্যাশ দেখতে না পান, আপনার অ্যাপ ক্র্যাশ রিপোর্ট পাঠাচ্ছে কিনা তা দেখতে ডিবাগ লগিং সক্ষম করুন৷


এবং এটাই! Crashlytics এখন ক্র্যাশের জন্য আপনার অ্যাপ নিরীক্ষণ করছে এবং আপনি Crashlytics ড্যাশবোর্ডে ক্র্যাশ রিপোর্ট এবং পরিসংখ্যান দেখতে ও তদন্ত করতে পারেন।



প্রতীক আপলোড করার জন্য বিকল্প বিকল্প

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

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

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

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

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

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

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

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



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

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

পরবর্তী পদক্ষেপ