Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

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

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

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

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

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

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

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

    • আপনি যদি একটি নতুন Firebase প্রজেক্ট তৈরি করছেন, তাহলে প্রকল্প তৈরির কর্মপ্রবাহের সময় Google Analytics সক্ষম করুন

  3. নিশ্চিত করুন আপনি আপনার অ্যাপ্লিকেশনের জন্য সক্ষম Crashlytics বোতাম ক্লিক করেছেন Crashlytics ড্যাশবোর্ড Firebase কনসোলের।

ধাপ 1: 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:28.4.2')

    // 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.3'
    implementation 'com.google.firebase:firebase-analytics:19.0.2'
}

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

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

    // 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.3'
    implementation 'com.google.firebase:firebase-analytics-ktx:19.0.2'
}

পদক্ষেপ 2: আপনার অ্যাপ্লিকেশানে 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.7.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 আপনার বিল্ড এক্সটেনশানটিকে

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

জাভা

// ...

android {
  // ...
  buildTypes {
      release {
          // Add this extension
          firebaseCrashlytics {
              // Enable processing and uploading of native symbols to Crashlytics 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 Crashlytics 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 আপনার মডিউল (অ্যাপ্লিকেশান-স্তর) 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 আপনার বিল্ড সিস্টেমের পতাকা থেকে সমস্যাটি সমাধানের জন্য।

পদক্ষেপ 5 (ঐচ্ছিক): লাইব্রেরি মডিউল এবং বহিরাগত নির্ভরতা জন্য আপলোডের প্রতীক

Crashlytics প্রতীক আপলোড টাস্ক অনুমান করে যে আপনি আপনার অ্যাপ মডিউলের গ্র্যাডেল বিল্ডের অংশ হিসাবে আপনার স্থানীয় লাইব্রেরি তৈরি করছেন, সিএমকেকের মতো স্ট্যান্ডার্ড এনডিকে বিল্ড টুল ব্যবহার করে।

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

আপনার মডিউল (অ্যাপ্লিকেশান-স্তর) নিচের টি যোগ build.gradle ফাইল:

// ...

android {
    // ...
    buildTypes {
        release {
            firebaseCrashlytics {
                nativeSymbolUploadEnabled true
                unstrippedNativeLibsDir file("PATH/TO/UNSTRIPPED/DIRECTORY")
            }
        }
    }
}

Crashlytics প্লাগইন নিদিষ্ট ডিরেক্টরি একটি সঙ্গে নেটিভ লাইব্রেরির জন্য তার সকল সাবডিরেক্টরি অনুসন্ধান করবে .so এক্সটেনশান। ক্র্যাশলাইটিক্স এরকম সব লাইব্রেরি থেকে ডিবাগিং চিহ্ন বের করে ফায়ারবেস সার্ভারে আপলোড করে।

উল্লেখ্য সম্পর্কে নিম্নলিখিত unstrippedNativeLibsDir সম্পত্তি:

  • আপনার জন্য কোনো যুক্তি গ্রহণযোগ্য নির্দিষ্ট করতে পারেন org.gradle.api.Project#files(Object...) : সহ java.lang.String , java.io.File , অথবা org.gradle.api.file.FileCollection

  • আপনি একটি তালিকা বা প্রদানের মাধ্যমে একটি একক বিল্ড গন্ধ জন্য একাধিক ডিরেক্টরি উল্লেখ করতে পারেন FileCollection উদাহরণস্বরূপ।

ধাপ 6 (ঐচ্ছিক): সক্ষম Breakpad প্রতীক symbolication জন্য ফাইল

Crashlytics Gradle প্লাগইন নিম্নলিখিত কার্যকারিতা প্রদান করে:

  • প্রতীক ফাইল তৈরি করতে আপনার আনস্ট্রিপড নেটিভ বাইনারি প্রক্রিয়া করে।
  • আমাদের সার্ভারে জেনারেট করা প্রতীক ফাইল আপলোড করে পরে নেটিভ ক্র্যাশের প্রতীক হিসেবে ব্যবহার করা হবে।

Crashlytics Gradle প্লাগইন দুই ধরনের প্রতীক ফাইল ফরম্যাট সমর্থন করে:
Crashlytics প্রতীক ফাইল (cSYM) এবং Breakpad প্রতীক ফাইল।

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

আপনি দুটি উপায়ে ব্রেকপ্যাড-ভিত্তিক প্রতীক ফাইল জেনারেটরের ব্যবহার সক্ষম করতে পারেন:

  • বিকল্প 1: মাধ্যমে সক্রিয় করুন firebaseCrashlytics আপনার এক্সটেনশন build.gradle ফাইল

    আপনার অ্যাপ্লিকেশান-স্তর নিম্নলিখিত যোগ build.gradle ফাইল:

    android {
      // ...
      buildTypes {
        // ...
        release {
          // ...
          firebaseCrashlytics {
            // existing; required for either symbol file generator
            nativeSymbolUploadEnabled true
            // Add this optional new block to specify breakpad() or csym()
            symbolGenerator {
               breakpad()
            }
          }
        }
      }
    }
    

    ডিফল্ট Crashlytics প্রতীক ফাইল জেনারেটরে ফিরে যেতে, আপনি নিচের যেকোনো একটি করতে পারেন:

    • ফেরত symbolGenerator ব্লক সম্পূর্ণরূপে, প্লাগইনটি যেমন ডিফল্টরূপে Crashlytics সিম্বল ফাইল জেনারেটর ব্যবহার করে।

    • পরিবর্তন ব্লক রাখুন, কিন্তু breakpad() থেকে csym()

  • অপশন 2: আপনার Gradle বৈশিষ্ট্য ফাইলে একটি সম্পত্তি লাইনের মাধ্যমে সক্ষম করুন

    আপনি ব্যবহার করতে পারেন com.google.firebase.crashlytics.symbolGenerator নিয়ন্ত্রণসমূহ সিম্বল ফাইল জেনারেটর ব্যবহার করার জন্য সম্পত্তি। সম্পত্তি বৈধ মান হয় breakpad বা csym । অনির্দিষ্ট পারেন, বর্তমান ডিফল্ট সমতূল্য csym , যদিও যে ভবিষ্যতের সংস্করণে পরিবর্তন হতে পারে।

    আপনি ম্যানুয়ালি আপনার Gradle বৈশিষ্ট্য ফাইল আপডেট করতে পারেন অথবা কমান্ড লাইনের মাধ্যমে ফাইল আপডেট করতে পারেন। উদাহরণস্বরূপ, Breakpad সিম্বল ফাইল জেনারেটরের সক্রিয় করতে এর মান নির্দিষ্ট করে breakpad পরিচয়ে নিম্নলিখিত কমান্ড দেখানো:

    ./gradlew -Pcom.google.firebase.crashlytics.symbolGenerator=breakpad \
    app:assembleRelease app:uploadCrashlyticsSymbolFileRelease
    

ধাপ 7: আপনার ক্র্যাশ প্রতিবেদনগুলি দেখুন

তা যাচাই করুন Crashlytics সঠিকভাবে NDK প্রতিবেদন, আপনার অ্যাপ্লিকেশন নির্মাণের প্রতীক আপলোড করা এবং মাধ্যমে আমাদের ক্র্যাশ একটি নেটিভ ক্র্যাশ অত্যাচার । প্রতিবেদনটি পাঠানোর জন্য ক্র্যাশলাইটিক্সের ক্র্যাশ হওয়ার পরে আপনাকে অ্যাপটি পুনরায় চালু করতে হবে। তুমি তোমার মধ্যে ক্র্যাশ দেখতে পাবেন Firebase কনসোল কয়েক মিনিটের মধ্যে।

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

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

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