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

Android NDK kilitlenme raporlarını alın

Android uygulama içeriyorsa yerel kütüphaneleri , tam yığın izlerini ve uygulamanızın inşa yapılandırmasına birkaç küçük güncellemeler ile Firebase Crashlytics adresinin yerli kodu için ayrıntılı çökme raporları 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.

Eğer Unity projelerinde Crashlytics ile nasıl başlayacağınız arıyorsanız, check out Başlangıç kılavuzu Unity .

Sen başlamadan önce

  1. Eğer henüz yapmadıysanız, Firebase eklemek Android projeye. Eğer bir Android uygulaması yoksa, bir indirebilirsiniz örnek uygulamasını .

  2. Önerilen: çarpışma ücretsiz kullanıcılar, sayfa işareti günlükleri ve hız uyarıları gibi özellikleri almak için, Firebase projesi Google Analytics etkinleştirmeniz gerekiyor.

    • Mevcut Firebase projesi, Google Analytics'in etkin yoksa, sen Google Analytics'in etkinleştirebilirsiniz Entegrasyonları sekmesinin çıkartmalarınızın Firebase konsolunda> Proje ayarlarında.

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

1. Adım: Firebase konsolunda Crashlytics etkinleştirme

  1. Git Crashlytics pano Firebase konsolunda.

  2. Emin olun Uygulama sayfasının üst kısmında Crashlytics yanındaki açılır menüden seçilir.

  3. Tıklayın Crashlytics etkinleştirin.

2. Adım: uygulamanıza NDK için Firebase Crashlytics SDK ekle

Kullanılması Firebase Android Bom , senin modülü (uygulama düzeyinde) Gradle dosyası (genellikle Crashlytics NDK Android kütüphanesi için bağımlılık beyan app/build.gradle ).

Crashlytics ile Optimum deneyim için, tavsiye Google Analytics sağlayan sizin Firebase projesinde ve uygulamanızda Google Analytics'in Firebase SDK ekledi.

Java

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

Kullanarak Firebase Android Bom , uygulamanızın her zaman Firebase Android kütüphanelerin uyumlu versiyonlarını kullanacak.

(Alternatif) Bom kullanmadan Firebase kütüphane bağımlılıklarını beyan

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

Eğer uygulamanızda birden Firebase kitaplıkları kullanırsanız, biz çok tüm versiyonlar uyumlu olmasını sağlar kütüphane sürümlerini yönetmek için Bom kullanmanızı öneririz olduğunu unutmayın.

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

Kotlin+KTX

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

Kullanarak Firebase Android Bom , uygulamanızın her zaman Firebase Android kütüphanelerin uyumlu versiyonlarını kullanacak.

(Alternatif) Bom kullanmadan Firebase kütüphane bağımlılıklarını beyan

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

Eğer uygulamanızda birden Firebase kitaplıkları kullanırsanız, biz çok tüm versiyonlar uyumlu olmasını sağlar kütüphane sürümlerini yönetmek için Bom kullanmanızı öneririz olduğunu unutmayın.

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. Adım: uygulamanıza Firebase Crashlytics eklentisi ekle

  1. Projeniz düzeyi olarak build.gradle dosyası, bir buildscript bağımlılık olarak Crashlytics Gradle eklentisi ekleyin.

    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. Uygulama düzeyinde ise build.gradle dosyası, Crashlytics Gradle eklentisi uygulanır:

    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'
    

Adım 4: Ekle firebaseCrashlytics Yapınızda uzantıyı

Senin modülü (uygulama düzeyinde) Gradle dosyası (genellikle de app/build.gradle ) ekleyin firebaseCrashlytics uzantısı.

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

İçin gerekli targetSdkLevel 30 ve üzeri: Eğer için aşağıdaki ekleyerek app Pointer Etiketlemeyi devre dışı bırakmalısınız AndroidManifest.xml :

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

Daha fazla bilgi için, okumak Etiketli İşaretçiler için Geliştirici desteği .

Adım 5: Yerli sembollerin otomatik yükleme kurma

NDK çökmelerinden okunabilir yığın izleri oluşturmak için Crashlytics'in yerel ikili dosyalarınızdaki semboller hakkında bilgi sahibi olması gerekir. Crashlytics Gradle eklentisi içerir uploadCrashlyticsSymbolFile BUILD_VARIANT bu süreci otomatik hale getirmek görevi.

  1. Yani otomatik sembol yüklemek için görev erişebilmeleri, emin nativeSymbolUploadEnabled ayarlandığında true senin modülü (uygulama düzeyinde) Gradle dosya içinde.

  2. Yöntem adları yığın izleri görünmeye için açıkça çağırmak zorundadır uploadCrashlyticsSymbolFile BUILD_VARIANT sizin NDK kütüphanesinin her yapı sonra görevi. Örneğin:

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

    Sen çalıştırarak Bu kimliğin varlığını doğrulamak readelf -n her ikili üzerinde. İnşa kimliği yoksa, eklemek -Wl,--build-id , yapı sisteminin bayrak sorunu çözmek için.

Adım 6: Kuvvet kurulumunu tamamlamak için bir test kazasında

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

  1. Uygulamanıza, bir test çökmesini zorlamak için kullanabileceğiniz bir kod ekleyin.

    Sen uygulamanızın aşağıdaki kodu kullanabilirsiniz MainActivity , basıldığında, çökertmesidir uygulamanıza bir düğme ekleyin. Düğme "Çökme Testi" olarak etiketlenmiştir.

    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. 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 ö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. Git Crashlytics pano test kilitlenmeyi görmek için Firebase konsolunun.

    Eğer konsol yenilenir ettik ve hala beş dakika sonra deney kazasında görmüyorsanız, hata ayıklama günlüğünü etkinleştirme uygulama kilitlenme raporları göndererek olup olmadığını görmek için.


Ve bu kadar! Crashlytics artık uygulamanızı çökmelere karşı izliyor ve Crashlytics panosunda kilitlenme raporlarını ve istatistikleri görüntüleyebilir ve inceleyebilirsiniz.



Sembolleri yüklemek için alternatif seçenekler

Yukarıdaki bu sayfadaki ana iş akışı, standart Gradle derlemeleri 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, sembollerin başarıyla yüklenmesi için aşağıdaki seçenekler yardımcı olabilir.

Seçenek: kütüphane modülleri ve dış bağımlılıkları için Yükleme sembolleri

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 yerleşikse veya bir üçüncü tarafça sağlandıysa
  • Eğer otomatik sembol yükleme görev başarısız oluyor veya gösterge tablosunda unsymbolicated çökmeleri görüyoruz

Seçenek: olmayan Gradle için Yükleme sembolleri oluşturur veya erişilemeyen unstripped yerli kütüphaneler

Bu seçenek aşağıdaki durumlarda yardımcı 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 şekilde sağlanırsa



Sorun giderme

Eğer Firebase konsolunda ve LogCat farklı yığın izleri görüyorsanız, bakın giderme rehberi .

Sonraki adımlar