Android NDK kilitlenme raporlarını alın

Android uygulamanız yerel kitaplıklar içeriyorsa uygulamanızın derleme yapılandırmasında birkaç küçük güncelleme yaparak Firebase Crashlytics'ten yerel kodunuz için tam yığın izlemeleri ve ayrıntılı kilitlenme raporlarını etkinleştirebilirsiniz.

Bu kılavuzda, NDK için Firebase Crashlytics SDK'sıyla kilitlenme raporlamasının nasıl yapılandırılacağı açıklanmaktadır.

Unity projelerinizde Crashlytics'i nasıl kullanmaya başlayacağınızı arıyorsanız Unity Başlarken kılavuzuna göz atın.

Sen başlamadan önce

  1. Henüz yapmadıysanız Android projenize Firebase'i ekleyin . Android uygulamanız yoksa örnek bir uygulama indirebilirsiniz.

  2. Önerilen : Kilitlenme, ölümcül olmayan veya ANR olayına yol açan kullanıcı işlemlerini anlamak amacıyla içerik haritası günlüklerini otomatik olarak almak için Firebase projenizde Google Analytics'i etkinleştirmeniz gerekir.

    • Mevcut Firebase projenizde Google Analytics etkin değilse Google Analytics'i projenizin Entegrasyonlar sekmesinden etkinleştirebilirsiniz. Firebase konsolunda > Proje ayarları .

    • Yeni bir Firebase projesi oluşturuyorsanız proje oluşturma iş akışı sırasında Google Analytics'i etkinleştirin.

1. Adım : NDK için Crashlytics SDK'sını uygulamanıza ekleyin

Modül (uygulama düzeyi) Gradle dosyanıza (genellikle <project>/<app-module>/build.gradle.kts veya <project>/<app-module>/build.gradle ), Crashlytics NDK bağımlılığını ekleyin Android için kütüphane. Kitaplık sürümlerini kontrol etmek için Firebase Android BoM'yi kullanmanızı öneririz.

Optimum Crashlytics deneyimi için Firebase projenizde Google Analytics'i etkinleştirmenizi ve Google Analytics için Firebase SDK'sını uygulamanıza eklemenizi öneririz.

dependencies {
    // Import the BoM for the Firebase platform
    implementation(platform("com.google.firebase:firebase-bom:32.8.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'yi kullandığınızda uygulamanız her zaman Firebase Android kitaplıklarının uyumlu sürümlerini kullanır.

(Alternatif) BoM'yi kullanmadan Firebase kitaplığı bağımlılıklarını ekleyin

Firebase BoM'yi kullanmamayı tercih ederseniz her Firebase kitaplığı sürümünü bağımlılık satırında belirtmeniz gerekir.

Uygulamanızda birden fazla Firebase kitaplığı kullanıyorsanız kitaplık sürümlerini yönetmek için tüm sürümlerin uyumlu olmasını sağlayan BoM'yi kullanmanızı önemle tavsiye ettiğimizi unutmayın.

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:18.6.3")
    implementation("com.google.firebase:firebase-analytics:21.6.1")
}
Kotlin'e özgü bir kütüphane modülü mü arıyorsunuz? Ekim 2023'ten itibaren (Firebase BoM 32.5.0) hem Kotlin hem de Java geliştiricileri ana kütüphane modülüne güvenebilecekler (ayrıntılar için bu girişimle ilgili SSS'ye bakın).

Adım 2 : Crashlytics Gradle eklentisini uygulamanıza ekleyin

  1. Kök düzeyindeki (proje düzeyi) Gradle dosyanızda ( <project>/build.gradle.kts veya <project>/build.gradle ), Crashlytics Gradle eklentisini plugins bloğuna ekleyin:

    Kotlin

    plugins {
        id("com.android.application") version "7.3.0" apply false
        // ...
    
        // Make sure that you have the Google services Gradle plugin dependency
        id("com.google.gms.google-services") version "4.4.1" apply false
    
        // Add the dependency for the Crashlytics Gradle plugin
        id("com.google.firebase.crashlytics") version "2.9.9" apply false
    }
    

    Groovy

    plugins {
        id 'com.android.application' version '7.3.0' apply false
        // ...
    
        // Make sure that you have the Google services Gradle plugin dependency
        id 'com.google.gms.google-services' version '4.4.1' apply false
    
        // Add the dependency for the Crashlytics Gradle plugin
        id 'com.google.firebase.crashlytics' version '2.9.9' apply false
    }
    
  2. Modülünüz (uygulama düzeyi) Gradle dosyanıza (genellikle <project>/<app-module>/build.gradle.kts veya <project>/<app-module>/build.gradle ), Crashlytics Gradle eklentisini ekleyin:

    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. Adım : Crashlytics uzantısını derlemenize ekleyin

Modülünüzde (uygulama düzeyi) Gradle dosyanızda (genellikle <project>/<app-module>/build.gradle.kts veya <project>/<app-module>/build.gradle ), Crashlytics uzantısını yapılandırın.

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. Adım : Yerel sembollerin otomatik yüklenmesini ayarlayın

NDK çökmelerinden okunabilir yığın izleri üretmek için Crashlytics'in yerel ikili dosyalarınızdaki semboller hakkında bilgi sahibi olması gerekir. Crashlytics Gradle eklentisi, bu işlemi otomatikleştirmek için uploadCrashlyticsSymbolFile BUILD_VARIANT görevini içerir.

  1. Otomatik sembol yükleme görevine erişebilmeniz için modül (uygulama düzeyi) Gradle dosyanızda nativeSymbolUploadEnabled öğesinin true olarak ayarlandığından emin olun.

  2. Yığın izlemelerinizde yöntem adlarının görünmesi için NDK kitaplığınızın her derlemesinden sonra uploadCrashlyticsSymbolFile BUILD_VARIANT görevini açıkça çağırmanız gerekir. Örneğin:

    >./gradlew app:assembleBUILD_VARIANT\
               app:uploadCrashlyticsSymbolFileBUILD_VARIANT
    
  3. Hem NDK için Crashlytics SDK'sı hem de Crashlytics Gradle eklentisi, yerel paylaşılan nesneler içindeki GNU yapı kimliğinin varlığına bağlıdır.

    Çalıştırarak bu kimliğin varlığını doğrulayabilirsiniz. readelf -n her ikili dosyada. Yapı kimliği yoksa ekleyin Sorunu çözmek için derleme sisteminizin bayraklarına -Wl,--build-id .

5. Adım : Kurulumu tamamlamak için test çökmesini zorunlu kılın

Crashlytics kurulumunu tamamlamak ve Firebase konsolunun Crashlytics kontrol panelinde ilk verileri görmek için test kilitlenmesini zorlamanız gerekir.

  1. Test çökmesini zorlamak için kullanabileceğiniz kodu uygulamanıza ekleyin.

    Uygulamanıza, basıldığında çökmeye neden olan bir düğme eklemek için uygulamanızın MainActivity aşağıdaki kodu kullanabilirsiniz. Düğmenin etiketi "Çarpışmayı Test Et"tir.

    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));
    
  2. Uygulamanızı oluşturun ve çalıştırın.

  3. Uygulamanızın ilk kilitlenme raporunu göndermek için test kilitlenmesini zorlayın:

    1. Uygulamanızı test cihazınızdan veya emülatörünüzden açın.

    2. Uygulamanızda yukarıdaki kodu kullanarak eklediğiniz "Test Crash" butonuna basın.

    3. Uygulamanız kilitlendikten sonra, uygulamanızın kilitlenme raporunu Firebase'e gönderebilmesi için uygulamayı yeniden başlatın.

  4. Test kilitlenmenizi görmek için Firebase konsolunun Crashlytics kontrol paneline gidin.

    Konsolu yenilediyseniz ve beş dakika sonra hâlâ test kilitlenmesini göremiyorsanız uygulamanızın kilitlenme raporları gönderip göndermediğini görmek için hata ayıklama günlüğünü etkinleştirin .


Ve bu kadar! Crashlytics artık uygulamanızı kilitlenmelere karşı izliyor ve kilitlenme raporlarını ve istatistiklerini Crashlytics kontrol panelinde görüntüleyebilir ve inceleyebilirsiniz.

Sonraki adımlar

  • (Önerilen) GWP-ASan raporlarını toplayarak yerel bellek hatalarının neden olduğu çökmelerde hata ayıklama konusunda yardım alın. Bellekle ilgili bu hatalar, uygulamanızdaki güvenlik açıklarının önde gelen nedeni olan bellek bozulmasıyla ilişkilendirilebilir. Bu hata ayıklama özelliğinden yararlanmak için uygulamanızda GWP-ASan'ın açıkça etkinleştirildiğinden ve NDK için en yeni Crashlytics SDK'sını (v18.3.6+ veya Firebase BoM v31.3.0+) kullandığından emin olun.

  • İsteğe bağlı raporlama, günlükler, anahtarlar ve önemli olmayan hataların takibini ekleyerek kilitlenme raporu kurulumunuzu özelleştirin .

  • Android uygulamanızın kilitlenme raporlarını doğrudan Crashlytics kontrol panelinde Google Play parçasına göre filtreleyebilmek için Google Play ile entegrasyon yapın . Bu, kontrol panelinizi belirli yapılara daha iyi odaklamanıza olanak tanır.

Sorun giderme

Firebase konsolunda ve logcat'te farklı yığın izleri görüyorsanız Sorun Giderme kılavuzuna bakın.



Sembolleri yüklemek için alternatif seçenekler

Yukarıdaki bu sayfadaki ana iş akışı standart Gradle yapıları için geçerlidir. Ancak bazı uygulamalar farklı bir yapılandırma veya araç kullanır (örneğin, Gradle dışında bir derleme işlemi). Bu durumlarda sembollerin başarıyla yüklenmesi için aşağıdaki seçenekler yararlı olabilir.

Seçenek : Kütüphane modülleri ve dış bağımlılıklar için sembolleri yükleyin

Bu seçenek aşağıdaki durumlarda yararlı olabilir:

  • Gradle içinde özelleştirilmiş bir NDK oluşturma işlemi kullanıyorsanız
  • Yerel kitaplıklarınız bir kitaplık/özellik modülünde yerleşikse veya üçüncü tarafça sağlanıyorsa
  • Otomatik sembol yükleme görevi başarısız oluyorsa veya kontrol panelinde sembolik olmayan çökmeler görüyorsanız

Seçenek : Gradle olmayan yapılar veya erişilemeyen, ayrıştırılmamış yerel kütüphaneler için semboller yükleyin

Bu seçenek aşağıdaki durumlarda yararlı olabilir:

  • Gradle dışında bir derleme işlemi kullanıyorsanız

  • Soyulmamış yerel kitaplıklarınız size Gradle derlemeleri sırasında erişilemeyecek bir şekilde sağlandıysa