Kilitlenmeyle sonuçlanan yığın izlemelerin kodunu gösterme veya simgeselleştirme

Android'deki kilitlenmeler ve ANR'ler, programınızdaki iç içe yerleştirilmiş işlev çağrılarının kilitlenme anına kadarki adım sırasının anlık görüntüsü olan bir yığın izleme (stack trace) oluşturur. Bu anlık görüntüler, kaynaktaki sorunları tanımlayıp düzeltmenize yardımcı olabilir.

Uygulamanız veya oyununuz, Java kullanılarak geliştirildiyse ve uygulamanızı hem optimize etmek hem de kodunu karartmak için ProGuard kullanıyorsanız Play Console'da uygulamanızın her sürümüne ait ProGuard eşleme dosyası yükleyebilirsiniz. Uygulamanız veya oyununuz C++ gibi yerel kod kullanılarak geliştirildiyse Play Console'da uygulamanızın her sürümü için bir hata simgeselleştirme dosyası yükleyebilirsiniz. Bu, kilitlenmelerinizi ve ANR'lerinizi analiz etmenizi ve düzeltmenizi kolaylaştırır.

Önemli: Java'da derlenen uygulamalarda kod gösterme için yalnızca ReTrace uyumlu eşleme dosyaları desteklenmektedir. Bu, ProGuard veya R8 tarafından kullanılan aynı biçimdir.

1. Adım: Kod gösterme veya simgeselleştirme dosyası oluşturma

Uygulamanızın bir sürümündeki kilitlenme ve ANR'lerin kodlarını göstermek veya simgeselleştirmek için öncelikle uygulamanızın aynı sürümüne yönelik gerekli dosyaları oluşturmanız gerekir. Kod göstermenin veya simgeselleştirmenin çalışması için uygulamanızın her yeni sürümüne ait dosya oluşturmalı ve yüklemelisiniz.

Java: ProGuard eşleme dosyası oluşturun

Java yığın izlemelerin (stack trace) kodunu göstermek için önce bir ProGuard eşleme dosyası oluşturmanız gerekir. Bunu nasıl yapacağınızı öğrenmek için Google Developers sitesine gidin.

Yerel: Hata ayıklama simgeleri dosyası oluşturun

Android Gradle eklentisi 4.1 ve sonraki sürümleri

Projeniz Android App Bundle derliyorsa hata ayıklama simgeleri dosyasını otomatik olarak buna ekleyebilirsiniz. Bu dosyayı dahil etmek için uygulamanızın build.gradle dosyasına şunu ekleyin:

  • android.defaultConfig.ndk.debugSymbolLevel = 'FULL'

Not: Hata simgeselleştirme dosyasının boyutu en fazla 800 MB olabilir. Hata ayıklama simgeleri dosyasının boyutu çok büyükse küçültmek için FULL yerine SYMBOL_TABLE işlevini kullanın.

Projeniz APK derliyorsa hata ayıklama simgeleri dosyasını ayrı olarak oluşturmak için yukarıdaki build.gradle derleme ayarını kullanın. Hata ayıklama simgeleri dosyasını Google Play Console'a aşağıdaki 2. Adım: Kod gösterme veya simgeselleştirme dosyası yükleme bölümünde açıklandığı şekilde manuel olarak yükleyin. Android Gradle eklentisi, derleme işleminin bir parçası olarak bu dosyayı aşağıdaki proje konumuna çıkarır:

  • app/build/outputs/native-debug-symbols/variant-name/native-debug-symbols.zip

Android Gradle eklentisi 4.0 ve önceki sürümler (ayrıca diğer derleme sistemleri)

Android Gradle eklentisi bir uygulama paketi veya APK için derleme işlemi kapsamında, sadeleştirilmemiş kitaplıkların kopyasını proje dizininde saklar. Bu dizin şuna benzer bir yapıya sahiptir:

app/build/intermediates/cmake/universal/release/obj

├── armeabi-v7a/

│   ├── libgamenegine.so

│   ├── libothercode.so

│   └── libvideocodec.so

├── arm64-v8a/

│   ├── libgamenegine.so

│   ├── libothercode.so

│   └── libvideocodec.so

├── x86/

│   ├── libgamenegine.so

│   ├── libothercode.so

│   └── libvideocodec.so

└── x86_64/

    ├── libgameengine.so

    ├── libothercode.so

    └── libvideocodec.so

Not: Farklı bir derleme sistemi kullanıyorsanız dizinin yapısını, sadeleştirilmemiş kitaplıkları yukarıdaki gerekli yapıya sahip bir dizinde depolayacak şekilde değiştirebilirsiniz.

  1. Bu dizinin içeriğini zip dosyası olarak kaydedin:
    • $ cd app/build/intermediates/cmake/universal/release/obj
    • $ zip -r symbols.zip .
  2. Symbols.zip dosyasını Google Play Console'a aşağıdaki 2. adım: Kod gösterme veya simgeselleştirme dosyası yükleme bölümünde açıklandığı şekilde manuel olarak yükleyin.

Hata simgeselleştirme dosyasının boyutu en fazla 800 MB olabilir. Dosyanız çok büyükse bunun nedeni büyük olasılıkla .so dosyalarınızın hem simge tablosu (işlev adları) hem de DWARF hata ayıklama bilgilerini (dosya adları ve kod satırları) içermesidir. Bunlar, kodunuzu simgeselleştirmek için gerekli değildir ve şu komut çalıştırılarak kaldırılabilir:

  • $OBJCOPY --strip-debug lib.so lib.so.sym

Not: $OBJCOPY, sadeleştirdiğiniz ABI için belirli bir sürümü işaret eder. Örneğin: ndk-bundle/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin/aarch64-linux-android-objcopy

2. Adım: Kod gösterme veya simgeselleştirme dosyası yükleme

Uygulamanızın bir sürümündeki kilitlenmeler ve ANR'ler için kod göstermek veya simgeselleştirmek üzere uygulamanızın her sürümüne ait kod gösterme ve simgeselleştirme dosyası yüklemeniz gerekir.

Önemli: Bu adım, yalnızca APK'lar kullanan geliştiriciler için gereklidir. Uygulama paketi ve Android Gradle eklentisi 4.1 veya sonraki bir sürümünü kullanıyorsanız herhangi bir işlem yapmanız gerekmez. Kod gösterme dosyası paketten otomatik olarak alınır. Dolayısıyla, 3. Adım: Kilitlenmeyle sonuçlanan yığın izlemelere ait gösterilen kodları görüntüleme adımına atlayabilirsiniz. Uygulama paketleri hakkında Android Geliştiricileri sitesinde daha fazla bilgi edinebilirsiniz.

Play Console'u kullanarak dosya yükleme

Kod gösterme veya simgeselleştirme dosyası yüklemek için:

  1. Play Console'u açın.
  2. Bir uygulama seçin.
  3. Soldaki menüde

    Test edin ve yayınlayın

    > Uygulama paketi gezgini'ni seçin.
  4. Sağ üst köşedeki seçiciyi kullanarak ilgili yapıyı seçin.
  5. İndirilenler sekmesini seçip "Öğeler" bölümüne gidin.
  6. Uygulamanızın ilgili sürümüne ait kod gösterme veya simgeselleştirme dosyasını yüklemek üzere uygun olan eşleme dosyası veya hata ayıklama simgeleri için yukarı oku tıklayın.
Dosyaları Google Play Geliştirici API'sini kullanarak yükleme

Dosyaları Google Play Geliştirici API'sini kullanarak yüklemek için Google Developers sitesine gidin.

3. Adım: Kilitlenmeyle sonuçlanan yığın izlemelere ait görüntülenen kodları gösterme

Uygulamanızın bir sürümü için ProGuard eşleme dosyası veya hata ayıklama simgeleri dosyası yükledikten sonra, bu yüklemeden sonra oluşan kilitlenmeler ve ANR'lerin kodu gösterilir. Uygulamanızın Kilitlenmeler ve ANR'ler sayfasında, tek tek kilitlenme ve ANR'lerin kodu gösterilen yığın izlemelerini (stack trace) inceleyebilirsiniz.

  1. Play Console'u açın.
  2. Bir uygulama seçin.
  3. Soldaki menüde İzleyin ve geliştirin > Android vitals > Kilitlenmeler ve ANR'ler seçeneğini belirleyin.
  4. Bir kilitlenme seçin.
  5. "Yığın İzlemeler (Stack Traces)" bölümünde, kodu gösterilen ve simgeselleştirilen yığın izlemeleri (stack trace) görürsünüz.

Önemli: Uygulamanızın bir sürümü için eşleme dosyası yüklediğinizde, uygulamanızın bu sürümüne ait yalnızca gelecekteki kilitlenme ve ANR'lerin kodu gösterilir. Uygulamanızın bir sürümü için ilgili eşleme dosyası yüklenmeden önce gerçekleşmiş olan kilitlenme ve ANR'lerin kodu gösterilmez.

Sık sorulan sorular

Play Console kod gösterme/simgeselleştirme işlevini kullanmak istemiyorum. Bunu çevrimdışı yapabilir miyim?

Play Console, yerel uygulamalarda yığın izlemeleri (stack trace) simgeleştirmek için ndk-Stack ve Java kilitlenmeleri için ReTrace araçlarını kullanır. Kod gösterme dosyalarınızı paylaşmamayı seçerseniz, kodu karartılmış olan kilitlenmeyle sonuçlanan yığın izlemeleri Play Console'dan kopyalayıp bunları çevrimdışı simgeselleştirmek için uygun aracı kullanabilirsiniz. Ancak, bu işlem her kilitlenme yığını için manuel olarak yapılmalıdır. Bu da yavaş ve zaman alan bir süreçtir. Kod gösterme dosyalarınızı paylaşarak bu işi Play Console'un yapmasını sağlayabilirsiniz.

Kod gösterme/simgeselleştirme dosyamı yüklemiş olmama rağmen, neden hâlâ kilitlenmelerimin ve ANR'lerimin kodu karartılıyor?

Uygulamanızın bir sürümü için ProGuard eşleme dosyası veya hata ayıklama simgeleri dosyası yüklediğinizde, yalnızca bu dosya yüklendikten sonra oluşan kilitlenme ve ANR'lerin kodu gösterilir. Kodu gösterilen kilitlenmeleri ve ANR'leri Play Console'da görmeden önce kullanıcı cihazlarının yeni kilitlenmeleri ve ANR'leri bildirmesi için belli bir süre beklemeniz gerekir.

Kod gösterme/simgeselleştirme dosyamı yükledikten sonra, kilitlenmelerimin ve ANR'lerimin kodu neden kısmen gösteriliyor?

Bu, eksik kod gösterme/simgeselleştirme dosyası yüklemekten kaynaklanır. Özellikle karmaşık veya çok aşamalı bir derleme işlemi kullanıyorsanız uygulamanızın tamamı için simgeselleştirme dosyaları eklediğinizden emin olun. Kısmi kod göstermenin en yaygın nedenlerinden biri, üçüncü taraf kitaplığı kullanılmasıdır. Bu durumda, kod gösterme dosyalarını kitaplık sağlayıcısından alabilirsiniz.

Kod gösterme/simgeselleştirme dosyamı yükledikten sonra, neden daha az sayıda, ancak daha ciddi kilitlenmeler ve ANR'lerle karşılaşıyorum?

Kod gösterme dosyaları olmadan, ANR, 32 bit ve 64 bit bir cihazdaki veya ANR ya da Intel cihazındaki aynı kilitlenme ayrı gösterilir. Kod gösterme dosyaları sağlayarak, bu kilitlenmeleri bir kümede toplayıp uygulamanız için en etkili kilitlenmeler ve ANR'ler hakkında daha iyi bir bakış açısı sunabiliriz.

Dosyayı yüklemeyi unutursam ne olur?

Dosyayı uygulamanızın yeni bir sürümü için yüklemeyi unutursanız kilitlenmeler ve ANR'ler kodları karartılmış hale döner. Şimdi yüklemek için yukarıdaki talimatları uygulayın. Uygulamanızın bir sürümü için ProGuard eşleme dosyası veya hata ayıklama simgeleri dosyası yüklediğinizde, yalnızca bu dosya yüklendikten sonra oluşan kilitlenme ve ANR'lerin kodu gösterilir. Kodu gösterilen kilitlenmeleri ve ANR'leri Play Console'da görmeden önce kullanıcı cihazlarının yeni kilitlenmeleri ve ANR'leri bildirmesi için belli bir süre beklemeniz gerekir.

Dosyayı yüklemeyi unutma riskini önlemek için derleme sürecinizi, Android Gradle eklentisi 4.1 veya sonraki bir sürümüne sahip uygulama paketleri kullanacak şekilde değiştirmeyi düşünün. Bu durumda, Android Geliştiricileri sitesindeki talimatları uygulayarak hata ayıklama simgeleri dosyasını uygulama paketine otomatik olarak ekleyebilirsiniz.

Yanlış dosyayı yüklersem ne olur?

Uygulamanızın bir sürümü için yanlış dosyayı yüklerseniz kilitlenmeler ve ANR'ler kodları karartılmış hale döner. Düzeltilmiş sürümü yüklemek için:

  1. Play Console'u açın.
  2. Bir uygulama seçin.
  3. Soldaki menüde

    Test edin ve yayınlayın

    > Uygulama paketi gezgini'ni seçin
  4. Sağ üst köşedeki seçiciyi kullanarak ilgili yapıyı seçin.
  5. İndirilenler sekmesini seçip "Öğeler" bölümüne gidin.
  6. Yanlış kod gösterme veya simgeselleştirme dosyasının yanındaki sil simgesini tıklayın.
  7. Yanlış sürüm silindikten sonra, yükleme simgesini tıklayıp uygulamanızın sürümü için doğru dosyayı yükleyin.

Uygulamanızın bir sürümü için ProGuard eşleme dosyası veya hata ayıklama simgeleri dosyası yükledikten sonra, yalnızca bu dosya yüklendikten sonra oluşan kilitlenme ve ANR'lerin kodu gösterilir. Kodu gösterilen kilitlenmeler ve ANR'leri Play Console'da görmeden önce kullanıcı cihazlarının yeni kilitlenmeleri ve ANR'leri bildirmesi için belli bir süre beklemeniz gerekir.

İpucu: Dosyanın yanlış sürümünü yükleme riskini önlemek için derleme sürecinizi, Android Gradle eklentisi 4.1 veya sonraki bir sürümüne sahip uygulama paketleri kullanacak şekilde değiştirmeyi düşünün. Bu durumda, Android Geliştiricileri sitesindeki talimatları uygulayarak hata ayıklama simgeleri dosyasını uygulama paketine otomatik olarak ekleyebilirsiniz.

Şu anda APK'ları kullanıyorum. Uygulama paketlerini kullanmaya nasıl geçebilirim?

Başlamak için Android Geliştiricileri sitesini ziyaret edin.

Uygulamam hem yerel hem de Java kodu içeriyor. Hem yerel simgeselleştirme dosyası hem de Java kod gösterme dosyası yükleyebilir miyim?

Evet.

Bazı ANR'ler neden yığın izleme (stack trace) göstermiyor?

Bazen sistem bir ANR ile karşılaşır ancak yığın izleme (stack trace) hakkında bilgi toplayamaz. Bu durumda, uygulamanızın kararlılığı hakkında daha kapsamlı bir değerlendirme sunabilmek için ANR gösterilir ancak ilgili yığın izleme gösterilemez. Yığın izleme içermeyen ANR'ler, tür ve etkinlik bazında gruplanır. Dolayısıyla benzer ANR'leri inceleyip düzeltmek, yığın izleme içermeyen ANR sayısını azaltmanıza yardımcı olabilir.

Bu size yardımcı oldu mu?

Bunu nasıl iyileştirebiliriz?

Daha fazla yardıma mı ihtiyacınız var?

Bir sonraki adımları deneyin:

Arama
Aramayı temizle
Aramayı kapat
Ana menü
3989227499635412698
true
Yardım Merkezinde Arayın
true
true
true
true
true
92637
false
false