Τρίτη, 12 Μαρτίου 2013

Android Basics: Τι είναι τα log file και σε τι χρησιμεύουν;


Τα λειτουργικά συστήματα είναι σαν τα αεροπλάνα! Πρώτον γιατί μερικά από αυτά "πετάνε" και δεύτερον γιατί διαθέτουν και αυτά το λεγόμενο "μαύρο κουτί" (μα πού τα βρίκω;). Το μαύρο κουτί, είναι μία συσκευή η οποία καταγράφει τα πάντα κατά τη διάρκεια μίας πτήσης και ο λόγος ύπαρξής του είναι να μας πει τι έφταιξε σε μία ενδεχόμενη σύγκρουση (φτου, φτου, φτου, μακριά από μας). Κάτι τέτοιο είναι και τα log file στο Android (και σε όλα τα λειτουργικά συστήματα) και η δουλειά τους είναι να μας ενημερώσουν στο τι φταίει όταν μία εφαρμογή ή όλο το λειτουργικό σύστημα καταρρέει.

Τα log file ως επί των πλείστων είναι απλά αρχεία κειμένου (.txt) και είναι άχρηστα για το μέσο χρήστη, αποτελούν όμως το καλύτερο βοήθημα για έναν developer για να διορθώσει την εφαρμογή ή τη ROM του, όταν αυτή είναι προβληματική. Θα έχετε προσέξει σε διάφορες συζητήσεις στο ίντερνετ, όταν κάποιος ζητάει βοήθεια, να του απαντούν "στείλε μου το log file για να δω τι έγινε". Πού το βρίσκουμε όμως και πώς το στέλνουμε;

Αποθηκεύονται στη διαδρομή "/dev/log" και το κυριότερο από όλα είναι το "main" (logcat). Μέσα σε αυτά θα βρούμε γενικές πληροφορίες όπως το μοντέλο της συσκευής, τη ROM, τον kernel αλλά και τις τελευταίες κινήσεις μας ταξινομημένες σε χρονολογική σειρά. Ο διαμοιρασμός τους θα πρέπει να γίνεται με προσοχή καθώς περιέχουν προσωπικά δεδομένα τα οποία δεν είναι για τα μάτια όλων, δημοσιεύοντας το log μας όμως δε σημαίνει ότι κάποιος μπορεί να εξάγει πληροφορίες για τους κωδικούς ασφαλείας, να διαβάσει τα μηνύματά μας και άλλα τέτοια.

Όταν λοιπόν κρασάρει μια εφαρμογή, μπορούμε να άμεσα να πάρουμε το log file από τη συσκευή μας και να το στείλουμε στον developer για να δει πού βρίσκεται το σφάλμα. Αυτό γίνεται συνδέοντας τη συσκευή μας σε έναν υπολογιστή με εγκατεστημένο το Android SDK και δίνοντας, μέσα από το φάκελο του ADB, την εντολή:
adb shell logcat > log.txt

ή μέσω ενός Terminal Emulator με την εντολή:
logcat /sdcard/log.txt

Φυσικά υπάρχουν και ευκολότεροι τρόποι από αυτόν, ένας από τους οποίους είναι το Log Collector. Πρόκειται για μία εφαρμογή η οποία αντιγράφει το log file και το αποστέλλει με όποιον τρόπο θελήσουμε εμείς (email, SMS, barcode και άλλα). Επιλέγοντας για παράδειγμα το Log Collector και στη συνέχεια την εφαρμογή του Gmail, το log file επικολλάται στο email και το μόνο που μένει είναι να γράψουμε τη διεύθυνση του παραλήπτη. Θα βρείτε το Log Collector δωρεάν στο Play Store αλλά και στην επίσημη σελίδα του.


Εκτός από το "main" υπάρχουν και πιο εξειδικευμένα log τα οποία περιέχουν πιο συγκεκριμένες πληροφορίες για μέρη του συστήματός μας, όπως τον πυρήνα (επικοινωνία του Android με τα chip της συσκευής μας) και το radio (επικοινωνία της συσκευής με δίκτυα όπως WiFi, δίκτυο κινητής τηλεφωνίας και άλλα). Αυτά εξάγονται με επίσης εύκολο τρόπο, με τις παρακάτω εντολές:

μέσω ADB:

Radio
adb logcat -b radio > logcat_radio

Kernel (πυρήνας)
adb shell su -c dmesg > dmesg.log

Last kmsg (το log του πυρήνα, από την τελευταία επανεκκίνηση)
adb shell su -c "cat /proc/last_kmsg" > last_kmsg.log


μέσω Terminal Emulator:

Radio
logcat -b radio > /sdcard/logcat_radio

Kernel (πυρήνας)
su -c dmesg > /sdcard/dmesg.log

Last kmsg (το log του πυρήνα, από την τελευταία επανεκκίνηση)
su -c "cat /proc/last_kmsg" > /sdcard/last_kmsg.log

Ακόμα και αυτά όμως μπορούμε να τα εξάγουμε χρησιμοποιώντας απλές εφαρμογές και στην προκειμένη περίπτωση το SysLog που έχει δημιουργηθεί για αυτό το σκοπό και μπορούμε να το κατεβάσουμε δωρεάν από το Play Store.


Για εμάς λοιπόν μπορεί να μη σημαίνει τίποτα, αλλά η αποστολή του log στους developer είναι ιδιαίτερα σημαντική για την εξέλιξη και την αποσφαλμάτωση των εφαρμογών τους. Είναι κρίσιμο να τους βοηθήσουμε με αυτό τον τρόπο να βελτιώσουν τα δημιουργήματά τους, καθώς εμείς θα απολαύσουμε τους καρπούς της βελτιωμένης δουλειάς τους οπότε σκεφτείτε το σοβαρά την επόμενη φορά που θα σας ζητηθεί.

Θα ήθελα να ευχαριστήσω ιδιαίτερα τα μέλη της κοινότητας Android in Greece στο Google+, +Dimitris Comple και +Mhden Arnhtiko για την ιδέα και τη βοήθεια στη συγγραφή του άρθρου. 

15 στο: "Android Basics: Τι είναι τα log file και σε τι χρησιμεύουν;"
  1. Άρχισες ξανά να γράφεις Android Basics; Τέλεια!!!!
    Το πρώτο άρθρο του Dr. Android που διάβασα ήταν ένα από τα Android Basics! Μάλιστα πρέπει να ήταν εκείνο για τον bootloader... Ήταν η περίοδος που θα έκανα τα πρώτα "πείραματά" μου στο Android. Δώσε τα φώτα σου, γιατρέ! ;)

    ΑπάντησηΔιαγραφή
    Απαντήσεις
    1. Δε σταμάτησα ποτέ απλά έρχονται σιγά σιγά τα θέματα. Αν έχεις να προτείνεις κάτι, ελεύθερα!

      ΥΓ. Έχω άλλο ένα στα σκαριά.

      Διαγραφή
  2. Μάλιστα. Είχες αργήσει αρκετά να γράψεις ένα τέτοιο άρθρο και νόμιζα πως η ενότητα αυτή είχε κάνει τον κύκλο της. Γι αυτό υπέθεσα εσφαλμένα...

    Να προτείνω; Χμμμ... Δεν θα προτείνω ακριβώς, μία διευκρίνηση θέλω γιατί δεν έχω καταλάβει ακόμα κάτι. Ήθελα καιρό να ρωτήσω, αλλά φοβόμουν μην μου πεις "φύγε από δω παιδάκι μου, ασχολείσαι με το Android και δεν ξέρεις τα βασικά! Μας κοροϊδεύεις;" :P
    Τέλος πάντων οι απορίες μου είναι οι εξής: Τι είναι το odexe και τι το deoxede; Ποιά είναι η διάφορα τους; Ποιές ROM είναι καλύτερες, οι odexe ή οι deoxede; Τι είδους αρχεία είναι και που βρίσκονται κρυμμένα;

    ΑπάντησηΔιαγραφή
    Απαντήσεις
    1. Σε έχω καλυμμένο:

      http://www.doctorandroid.gr/2012/09/easy-odex-your-rom.html

      Διαγραφή
    2. Ωραίος!!!!!!
      Πως μου ξέφυγε τέτοιο άρθρο...

      Διαγραφή
  3. Να προτείνω εγώ. Πως παίρνουμε αντίγραφο από τη ροομ και των κερνελ που έχει το τηλέφωνο μας;;; Πολύ χρήσιμο όταν κάνεις πειράματα ;-)

    ΑπάντησηΔιαγραφή
    Απαντήσεις
    1. Ο καλύτερος τρόπος είναι να κάνεις ένα backup μέσω recovery. Δεν υπάρχει πιο αξιόπιστος τρόπος όταν κάνουμε πειράματα.

      Διαγραφή
    2. ναι αλλά για να κάνω ροοτ πρέπει να αλλάξω 2 φόρες κερνελ, αυτό αλλάζει κάτι. Π.χ. η συσκευή ενώ είναι ελληνική να φαίνεται σαν να είναι γερμανική, η κάτι άλλο.

      Διαγραφή
    3. Κατάλαβα τι εννοείς. Ο kernel είναι το αρχείο boot.img σε μία ROM αλλά δε νομίζω να μπορεί να εξαχθεί από μία υπάρχουσα εγκατάσταση. Θα το ψάξω πάντως.

      Διαγραφή
  4. Βέβαια καλά είναι να έχουμε backup πριν αρχίσουμε αυτά τα πειράματα

    ΑπάντησηΔιαγραφή
  5. Εχω πρόβλημα και εγώ με την σελίδα του ιντερνετ με κρασάρει πολλές φορές ποιόν αποστολέα να βάλω ??

    ΑπάντησηΔιαγραφή
    Απαντήσεις
    1. Δώσε μερικές πληροφορίες ακόμα. Τι προσπαθείς να κάνεις;

      Διαγραφή
    2. Ποιός είναι ο developer ???θέλω να του στείλω μνμ σχετικά όταν είμαι στο ίντερνετ με πετάει έξω έχω κατεβάσει τα προαναφερθείς προγράμματα απο πάνω

      Διαγραφή
    3. Τον developer τον γράφει στο Play Store και έχει email επικοινωνίας.

      Διαγραφή