Catch up on everthing we announced at this year's Firebase Summit. Learn more

Android NDK ক্র্যাশ প্রতিবেদন পান reports

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

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

আপনি আপনার ইউনিটি প্রকল্পে Crashlytics দিয়ে শুরু করতে খুঁজছেন থাকেন, তবে খুঁজে বার করো শুরু করার জন্য নির্দেশিকা ইউনিটি

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

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

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

    • আপনার বিদ্যমান Firebase প্রকল্পের Google এনালিটিক্স সক্ষম করা না হয়, তাহলে আপনার কাছ থেকে Google এনালিটিক্স সক্ষম করতে পারেন ঐক্যবদ্ধতা ট্যাব আপনার এর Firebase কনসোলে> প্রকল্প সেটিংস।

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

ধাপ 1: Firebase কনসোলে Crashlytics সক্ষম করুন

  1. যান Crashlytics ড্যাশবোর্ড Firebase কনসোলে।

  2. নিশ্চিত করুন আপনার অ্যাপ্লিকেশন পৃষ্ঠার উপরের Crashlytics পাশে ড্রপডাউন থেকে নির্বাচন করা হয়।

  3. ক্লিক করুন Crashlytics সক্ষম করুন।

পদক্ষেপ 2: NDK জন্য Firebase Crashlytics SDK এর আপনার অ্যাপ যোগ করুন

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

Crashlytics সঙ্গে একটি অনুকূল অভিজ্ঞতার জন্য, আমরা প্রস্তাব Google এনালিটিক্স সক্রিয় আপনার Firebase প্রকল্পে এবং আপনার অ্যাপ্লিকেশানে Google এনালিটিক্স জন্য Firebase SDK এর যোগ।

জাভা

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

    // 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 অ্যান্ড্রয়েড Bom , আপনার অ্যাপ্লিকেশন সবসময় Firebase অ্যান্ড্রয়েড লাইব্রেরি সামঞ্জস্যপূর্ণ সংস্করণ ব্যবহার করবে।

(বিকল্প) 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.5'
    implementation 'com.google.firebase:firebase-analytics:20.0.0'
}

কোটলিন+কেটিএক্স

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

    // 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 অ্যান্ড্রয়েড Bom , আপনার অ্যাপ্লিকেশন সবসময় Firebase অ্যান্ড্রয়েড লাইব্রেরি সামঞ্জস্যপূর্ণ সংস্করণ ব্যবহার করবে।

(বিকল্প) 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.5'
    implementation 'com.google.firebase:firebase-analytics-ktx:20.0.0'
}

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

  1. আপনার প্রকল্পের পর্যায়ের ইন build.gradle ফাইল, একটি buildscript নির্ভরতা যেমন 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.10'
    
            // Add the Crashlytics Gradle plugin
            classpath 'com.google.firebase:firebase-crashlytics-gradle:2.8.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'
    

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

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

জাভা

// ...

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

কোটলিন+কেটিএক্স

// ...

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

জন্য প্রয়োজনীয় targetSdkLevel 30 এবং উপরে: আপনি আপনার নিচের টি যোগ করে আপনার অ্যাপে পয়েন্টার ট্যাগ করা অক্ষম করুন আবশ্যক AndroidManifest.xml :

<application android:allowNativeHeapPointerTagging="false">
...
</application>

আরো তথ্যের জন্য, পড়া বাঁধা পয়েন্টার জন্য বিকাশকারী সমর্থন

পদক্ষেপ 5: নেটিভ চিহ্ন স্বয়ংক্রিয় আপলোড সেট আপ করুন

NDK ক্র্যাশ থেকে পঠনযোগ্য স্ট্যাক ট্রেস তৈরি করতে, Crashlytics-কে আপনার নেটিভ বাইনারিতে থাকা চিহ্নগুলি সম্পর্কে জানতে হবে। Crashlytics Gradle প্লাগইন অন্তর্ভুক্ত uploadCrashlyticsSymbolFile BUILD_VARIANT এই প্রক্রিয়া স্বয়ংক্রিয় কাজ।

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

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

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

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

পদক্ষেপ 6: ফোর্স একটি পরীক্ষা ক্র্যাশ সেটআপ সম্পূর্ণ হতে

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

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

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

    জাভা

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

    কোটলিন+কেটিএক্স

    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. যান Crashlytics ড্যাশবোর্ড Firebase কনসোলের আপনার পরীক্ষার ক্র্যাশ দেখতে।

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


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



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

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

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

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

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

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

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

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

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



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

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

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