Χρησιμοποιώντας το Logcat για να λύσουμε προβλήματα στο Android

Logcat Android Development

Αφορμή για το συγκεκριμένο άρθρο είναι το κρασάρισμα της εφαρμογής Google Maps που μου έτυχε σε χθεσινό δρομολόγιο πηγαίνοντας για Ραφήνα.

Θα αναφερθώ στο πώς, χρησιμοποιώντας το logcat, κατάφερα να εντοπίσω το πρόβλημα, και να το διορθώσω.

Για να χρησιμοποιήσουμε το logcat πρέπει να ενεργοποιήσουμε το Debugging από τα Developer Options, αλλά και να εγκαταστήσουμε τα απαραίτητα εργαλεία στον υπολογιστή μας.

Η διαδικασία για τους χρήστες Windows έχει αναφερθεί στα πρώτα βήματα εδώ, (περιλαμβάνει κατέβασμα και εγκατάσταση των εργαλείων χειροκίνητα, ορισμό του PATH, και εγκατάσταση adb drivers), ενώ οι χρήστες *Ubuntu έχουν πολύ πιο εύκολη δουλειά και αρκεί να δώσουν σε τερματικό την παρακάτω εντολή.

sudo apt-get install android-tools-adb

Για να δούμε το Output του logcat δίνουμε:

adb logcat

Με το Logcat να τρέχει ξαναέτρεξα την εφαρμογή Google Maps για να δω τα Errors που θα καταγραφούν.

Logcat Android Development

E/AndroidRuntime(24812): FATAL EXCEPTION: main

E/AndroidRuntime(24812): Process: com.google.android.apps.maps, PID: 24812

E/AndroidRuntime(24812): java.util.MissingResourceException: No 3-letter language code for locale: zz_ZZ

E/AndroidRuntime(24812): at java.util.Locale.getISO3Language(Locale.java:1136)

Η εφαρμογή λοιπόν "χτυπάει" στην java.util.Locale.getISO3Language η οποία χρησιμοποιείται για να επιστρέψει ένα Language Code: 3 γράμματα τα οποία αντιστοιχούν σε κάθε γλώσσα κατά ISO 639-2/T . Π.χ. για γλώσσα συσκευής Ελληνικά, η getISO3Language() θα επιστρέψει ell.

Το MissingResourceException στην ουσία μου λέει ότι "λείπει κάτι". Συγκεκριμένα για το Locale που έχω επιλέξει στην συσκευή μου (zz_ZZ) η getISO3Language() δεν βρίσκει να μου επιστρέψει τον κωδικό της γλώσσας στο οποίο αντιστοιχεί.

Για τις ανάγκες κάποιων δοκιμών είχα επιλέξει ως γλώσσα της συσκευής μου "[Developer] Accented English (zz_ZZ)" η οποία είναι μία "ανύπαρκτη" γλώσσα που είχε δημιουργήσει εικονικά η Google για δοκιμές προγραμματιστών και είναι ορισμένη μόνο στο aapt.

Οπότε είναι λογικό κατά ISO να μην "υπάρχει" αυτή η γλώσσα (το οποίο επιβεβαίωσα ελέγχοντας και το uloc.cpp στον κώδικα του Android).

Η λύση του προβλήματος λοιπόν ήταν υπερβολικά εύκολη: Να ξαναγυρίσω την γλώσσα της συσκευής μου σε κάποια "υπαρκτή" (English United States βάζω, για να παίζει σωστά και το Google Now), οπότε και τα Google Maps ξαναέπαιξαν κανονικά.

Ελπίζω να σας έδωσα μία πρώτη ιδέα του πόσο διευκολύνει την ζωή μας το Logcat, και πώς μας επιτρέπει να καταλάβουμε (και συνεπώς να λύσουμε) τυχόν προβλήματα που αντιμετωπίζουμε.

Μπορώ να τολμήσω να πω, ότι το logcat κάνει το troubleshooting στο Android, παιχνιδάκι.

Και ένα τελευταίο tip, οι χρήστες Linux έχουν και το πλεονέκτημα ότι μπορούν πανεύκολα να κάνουν pipe το περιεχόμενο του logcat στο grep και να φιλτράρουν άμεσα το output. Π.χ. adb logcat | grep FATAL

Logcat Android Development

aByte