Google 致力于为黑人社区推动种族平等。查看具体举措

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, yeni Firebase Crashlytics SDK ile kilitlenme raporlamasının nasıl yapılandırılacağını açıklar.

Sen başlamadan önce

Başlamak için Crashlytics kurmak .

  1. Bir parçası olarak Adım 2 (uygulamanıza Firebase Crashlytics eklentisi ekle) , emin uygulaması symbolicated çökmeleri oluşturmak için sadece unstripped ikilileri kullanarak semboller yüklemenizi sağlar Crashlytics Gradle v2.4.0 + eklenti kullanıyor olun.

1. Adım: Gradle yapılandırmasını güncelleme

Uygulama düzeyinde ise build.gradle , Crashlytics NDK çalışma zamanı bağımlılığı beyan ederiz:

Java

apply plugin: 'com.android.application'
apply plugin: 'com.google.firebase.crashlytics'

dependencies {
  // ...

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

  // Declare the dependency for the Firebase Crashlytics NDK library.
  // If you previously declared the Firebase Crashlytics dependency, replace it.
  // When using the BoM, you don't specify versions in Firebase library dependencies
  implementation 'com.google.firebase:firebase-crashlytics'
  implementation 'com.google.firebase:firebase-crashlytics-ndk'
  implementation 'com.google.firebase:firebase-analytics'
}

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

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 dependency for the Firebase Crashlytics NDK library.
      // If you previously declared the Firebase Crashlytics dependency, replace it.
      // When NOT using the BoM, you must specify versions in Firebase library dependencies
      implementation 'com.google.firebase:firebase-crashlytics:18.1.0'
      implementation 'com.google.firebase:firebase-crashlytics-ndk:18.1.0'
      implementation 'com.google.firebase:firebase-analytics:19.0.0'
  }
  

Kotlin+KTX

apply plugin: 'com.android.application'
apply plugin: 'com.google.firebase.crashlytics'

dependencies {
  // ...

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

  // Declare the dependency for the Firebase Crashlytics NDK library.
  // If you previously declared the Firebase Crashlytics dependency, replace it.
  // When using the BoM, you don't specify versions in Firebase library dependencies
  implementation 'com.google.firebase:firebase-crashlytics-ktx'
  implementation 'com.google.firebase:firebase-crashlytics-ndk'
  implementation 'com.google.firebase:firebase-analytics-ktx'
}

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

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 dependency for the Firebase Crashlytics NDK library.
      // If you previously declared the Firebase Crashlytics dependency, replace it.
      // When NOT using the BoM, you must specify versions in Firebase library dependencies
      implementation 'com.google.firebase:firebase-crashlytics-ktx:18.1.0'
      implementation 'com.google.firebase:firebase-crashlytics-ndk:18.1.0'
      implementation 'com.google.firebase:firebase-analytics-ktx:19.0.0'
  }
  

Crashlytics NDK sürümü 17.3.0 için Gerekli: uygulama kullanıyorsa targetSdkLevel 30 veya üzeri, ayrıca üzere aşağıdaki ekleyerek app Pointer Etiketleme özelliğini 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 2: yerli sembol yüklemeyi etkinleştir

NDK çökmelerinden okunabilir yığın izleri oluşturmak için Crashlytics'in yerel ikili dosyalarınızdaki semboller hakkında bilgi sahibi olması gerekir. Bizim Gradle eklentisi içerir uploadCrashlyticsSymbolFile BUILD_VARIANT bu süreci otomatik hale getirmek görevi (erişmek için bu görevi, emin olun nativeSymbolUploadEnabled true olarak ayarlanır).

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

Crashlytics NDK v17.3.0+ ve Gradle eklentisi v2.4.1+, yerel paylaşılan nesneler içinde GNU yapı kimliğinin varlığına bağlıdır. Sen çalıştırarak bu kimliği 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.

3. Adım (isteğe bağlı): Dış bağımlılıklar için Yükleme sembolleri

Sembol yükleme görevimiz, CMake gibi standart NDK oluşturma araçlarını kullanarak yerel kitaplıklarınızı Gradle derlemenizin bir parçası olarak oluşturduğunuzu varsayar. Harici olarak oluşturulmuş yerel kitaplıklarınız varsa veya Gradle içinde özelleştirilmiş bir NDK oluşturma işlemi kullanıyorsanız, ayrıştırılmamış kitaplıklarınızın yolunu açıkça belirtmeniz gerekebilir. firebaseCrashlytics uzatma özelliği sağlar unstrippedNativeLibsDir bunu yapmak için.

Uygulamaya düzeyi için aşağıdaki ekleyin build.gradle dosyası:

// …
android {
    // ...
    buildTypes {
        release {
            firebaseCrashlytics {
                nativeSymbolUploadEnabled true
                unstrippedNativeLibsDir file("path/to/unstripped/dir")
            }
        }
    }
}

Crashlytics eklentisi Belirtilen dizini ve birlikte yerli kütüphaneler için tüm alt dizinleri arar .so uzantısı. Crashlytics daha sonra bu tür kitaplıklardan hata ayıklama sembollerini çıkaracak ve bunları Firebase sunucularına yükleyecektir.

unstrippedNativeLibsDir özelliği herhangi argümanlar için izin verilen kabul org.gradle.api.Project#files(Object...) dahil java.lang.String , java.io.File ve org.gradle.api.file.FileCollection . Bir liste veya sağlayarak tek yapı lezzet için birden fazla dizin belirtebilirsiniz FileCollection örneğini.

Adım 4 (opsiyonel): Özelleştirme NDK kilitlenme raporları

Sen dahil isteğe olabilir crashlytics.h sizin C günlüklerde, özel anahtarları ve kullanıcı kimlikleri gibi NDK çökme raporları, meta veri ekleme ++ kodu başlığı. crashlytics.h bir başlık okunur C ++ kütüphanesi olarak kullanılabilir Firebase JumpBox GitHub Repository . NDK C++ API'lerini kullanma talimatları için başlık dosyasındaki yorumları okuyun.

Adım 5 (opsiyonel): symbolication için Enable Breakpad sembol dosyası

Crashlytics Gradle eklentisi aşağıdaki işlevleri sağlar:

  • Sembol dosyaları oluşturmak için ayrıştırılmamış yerel ikili dosyalarınızı işler.
  • Oluşturulan sembol dosyalarını daha sonra yerel çökmeleri sembolize ederken kullanmak üzere sunucularımıza yükler.

Crashlytics Gradle eklentisi iki tür sembol dosyası formatını destekler:
Crashlytics sembol dosyası (cSYM) ve Breakpad sembol dosyası.

Breakpad tarafından oluşturulan bir sembol dosyası, yığın çerçevelerini hesaplamaya yardımcı olmak için çözme işleminde kullanılan Çağrı Çerçevesi Bilgisi (CFI) dahil olmak üzere Crashlytics tarafından oluşturulan bir sembol dosyasından daha fazla bilgi içerir. CFI kullanılması, özellikle oyunlar ve medya uygulamaları gibi yüksek düzeyde optimize edilmiş uygulamalar için daha yüksek doğrulukta yığın izlerine neden olur.

Breakpad tabanlı sembol dosyası oluşturucunun kullanımını iki yoldan biriyle etkinleştirebilirsiniz:

  • 1. Seçenek: aracılığıyla etkinleştirme firebaseCrashlytics sizin de uzantısı build.gradle dosyası

    Uygulamaya düzeyi için aşağıdaki ekleyin build.gradle dosyası:

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

    Varsayılan Crashlytics simge dosyası oluşturucusuna geri dönmek için aşağıdakilerden birini yapabilirsiniz:

    • Atla symbolGenerator blok tamamen eklenti olarak varsayılan Crashlytics sembol dosyası jeneratör kullanıyor.

    • Blok tutun, ama değişim breakpad() için csym() .

  • 2. Seçenek: Gradle özellikleri dosyasındaki bir özellik hattı üzerinden etkinleştirme

    Sen kullanabilirsiniz com.google.firebase.crashlytics.symbolGenerator sembol dosyası jeneratör kullanmak kontrole özelliği. Özellik için geçerli değerler şunlardır breakpad veya csym . Belirtilmemiş ise geçerli varsayılan eşdeğerdir csym gelecekteki sürümlerinde değişebilir olsa.

    Gradle özellikleri dosyanızı manuel olarak güncelleyebilir veya dosyayı komut satırı aracılığıyla güncelleyebilirsiniz. Örneğin, Breakpad sembol dosyası jeneratör etkinleştirmek değerini belirtmek için breakpad aşağıdaki komutu gösterildiği gibi:

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

6. Adım: kilitlenme raporlarını gör

Uygulamanızı oluşturarak, semboller yükleyerek ve yerel bir kilitlenmeye zorlayarak Crashlytics'in NDK çökmelerini doğru şekilde bildirdiğini doğrulayın. Crashlytics'in raporu göndermesi için kilitlendikten sonra uygulamayı yeniden başlatmanız gerekecek. Eğer içinde kazasında görmelisiniz Firebase konsoluna birkaç dakika içinde.

Sorun giderme

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