Catch up on highlights from Firebase at Google I/O 2023. Learn more

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üncellemeyle Firebase Crashlytics'ten yerel kodunuz için tam yığın izlemelerini ve ayrıntılı kilitlenme raporlarını etkinleştirebilirsiniz.

Bu kılavuz, NDK için Firebase Crashlytics SDK ile kilitlenme raporlamasının nasıl yapılandırılacağını açıklar.

Unity projelerinizde Crashlytics'e nasıl 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, Firebase'i Android projenize ekleyin . Android uygulamanız yoksa örnek bir uygulama indirebilirsiniz.

  2. Önerilen : Kilitlenme sorunu yaşamayan kullanıcılar, içerik haritası günlükleri ve hız uyarıları gibi özellikleri almak için Firebase projenizde Google Analytics'i etkinleştirmeniz gerekir.

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

    • 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'yı uygulamanıza ekleyin

Modül (uygulama düzeyinde) Gradle dosyanıza (genellikle <project>/<app-module>/build.gradle ), Crashlytics NDK Android kitaplığı için bağımlılığı ekleyin. Kitaplık sürüm oluşturmayı kontrol etmek için Firebase Android BoM'yi kullanmanızı öneririz.

En iyi Crashlytics deneyimi için Firebase projenizde Google Analytics'i etkinleştirmenizi ve Google Analytics için Firebase SDK'yı uygulamanıza eklemenizi öneririz.

Kotlin+KTX

dependencies {
    // Import the BoM for the Firebase platform
    implementation platform('com.google.firebase:firebase-bom:32.1.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-ktx'
}

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 kullanmadan Firebase kitaplığı bağımlılıkları ekleyin

Firebase BoM'yi kullanmamayı seçerseniz, her bir Firebase kitaplığı sürümünü bağımlılık satırında belirtmeniz gerekir.

Uygulamanızda birden çok 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ı kesinlikle öneririz.

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.3.7'
    implementation 'com.google.firebase:firebase-analytics-ktx:21.3.0'
}

Java

dependencies {
    // Import the BoM for the Firebase platform
    implementation platform('com.google.firebase:firebase-bom:32.1.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 kullanmadan Firebase kitaplığı bağımlılıkları ekleyin

Firebase BoM'yi kullanmamayı seçerseniz, her bir Firebase kitaplığı sürümünü bağımlılık satırında belirtmeniz gerekir.

Uygulamanızda birden çok 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ı kesinlikle öneririz.

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.3.7'
    implementation 'com.google.firebase:firebase-analytics:21.3.0'
}

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

  1. Kök düzeyinde (proje düzeyinde) Gradle dosyanıza ( <project>/build.gradle ), Crashlytics Gradle eklentisini bir buildscript bağımlılığı olarak ekleyin:

    buildscript {
        repositories {
          // Make sure that you have the following two repositories
          google()  // Google's Maven repository
          mavenCentral()  // Maven Central repository
        }
    
        dependencies {
            ...
            classpath 'com.android.tools.build:gradle:7.2.0'
    
            // Make sure that you have the Google services Gradle plugin dependency
            classpath 'com.google.gms:google-services:4.3.15'
    
            // Add the dependency for the Crashlytics Gradle plugin
            classpath 'com.google.firebase:firebase-crashlytics-gradle:2.9.5'
        }
    }
  2. Modül (uygulama düzeyinde) Gradle dosyanıza (genellikle <project>/<app-module>/build.gradle ), Crashlytics Gradle eklentisini ekleyin:

    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 : Yapınıza firebaseCrashlytics uzantısını ekleyin

Modül (uygulama düzeyinde) Gradle dosyanıza (genellikle app/build.gradle ), firebaseCrashlytics uzantısını ekleyin.

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

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

4. Adım : Yerel sembollerin otomatik olarak 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şebilmek için modül (uygulama düzeyinde) Gradle dosyanızda nativeSymbolUploadEnabled öğesinin true olarak ayarlandığından emin olun.

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

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

    Her bir ikili dosyada readelf -n komutunu çalıştırarak bu kimliğin varlığını doğrulayabilirsiniz. Yapı kimliği yoksa, sorunu çözmek için yapı sisteminizin bayraklarına -Wl,--build-id ekleyin.

5. Adım : Kurulumu bitirmek için bir test çökmesine zorlayın

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

  1. Uygulamanıza, bir test kilitlenmesini zorlamak için kullanabileceğiniz kod 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üğme "Çökmeyi Test Et" olarak etiketlenmiş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 çökmesini zorunlu kılın:

    1. Uygulamanızı test cihazınızdan veya öykünücünüzden açın.

    2. Uygulamanızda, yukarıdaki kodu kullanarak eklediğiniz "Test Crash" düğmesine basın.

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

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

    Konsolu yenilediyseniz ve beş dakika geçmesine rağmen test kilitlenmesini hala görmüyorsanı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ı çökmelere karşı izliyor ve kilitlenme raporlarını ve istatistiklerini Crashlytics kontrol panelinde görüntüleyip inceleyebilirsiniz.

Sonraki adımlar

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

  • Kaydolma raporları, günlükler, anahtarlar ve önemli olmayan hataların izlenmesini ekleyerek kilitlenme raporu kurulumunuzu özelleştirin .

  • Google Play ile entegre edin, böylece Android uygulamanızın kilitlenme raporlarını doğrudan Crashlytics kontrol panelinde Google Play izine göre filtreleyebilirsiniz. Bu, kontrol panelinizi belirli yapılara daha iyi odaklamanızı sağlar.

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 oluşturma işlemi). Bu durumlarda, sembolleri başarıyla yüklemek için aşağıdaki seçenekler yardımcı olabilir.

Seçenek : Kitaplık modülleri ve harici bağımlılıklar için semboller yükleyin

Bu seçenek aşağıdaki durumlarda yardımcı 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 oluşturulmuşsa veya bir üçüncü tarafça sağlanmışsa
  • Otomatik sembol yükleme görevi başarısız oluyorsa veya kontrol panelinde simgesel olmayan kilitlenmeler görüyorsanız

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

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

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

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