1/11/12

Εξαναγκαστική μεταφορά App στην κάρτα SD

Η δυνατότητα APP2SD εμφανίστηκε με το Android 2.2 και επιτρέπει την μεταφορά του μεγαλύτερου μέρους μιας εφαρμογής του κινητού στην κάρτα SD για εξοικονόμηση χώρου. Μια αρκετά πρακτική λειτουργία, ιδιαίτερα για τα μοντέλα με περιορισμένο εσωτερικό χώρο. Δυστυχώς όμως για να λειτουργήσει θα πρέπει να έχει ενεργοποιηθεί από τον δημιουργό της εφαρμογής. Κάτι που δεν ισχύει πάντα και ενοχλεί όταν ο εσωτερικός χώρος του κινητού έχει σχεδόν τελειώσει. Σε αυτές τις περιπτώσεις υπάρχει βέβαια μια τελευταία δυνατότητα να εξαναγκαστεί η μεταφορά μιας εφαρμογής στην κάρτα SD ακόμη και αν δεν έχει ξεκλειδωθεί η δυνατότητα από τον δημιουργό της.

Ο παρακάτω οδηγός αναφέρεται σε Linux αλλά η διαδικασία για Windows είναι παρόμοια με την διαφορά αντί του Konsole του Linux χρησιμοποιείται το command promt των Windows.

Θα χρειαστούν:
  • Το Android Debug Bridge (adb) που αποτελεί μέρος του Android SDK (Κατέβασμα εδώ)
  • Καλώδιο USB για σύνδεση του κινητού με τον υπολογιστή
  • Βασικές γνώσεις για το άνοιγμα και αλλαγή φακέλων στο Konsole
  • Ενεργοποίηση της λειτουργίας USB debugging (εντοπισμός σφαλμάτων) στο κινητό
Προετοιμασία:

Μετά το κατέβασμα και αποσυμπίεση του Android SDK χρειάζεται να φορτωθεί το Android SDK Manager που ενημερώνει το SDK και κατεβάζει επιπλέον εργαλεία. Αυτό μπορεί να γίνει με την εκτέλεση του "android" που βρίσκεται στον φάκελο "tools". Αυτό που χρειαζόμαστε είναι τα "Android SDK Platform-tools". Αφού κατεβούν, στον φάκελο "platform-tools" θα βρίσκεται πλέον το αρχείο "adb" που χρειαζόμαστε.

Εκτέλεση:

Αφού συνδέσουμε το κινητό με τον υπολογιστή, ανοίγουμε απευθείας το Konsole (ή μεταφερόμαστε)  στο φάκελο platform-tools. Από εκεί δίνουμε την εντολή:

adb shell pm set-install-location 2

Αυτό που μόλις κάναμε είναι να δώσουμε την εντολή για να οριστεί ως χώρος εγκατάστασης των εφαρμογών η κάρτα SD. Υπάρχουν τρεις δυνατότητες που αντιστοιχούν στον αριθμό που γράφουμε μετά το set-install-location:

0  σημαίνει αυτόματη επιλογή τοποθεσίας εγκατάστασης από το android
1  σημαίνει εξαναγκασμός εγκατάστασης στην εσωτερική μνήμη
2  σημαίνει εξαναγκασμός εγκατάστασης στην εξωτερική μνήμη (δηλαδή SD)

Πλέον κάθε καινούργια εγκατάσταση θα γίνεται εξαναγκαστικά στην κάρτα SD. Αλλά πέρα από αυτό έχουμε ακόμη μία χρήσιμη παρενέργεια: οι περισσότερες από τις εφαρμογές που πριν δεν μπορούσαν να μεταφερθούν στην κάρτα SD πλέον μπορούν! Γράφω "οι περισσότερες" γιατί ακόμη και με αυτήν την εντολή εφαρμογές συστήματος και κάποιες άλλες συνεχίζουν να μην μπορούν να μεταφερθούν, αλλά τις περισσότερες φορές δεν είναι αυτές που χρησιμοποιούν πολύ χώρο.  Η μεταφορά μπορεί να γίνει από τις Ρυθμίσεις > Εφαρμογές στο αντίστοιχο παράθυρο με τις πληροφορίες τις κάθε εφαρμογής. Να έχουμε κατά νου πως widgets αυτά καθ'αυτά ή τα widget που παρέχονται από εφαρμογές θα λειτουργούν μόνο όταν βρίσκονται στην εσωτερική μνήμη. Επίσης αν μετά την μεταφορά κάποια εφαρμογή εμφανίζει προβλήματα, τότε ίσως χρειαστεί να επιστρέψει πάλι στην εσωτερική μνήμη για να λειτουργεί κανονικά. Πάντως, ως τώρα εφαρμογές όπως facebook, flashplayer, Google Drive, Google Reader κτλ. λειτουργούν κανονικά μετά την μεταφορά στην SD χωρίς κανένα πρόβλημα. 

Στις εικόνες πάνω φαίνεται η διαφορά μετά την εντολή set-install-location 2

Μετά την μεταφορά των εφαρμογών στην κάρτα SD συνιστώ να ξανά δώσετε την εντολή αυτήν την φορά με set-install-location 0 για να επιστρέψει η συσκευή στην αρχική της κατάσταση ώστε να μην υπάρχουν πιθανά προβλήματα αργότερα. Τέλος αν κατά την εκτέλεση της εντολής εμφανιστεί κάποιο σφάλμα τύπου "insufficient perimissions", η εντολή:

./adb kill-server

και μετά αυτή (και οι ακόλουθες) εντολή με root δικαιώματα:

./adb start-server

μπορεί να βοηθήσει για να εκτελεστεί ακόλουθα η εντολή για το set-install-location χωρίς προβλήματα.

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

Και κάτι ακόμη:

Η εντολή μπορεί να έχει μικρές διαφοροποιήσεις ανάλογα το μοντέλο του κατασκευαστή του android. Η παραπάνω εντολή για παράδειγμα ισχύει για συσκευές της Sony ενώ για Samsung  μοντέλα η εντολή είναι διαφορετική στο μέρος  setInstalLocation. Σε κάθε περίπτωση η εντολή adb shell --help εμφανίζει όλες τις εντολές που μπορεί να δεχτεί η συσκευή.