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şturunJava 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.
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.
- Bu dizinin içeriğini zip dosyası olarak kaydedin:
$ cd app/build/intermediates/cmake/universal/release/obj
$ zip -r symbols.zip .
- 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üklemeKod gösterme veya simgeselleştirme dosyası yüklemek için:
- Play Console'u açın.
- Bir uygulama seçin.
- Soldaki menüde Test edin ve yayınlayın > Uygulama paketi gezgini'ni seçin.
- Sağ üst köşedeki seçiciyi kullanarak ilgili yapıyı seçin.
- İndirilenler sekmesini seçip "Öğeler" bölümüne gidin.
- 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ü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.
- Play Console'u açın.
- Bir uygulama seçin.
- Soldaki menüde İzleyin ve geliştirin > Android vitals > Kilitlenmeler ve ANR'ler seçeneğini belirleyin.
- Bir kilitlenme seçin.
- "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.
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.
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 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ı 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.
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:
- Play Console'u açın.
- Bir uygulama seçin.
- Soldaki menüde Test edin ve yayınlayın > Uygulama paketi gezgini'ni seçin
- Sağ üst köşedeki seçiciyi kullanarak ilgili yapıyı seçin.
- İndirilenler sekmesini seçip "Öğeler" bölümüne gidin.
- Yanlış kod gösterme veya simgeselleştirme dosyasının yanındaki sil simgesini tıklayın.
- 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.
Başlamak için Android Geliştiricileri sitesini ziyaret edin.
Evet.
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.