- Katılım
- 21 May 2023
- Mesajlar
- 475
- Tepki
- 17
- Puan
- 18
Aynı sürüm bir telefonda sorunsuz açılıp diğerinde kapanıyorsa ilk iş “bu marka sorunlu” demek olmamalı. İki cihaz arasındaki onlarca farktan hangisinin önemli olduğunu tahminle değil, çökme anının bıraktığı kayıtla daraltmak gerekir.
İlk aranacak ipucu, istisna veya sinyal adı ile hemen ardından görünen uygulamanıza ait ilk stack satırıdır. Bu ikisi çoğu zaman hangi dosyaya bakacağınızı söyler; tek başına telefon modeli ise yalnızca başlangıç bağlamıdır.
Uygulamanın aniden kapanması bir crash olabilir. Ekranın donup sistemin “yanıt vermiyor” uyarısı göstermesi ANR, içerik gelmeden beyaz kalması ise uygulama çalışmaya devam ettiği hâlde ağ, WebView veya çizim katmanındaki başka bir sorun olabilir.
Bu ayrım önemlidir çünkü farklı belirtilerin kayıtları da farklı okunur. Beyaz ekran için ayrıca forumdaki kapsamı adım adım ayıran rehber yardımcı olur. Burada odak, sürecin beklenmedik biçimde sonlandığı crash kaydıdır.
Android Studio’da etkilenen cihazı ve uygulama sürecini seçin, sorunu yeniden oluşturun ve Logcat sorgusuna şunu yazın:
Komutu başlatın, aynı adımlarla çöküşü yeniden üretin, ardından çıktıda doğru paket adını ve zamanı bulun. Birden fazla cihaz bağlıysa
Aşağıdaki bölüm, Android Developers’ın resmî crash örneğinden kısaltılmış gerçek formattır:
Bu dört satırın anlattığı şeyler şunlar:
En üstteki sistem satırını görüp Android framework’ünü suçlamak kolaydır. Oysa uygulama bir API’ye geçersiz değer göndermiş olabilir. Çağrı zincirini, kendi kodunuzdaki ilk frame’den başlayıp yukarı ve aşağı birkaç satır okuyarak değerlendirin.
Çöken ve çalıştıran cihaz için aynı sürüm ve aynı adımlarla şu bilgileri yan yana yazın:
Android’in Android vitals belgesi, yüksek hata oranıyla RAM, Android sürümü ve işlemci türü gibi özellikler arasındaki olası bağları gösterebildiğini belirtiyor. Play Console’daki crash kümesini uygulama sürümü, Android sürümü ve telefon modeliyle filtrelemek, tek bir kullanıcının ekran görüntüsünden daha sağlam bir yön verir.
Bunlar kesin teşhis değildir. Örneğin bir
Stack satırları
Her yayın sürümünün mapping ve sembol dosyasını o sürümün
Tam cihaz dökümünü yüklemek yerine hata sınıfını, kendi uygulamanıza ait ilk birkaç frame’i, sürüm bilgisini ve cihaz farklarını paylaşın. Token, e-posta, kullanıcı verisi, dosya yolu ve özel sunucu adresi görünüyorsa maskeleyin. Temel geliştirme akışını tazelemek için mobil uygulama geliştirme girişine, hatayı tekrar üretilebilir test adımlarına çevirmek için de veri odaklı yazılım geliştirme rehberine bakabilirsiniz.
Android Studio filtresinin güncel söz dizimi resmî Logcat ekranı belgesinde,
Yardım isterken şu dört şeyi yazmanız çoğu zaman ilk turu çözer: hata sınıfı, uygulamanıza ait ilk frame, çöken/çalışan cihazların Android sürümü ve aynı
İlk aranacak ipucu, istisna veya sinyal adı ile hemen ardından görünen uygulamanıza ait ilk stack satırıdır. Bu ikisi çoğu zaman hangi dosyaya bakacağınızı söyler; tek başına telefon modeli ise yalnızca başlangıç bağlamıdır.
Önce gerçekten crash mi, onu ayırın
Uygulamanın aniden kapanması bir crash olabilir. Ekranın donup sistemin “yanıt vermiyor” uyarısı göstermesi ANR, içerik gelmeden beyaz kalması ise uygulama çalışmaya devam ettiği hâlde ağ, WebView veya çizim katmanındaki başka bir sorun olabilir.
Bu ayrım önemlidir çünkü farklı belirtilerin kayıtları da farklı okunur. Beyaz ekran için ayrıca forumdaki kapsamı adım adım ayıran rehber yardımcı olur. Burada odak, sürecin beklenmedik biçimde sonlandığı crash kaydıdır.
Kaydı en kısa yoldan alın
Android Studio’da etkilenen cihazı ve uygulama sürecini seçin, sorunu yeniden oluşturun ve Logcat sorgusuna şunu yazın:
Kod:
package:mine is:crash
package:mine açık projedeki paketleri, is:crash ise Java/Kotlin veya native uygulama crash kayıtlarını süzer. Komut satırında crash tamponunu zaman, PID ve thread bilgisiyle izlemek için Android’in resmî seçeneklerinin şu birleşimi kullanılabilir:
Kod:
adb devices
adb logcat -b crash -v threadtime
Komutu başlatın, aynı adımlarla çöküşü yeniden üretin, ardından çıktıda doğru paket adını ve zamanı bulun. Birden fazla cihaz bağlıysa
adb -s <cihaz_seri_no> logcat -b crash -v threadtime biçiminde hedefi açıkça seçin. Eski bir kaydı yeni hatayla karıştırmamak için uygulama sürümünü ve olay saatini not edin.Kayıt yoksa' Alıntı:“Bende çalışıyor” teşhis değildir. Sorunu yaşayan sürüm ve koşullar yeniden oluşturulabiliyorsa Logcat açıkken aynı akışı tekrarlayın; yayımdaki sorunlarda Android vitals kaydına bakın.
Dört satırdan nasıl yön çıkar?
Aşağıdaki bölüm, Android Developers’ın resmî crash örneğinden kısaltılmış gerçek formattır:
Kod:
AndroidRuntime: FATAL EXCEPTION: main
Process: com.android.developer.crashsample, PID: 3686
java.lang.NullPointerException: crash sample
at com.android.developer.crashsample.MainActivity$1.onClick(MainActivity.java:27)
Bu dört satırın anlattığı şeyler şunlar:
- FATAL EXCEPTION: main, yakalanmayan hatanın ana thread’de oluştuğunu gösterir.
- Process satırı, kaydın gerçekten aradığınız pakete ait olup olmadığını doğrular.
- NullPointerException, hata sınıfıdır; “neden” için güçlü bir işaret verir ama tek başına çözüm değildir.
- MainActivity.java:27, uygulama kodundaki sınıfı, metodu ve satırı gösterir. Önce kendi paket adınızla başlayan ilk anlamlı frame’i açın.
En üstteki sistem satırını görüp Android framework’ünü suçlamak kolaydır. Oysa uygulama bir API’ye geçersiz değer göndermiş olabilir. Çağrı zincirini, kendi kodunuzdaki ilk frame’den başlayıp yukarı ve aşağı birkaç satır okuyarak değerlendirin.
Yalnız bazı telefonlarda oluyorsa iki kayıt setini karşılaştırın
Çöken ve çalıştıran cihaz için aynı sürüm ve aynı adımlarla şu bilgileri yan yana yazın:
- Uygulamanın
versionNameveversionCodedeğeri; debug, APK veya Play dağıtımı olup olmadığı - Üretici, tam model, Android sürümü ve API seviyesi
- ABI/mimari; özellikle projede C/C++ ya da paketlenmiş
.sokitaplığı varsa - Toplam/boş bellek, ekran boyutu ve yoğunluğu gibi belirgin donanım farkları
- Dil-bölge, koyu tema, izin durumu, ağ türü ve hatayı başlatan kesin kullanıcı adımı
Android’in Android vitals belgesi, yüksek hata oranıyla RAM, Android sürümü ve işlemci türü gibi özellikler arasındaki olası bağları gösterebildiğini belirtiyor. Play Console’daki crash kümesini uygulama sürümü, Android sürümü ve telefon modeliyle filtrelemek, tek bir kullanıcının ekran görüntüsünden daha sağlam bir yön verir.
Hata adı bir hüküm değil, ilk arama yönüdür
- NoSuchMethodError / NoClassDefFoundError: API seviyesi, bağımlılık sürümü veya paketleme farkını kontrol edin. Çağrının cihazın API seviyesinde gerçekten bulunup bulunmadığını doğrulayın.
- UnsatisfiedLinkError: İstenen native kitaplığın ilgili ABI için pakete girip girmediğine ve yüklenen dosya adına bakın.
- Resources$NotFoundException: Dil, ekran yoğunluğu veya başka bir kaynak niteleyicisi için eksik/yanlış kaynak ihtimalini araştırın.
- OutOfMemoryError: Büyük görsel, bitmap, liste ya da native bellek kullanımını; özellikle daha düşük RAM’li cihazda yeniden üretin.
- SecurityException: İzin, manifest bildirimi ve Android sürümüne göre değişen platform kuralını kontrol edin.
- NullPointerException: Stack’teki ilk uygulama frame’inde hangi verinin veya yaşam döngüsü durumunun null olabildiğini izleyin.
Bunlar kesin teşhis değildir. Örneğin bir
OutOfMemoryError yalnızca “telefonun RAM’i az” anlamına gelmez; uygulamanın gereksiz yere bellekte tuttuğu veri asıl neden olabilir.Release kaydı okunmuyorsa önce isimleri geri getirin
Stack satırları
a.b.c gibi anlamsız isimlere dönmüşse R8 küçültmesi devrededir. O sürümle eşleşen mapping.txt olmadan yanlış satırı düzeltmeye çalışabilirsiniz. Android’in R8 sorun giderme belgesi, eşleşen mapping dosyasıyla retrace kullanarak özgün stack trace’in geri alınmasını anlatıyor. Native crash’lerde ise native debug symbols sınıf ve fonksiyon adlarını görünür kılar.Her yayın sürümünün mapping ve sembol dosyasını o sürümün
versionCode değeriyle saklayın. Başka sürümün mapping dosyasıyla açılmış trace güvenilir değildir.Foruma hangi parçayı koymalı?
Tam cihaz dökümünü yüklemek yerine hata sınıfını, kendi uygulamanıza ait ilk birkaç frame’i, sürüm bilgisini ve cihaz farklarını paylaşın. Token, e-posta, kullanıcı verisi, dosya yolu ve özel sunucu adresi görünüyorsa maskeleyin. Temel geliştirme akışını tazelemek için mobil uygulama geliştirme girişine, hatayı tekrar üretilebilir test adımlarına çevirmek için de veri odaklı yazılım geliştirme rehberine bakabilirsiniz.
Android Studio filtresinin güncel söz dizimi resmî Logcat ekranı belgesinde,
adb logcat seçenekleri ise komut satırı belgesinde yer alıyor.Yardım isterken şu dört şeyi yazmanız çoğu zaman ilk turu çözer: hata sınıfı, uygulamanıza ait ilk frame, çöken/çalışan cihazların Android sürümü ve aynı
versionCode kullanılıp kullanılmadığı. Sizdeki kaydın ilk uygulama satırı neyi gösteriyor?Dijital Dünyanıza Yön Veren Pusula