Unity Android Oyunlarınızı Debug Etmek

Yayınlandı: 13 Ekim 2015 yasirkula tarafından Oyun Tasarımı, UNITY 3D içinde

Hepinize merhabalar,

Unity‘de oyun tasarlarken bol bol Debug.Log kullanır, nerede ne olduğunu veya bir hatanın neyden kaynaklandığını bu şekilde anlamaya çalışırım. Oyunu Android cihazda test ederken de bu log’lara erişebilmek ve(ya) Unity’nin verdiği exception’ları görebilmek oldukça büyük önem arz edebiliyor. Bunun için kullanabileceğimiz birden çok yöntem bulunmakta. Bu derste bu yöntemleri göreceğiz.

Başlamadan önce tamamlamanız gereken birkaç adım var:

  • cihazınızın Geliştirici Seçenekleri menüsünden USB hata ayıklama‘yı aktifleştirin (eğer geliştirici seçenekleri sizde yoksa internette “Android geliştirici seçeneklerini aktif etme” diye arama yapabilirsiniz)
  • cihazı USB kablo ile bilgisayarınıza bağlayın.
  • Android SDK Manager‘da Google USB Driver‘ın kurulu olduğundan emin olun:
  • eğer hata almadan Build&Run yapabiliyorsanız her şey tamamdır. Aksi taktirde cihazınızın güncel USB sürücüsünü indirip kurmanız gerekebilir

Artık log’larımızı görmeye hazırız! Log’ları görmek için birden çok alternatif yol bulunmakta:

1) Unity 2019 ve Sonrasında Android Logcat Package’ını Kullanmak

Unity’nin geliştirdiği Android Logcat package’ını edinmek için öncelikle Window-Package Manager yolunu izleyin ve gelen listeden “Android Logcat“i seçip sağ alttaki Install butonuna tıklayın. Kurulum tamamlandıktan sonra, Window-Analysis-Android Logcat yolunu izleyerek logcat penceresini açabilirsiniz (oyunu Android’e Build&Run yaptığınızda bu pencere otomatik olarak açılır):

Eğer cihazınız USB ile bilgisayara bağlı olduğu halde log’larını göremiyorsanız, yukarıdaki Auto Run‘ın seçili olduğundan emin olup onun sağındaki yerden cihazınızı seçebilirsiniz (bir cihaz seçili değilken No device yazar). Sadece açık olan bir uygulamanın log’larını görmek için, No Filter‘a tıklayıp uygulamanızı listeden seçebilirsiniz; ancak sonunda [Exited] yazanlar, uygulamanızın kapatılmış eski oturumlarının log’larıdır, yanlışlıkla onları seçmeyin.

Sadece belli tag’e sahip log’ları görmek için (örneğin AdMob’un log’ları Ads tag’ine sahiptir), Tag sütununa sağ tıklayıp Tag Control… seçeneğini seçin:

Gelen penceredeki boş kısma istediğiniz tag’i (mesela Ads) girip ADD butonuna tıklayın. Ardından Tag sütununa tekrar sağ tıklayıp, yeni oluşturduğunuz tag’i seçin. Böylece artık sadece o tag’e sahip log’lar gözükecek. Yine tüm log’ları görmek için No Filter seçeneğini seçebilirsiniz.

2) adb logcat

Yapmanız gereken şey, Android SDK’yı kurduğunuz yerdeki platform-tools klasörüne gitmek (C:\Program Files (x86)\Android\android-sdk\platform-tools). Bu klasörde normal şartlarda adb.exe dosyası olması lazım, yoksa sebebini ben de bilmiyorum. Şimdi klavyeden Shift tuşuna basılı tutarken ve hiçbir dosya seçili değilken klasörde boş bir yere sağ tıklayın ve “Komut penceresini burada aç” seçeneğini seçin (Windows 10’da PowerShell penceresini buradan açın):

resim2

Gelen komut penceresine “.\adb logcat -s Unity” (tırnaksız) yazın. Artık Unity oyununuzu cihazınızda çalıştırdığınızda oyuna dair tüm log’lar burada gözükecek:

resim3

Logcat’i durdurmak için CTRL+C yapabilirsiniz. Burada bilmeniz gereken bir nokta şu ki; adb logcat komutunu çalıştırdığınızda belki 10-20 dakika önce alınmış log’ları da görürsünüz çünkü bu log’lar hemen temizlenmez ve bir süre cihazda tutulurlar. Kafa karışıklığını önlemek amaçlı, cihazdaki log’ları tamamen temizlemek isterseniz konsola “.\adb logcat -c” yazabilirsiniz.

NOT: AdMob log’larını görmek için “.\adb logcat -s Ads” yazın. Cihaza gelen tüm log’ları (Unity ile alakalı veya değil) görmek için de sadece “.\adb logcat” yazın.

NOT2: Windows 10 ve üzerinde, logcat komutunun sonuna “-v color” eklerseniz, log’lar renkli bir şekilde görünürler (hatalar kırmızı, diğer log’lar mavi/yeşil/beyaz vb.). Örneğin: “.\adb logcat -s Unity -v color

3) Android Studio

Android Studio’yu açın ve View-Tool Windows-Logcat yolunu izleyin. Şu anda cihaza gelen tüm log’ları Logcat penceresinde göreceksiniz. Sadece Unity ile alakalı log’ları görmek için Logcat penceresinin en sağ üstündeki butona tıklayın ve “Edit Filter Configuration” yolunu izleyin:

Artık sadece Unity’nin log’larını göreceksiniz. Ancak diyelim ki sadece AdMob’un log’larını görmek istiyorsanız o zaman “Log Tag” olarak Ads girin.

4) Oyun İçi Debug Konsolu

Bu plugin ile herhangi bir araç kullanmadan direkt oyun içerisinden log’ları görmeniz mümkün. Detaylar için sizi şuraya alayım: https://yasirkula.com/2016/06/18/unity-oyun-ici-debug-konsolu-ui-sistemi-ile/

Sonraki derste görüşmek üzere!

yorum
  1. Mustafa dedi ki:

    https://www.hizliresim.com/r4euid0 uygulamayı bulid and run yapıp usb ile telefona bağladım oyun yükleniyor açıldıgı an oyundan atıyor hatayı baktım ama çözumu bulamadım acaba neden dırek atıyor oyundan

  2. Ahmet dedi ki:

    Hocam reklamların gösterilmeme sebebini anlayabilmek için adb logcat kullanacağım. Bunun için Android Studio’ yu mu kurmam gerekiyor. (Android SDK Manager‘da Google USB Driver‘ın kurulu olduğundan emin olun)

    • yasirkula dedi ki:

      Build&Run yapabiliyorsanız gerek yok. Aksi taktirde Android SDK Manager’dan Google USB Driver’ı kurmanız lazım ve SDK Manager da Android Studio ile geliyor.

      • Ahmet dedi ki:

        Build&Run yapamıyorum. Hata veriyor. Anlaşılan Andorid Studio’yu kuracağız. Teşekkür ederim

      • yasirkula dedi ki:

        Telefonunuzun Geliştirici Modu açık olmalı ve USB Hata Ayıklama ayarı aktif olmalı. Bunlar olmadan Build&Run çalışmaz.

  3. destekverblog dedi ki:

    https://hizliresim.com/AtXuGB selamlar , oyunun neden çöktüğüne dair sadece tek yöntemim budur. Ancak monitor adlı dosyayı açınca çıkan hata budur. 6binTL reklam için biriktirdiğim para bulunuyor 😦 ve build sonrası oyun açılmıyor. Çıldırmak üzereyim. Lütfen, oyun android’i yüksek telefonlarda açılıyor. Düşük 32 bit telefonlarda anında çökme yaşanıyor …
    Bu konudaki bütün testleri yaptım hiç biri işe yaramadı 😦

    Çalışabilir ingilizce kaynak öneriniz varmıdır?

    • destekverblog dedi ki:

      armv7 ve 64 tiklidir. Şu logcat’i bi türlü çalıştıramadım 😦
      sizden yardım bekliyorum

    • yasirkula dedi ki:

      monitor dosyası ile bir işiniz yok, onu niye açmaya çalıştığınızı anlamadım. “logcat kullanımı” şeklinde arama yaparak başka kılavuzlar da bulabilirsiniz, umarım o şekilde sorunu çözersiniz.

  4. Emrullah Ertaş dedi ki:

    Hocam merhabalar – 2019 LTS sürümü kullanıyorum. Oyun sorunsuz şekilde build alıp apk dosyasını kuruyorum. Ancak oyun sahnesine geçiş yaptığı an, oyundan atıyor çökme yaşanıyor.

    Hangi yöntemi önerirsiniz? Sebebini öğrenemedim gitti. Hangi sebepten dolayı çöktüğünü bilmiyorum (Admob yüklü değil). Bu yöntemi önerirmisiniz? Lütfen cevap bekliyroum teşekkürler

    Kullandığım sürüm : 2019 günel TLS sürümü – kullandığım SDK JDK ve NDK : Unity’nin indirdiği

    • yasirkula dedi ki:

      1. yöntemi kullanabilirsiniz. Oyun çöktüğünde, crash kelimesi içeren uzunca bir log belirmeli, oradaki hataya bakmanız lazım. Eğer crash 1. yöntem ile gözükmüyorsa, adb logcat ile görebilirsiniz. Ancak “.\adb logcat -s Unity” komutu yerine “.\adb logcat” komutunu yazmanız lazım.

      • destekverblog dedi ki:

        hocam bunları çıktı doğru mu acaba? Kontrol edebilir misiniz?

        06-27 15:05:34.647 811 1069 W InputDispatcher: channel ‘2d627f8 com.OLGames.ManClassic/com.unity3d.player.UnityPlayerActivity (server)’ ~ Consumer closed input channel or an error occurred. events=0x9

        06-27 15:05:34.861 811 4422 W ActivityManager: Scheduling restart of crashed service com.google.android.gms/.checkin.CheckinApiService in 21386ms

        06-27 15:05:34.876 811 2143 W ActivityManager: Scheduling restart of crashed service com.google.android.gms/com.google.android.location.internal.server.GoogleLocationService in 67064ms

        06-27 15:05:34.877 811 2143 W ActivityManager: Scheduling restart of crashed service com.google.android.gms/.tron.CollectionService in 77064ms

      • yasirkula dedi ki:

        Benim şimdiye kadar gördüğüm crash mesajları böyle olmuyor, --------- beginning of crash ile başlayan çok daha detaylı log’lar oluyor.

  5. atayomer3078 dedi ki:

    Eski projeyi bir daha açtım, build butonu yok.
    yardımcı olabilir misiniz ? Playstore’a yükledikten sonra bu hale geldi, hem build butonu görünmüyor, hemde playstore kısmını seçemiyorum.
    JPG link: https://drive.google.com/open?id=15TlkQeisULTY7F0LRrlprsyMWruDMik8

  6. rustem dedi ki:

    YA üstad sen Kralsın Valla bak emeğine sağlık. Forumlarda hep senin adın geçiyor unity hakkında ellerine sağlık

  7. ibrahim altun dedi ki:

    hocam iyigunler build run yapınca hata aldım güncel usb surucusunu nasıl kurabilirim hatalarım:

    Error building Player: UnityException: Couldn’t find Android device
    No Android devices found. If you are sure that device is attached then it might be USB driver problem, for details please check Android SDK Setup section in Unity manual.

    • yasirkula dedi ki:

      Eğer Android SDK’nızda Google USB Driver kurulu değilse kurun. Aksi taktirde, telefonu USB ile bilgisayara bağladıktan sonra, telefon farklı USB modları seçmenize izin veriyorsa (“Medya aygıtı olarak bağlan”, “Şarj et”, “Depolama aygıtı olarak bağlan” vb.) değişik USB modları ile bağlanmayı deneyin. En kötü ihtimalle, google’a telefonunuzun modelini ve “usb driver” yazıp gelen sonuçları inceleyin.

  8. Baki dedi ki:

    Yasir uygulamada test reklamlarının gösterilip uygulama ID reklamlarının gösterilmemesi normal mi? Yani artık reklamlar uygulamamız mağazalarda yayınlandıktan sonra mı gösteriliyor?
    ( Unutmadan, verdiğin bilgiler için teşekkür ederim.. )

    • yasirkula dedi ki:

      Normal değil, test modunu kapattıysanız/test modu ile alakalı kodları sildiyseniz artık normal reklamlar görmeniz lazım.

      • Baki dedi ki:

        Test kodlarını yorum satırına aldım ama değişiklik yok. Araştırmaya devam teşekkürler tekrardan. Bu arada Android Studio logcat çıktısı ise –>
        05-11 17:19:27.188 2025-31265/? W/Ads: App does not have the required permissions to get location
        05-11 17:19:27.248 2025-32201/? I/Ads: SDK version: falanfilan
        05-11 17:19:27.498 32033-32033/? I/Ads: Ad failed to load : 3
        05-11 17:19:27.498 32033-32033/? D/AdsUnity: Calling destroy() on Android
        05-11 17:19:36.448 32033-32033/? D/AdsUnity: Calling loadAd() on Android
        05-11 17:19:36.458 32033-32033/? I/Ads: Use AdRequest.Builder.addTestDevice(“falanfilan”) to get test ads on this device.
        05-11 17:19:36.488 32033-32033/? D/AdsUnity: Calling hide() on Android
        05-11 17:19:36.488 32033-32033/? D/AdsUnity: Calling show() on Android
        05-11 17:19:36.548 2025-32194/? W/Ads: App does not have the required permissions to get location
        05-11 17:19:36.618 2025-32201/? I/Ads: SDK version: falanfilan
        05-11 17:19:36.878 32033-32033/? I/Ads: Ad failed to load : 3
        05-11 17:19:36.878 32033-32033/? D/AdsUnity: Calling destroy() on Android

      • yasirkula dedi ki:

        “Ad failed to load : 3” satırları, sunucuda reklam olmadığını söylüyor. Yani kodunuz doğru ama sadece sunucuda sunulabilecek bir reklam bulunmuyor gibi duruyor. Özellikle rewarded reklamlar konusunda Türkiye’den çok reklam veren firma yok gibi duruyor çünkü Admob’un rewarded reklam havuzu burada maalesef hep kısıtlı.

      • Baki dedi ki:

        Evet evet, ama uygulamamda sadece banner ve interstitial var. Belki de önlem amaçlı uygulamayı hedeflediğimiz platforma linklememiz gerekiyordur artık. Bilemedim de bulamadım da. Teşekkürler desteğin ve yorumun için.

Cevap Yazın

Bu site, istenmeyenleri azaltmak için Akismet kullanıyor. Yorum verilerinizin nasıl işlendiği hakkında daha fazla bilgi edinin.