Προς το περιεχόμενο

android & eclipse


VagosM

Προτεινόμενες αναρτήσεις

Για σας δεν μπορώ να καταλάβω γιατί δεν μου τρέχει ο emulator στο eclipse μου βγάζει αυτό το μήνυμα

 

[2012-10-21 17:17:31 - Emulator] PANIC: Could not open AVD config file: C:\Users\Βαγγέλης\.android\avd\Phone.avd/config.ini

 

Αν μπορεί κάποιος να με βοηθήσει θα το εκτιμούσα

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Μάλλον δεν είσαι καλό παλικάρι.

 

Γιατί ???

υπάρχει τρόπος να αλλάξω το μονοπάτι απο το avd manager , έβαλα αλλού το avd αλλά δεν ξέρω πως να αλλάξω το μονοπάτι.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

 

Μάλλον δεν είσαι καλό παλικάρι.

Γιατί ???

υπάρχει τρόπος να αλλάξω το μονοπάτι απο το avd manager , έβαλα αλλού το avd αλλά δεν ξέρω πως να αλλάξω το μονοπάτι.

 

Γιατί; Γιατί το καλό το παλικάρι ξέρει και άλλο μονοπάτι.

  • Like 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δουλεύω σε linux αλλά φαντάζομαι ότι αν αλλάξεις τον κατάλογο που έχεις αποσυμπιέσει το android sdk (βάλτο στο C:\ αντί στον κατάλογο των αρχείων του χρήστη) θα λύσεις το πρόβλημα. Εννοείται ότι μετά την αλλαγή καταλόγου πρέπει να ρυθμίσεις το eclipse.

 

Και πως θα αλλάξω το μονοπάτι?

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημοσ. (επεξεργασμένο)

Δουλεύω σε linux αλλά φαντάζομαι ότι αν αλλάξεις τον κατάλογο που έχεις αποσυμπιέσει το android sdk (βάλτο στο C:\ αντί στον κατάλογο των αρχείων του χρήστη) θα λύσεις το πρόβλημα. Εννοείται ότι μετά την αλλαγή καταλόγου πρέπει να ρυθμίσεις το eclipse.

 

Και σε linux τα avds τα βάζει στο home folder στο φάκελο ~/.android/avd/

 

Άρα δε παίζει ρόλο που έχεις εγκαταστήσει το SDK.

 

Αν μπεις στο φάκελο avd μέσα στο φάκελο android που βρίσκεται στο C:\Users\onoma_xristi

 

θα δεις οτι για κάθε virtual device υπάρχει ένα αρχείο .ini και ένας φάκελος με το ίδιο όνομα + .avd

 

Π.χ. my_device.ini my_device.avd

 

Μέσα στο .ini θα δεις κάτι σαν και αυτό (υποθέτω, δε ξέρω πως είναι στα windows)

 

 

target=android-7

path=C:\Users\username\.android\avd\my_device.avd

 

Βάλε λοιπόν τον φάκελο .avd σε ένα άλλο folder π.χ. C:\myavds\

και άλλαξε το path στο .ini και προσπάθησε να το εκκινήσεις πάλι.

 

Το πρόβλημα είναι βρίσκεται μάλλον στο encoding του αρχείου ini. Οπότε αν έχει μόνο λατινικούς χαρακτήρες στο path θα είσαι ok.

(Υποθέτω πως το αρχείο .ini είναι σε encoding windows-1253 και παίρνει τo path αυτούσιο και προσπαθεί να το χρησιμοποιήσει Όμως το path πρέπει να είναι σε UTF-8 (μιας και το ntfs χρησιμοποιεί UTF-8 για τα ονόματα)*. Έτσι δε "χτυπάνε" σωστά οι Ελληνικοί χαρακτήρες)

 

 

* Τελικά είναι UTF-16 στο ntfs

NTFS allows any sequence of 16-bit values for name encoding (file names, stream names, index names, etc.). This means UTF-16 codepoints are supported, but the file system does not check whether a sequence is valid UTF-16 (it allows any sequence of short values, not restricted to those in the Unicode standard).

Link.png Site: Πηγή

Επεξ/σία από moukoublen
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Το πρόβλημα είναι βρίσκεται μάλλον στο encoding του αρχείου ini. Οπότε αν έχει μόνο λατινικούς χαρακτήρες στο path θα είσαι ok.

(Υποθέτω πως το αρχείο .ini είναι σε encoding windows-1253 και παίρνει τo path αυτούσιο και προσπαθεί να το χρησιμοποιήσει Όμως το path πρέπει να είναι σε UTF-8 (μιας και το ntfs χρησιμοποιεί UTF-8 για τα ονόματα)*. Έτσι δε "χτυπάνε" σωστά οι Ελληνικοί χαρακτήρες)

 

Το πρόβλημα δε μπορεί να είναι στο encoding του ini γιατί το ίδιο το ini είναι αυτό που δεν μπορεί να διαβαστεί.

 

Ακόμα κι αν το .ini ήταν το θέμα, πάλι δε θα μπορεί να ήταν (μόνο) στο encoding το πρόβλημα -- ξέχασες και το άλλο, σημαντικότερο μισό: το utility από το SDK που διαβάζει το .ini. Δεν μπορούμε να υποθέσουμε πως είναι κατάλληλα προετοιμασμένο για να βρει μπροστά του .ini σε οποιοδήποτε encoding μας αρέσει και να το χειριστεί σωστά. Ειδικά στην περίπτωση που π.χ. δεν είναι προετοιμασμένο να χειριστεί σωστά οποιοδήποτε multibyte encoding τότε δεν υπάρχει λύση που να υλοποιείται μέσα από το ini.

 

Επίσης έχεις λάθος όσον αφορά το συσχετισμό του τι κάνει εσωτερικά το NTFS με το encoding του ini, μιας και το πρώτο δε μας αφορά καθόλου γιατί αυτό που έχει σημασία είναι το τι είδους string θέλουν οι library functions (και τελικά οι Win32 API functions) που παίρνουν αυτά τα path. Οι οποίες Win32 API functions έρχονται σε 2 εκδόσεις (που παίρνουν singlebyte και UTF-16), αλλά ούτε αυτό μας αφορά γιατί εάν υποστηρίζονται πολλαπλά encodings στο ini τότε είναι υποχρέωση του emulator να κάνει το αντίστοιχο conversion εσωτερικά.

 

Σκέψου να συνδεόταν το filesystem στο οποίο βρίσκεται το .ini με το encoding του: απλά κάνεις copy όλο το avd σε άλλο filesystem στον ίδιο υπολογιστή και ξαφνικά σταματάει να δουλεύει. Αντίστοιχα, αν είχαν σημασία οι library functions τότε πάλι κάνεις copy το avd σε άλλο λειτουργικό (με το ίδιο filesystem ή και διαφορετικό) και ξαφνικά σταματάει να δουλεύει. Θα μπορούσε και να συμβαίνει, αλλά δε μου ακούγεται πιθανό.

 

Ελπίζω να μην παρεξηγείται ο λόγος που τα έγραψα αυτά. ;)

  • Like 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημοσ. (επεξεργασμένο)

Ελπίζω να μην παρεξηγείται ο λόγος που τα έγραψα αυτά. ;)

Καμία παρεξήγηση. Δεν τίθεται θέμα. Τουλάχιστον σε ο,τι με αφορά δε χρειάζεται να έχεις αυτή την ανησυχία.

 

Τώρα

Επίσης έχεις λάθος όσον αφορά το συσχετισμό του τι κάνει εσωτερικά το NTFS με το encoding του ini, μιας και το πρώτο δε μας αφορά καθόλου γιατί αυτό που έχει σημασία είναι το τι είδους string θέλουν οι library functions (και τελικά οι Win32 API functions) που παίρνουν αυτά τα path. Οι οποίες Win32 API functions έρχονται σε 2 εκδόσεις (που παίρνουν singlebyte και UTF-16), αλλά ούτε αυτό μας αφορά γιατί εάν υποστηρίζονται πολλαπλά encodings στο ini τότε είναι υποχρέωση του emulator να κάνει το αντίστοιχο conversion εσωτερικά.

 

Αφηρημένα το σκεφτόμουν. Μην τυχών καλούνται εν-τέλη από τον emulator launcher (απο τη jre -> στο win32 api κτλ.) οι συναρτήσεις που που θέλουν UTF-16 strings και αυτός δίνει το ο,τι παίρνει απο το ini χωρίς μετατροπή.

(Υποθέτω είπα άλλωστε). Μην τυχών δηλαδή υπάρχει κάποια "αβλεψία" από τον launcher.

 

SOS

Το πρόβλημα δε μπορεί να είναι στο encoding του ini γιατί το ίδιο το ini είναι αυτό που δεν μπορεί να διαβαστεί.

 

Tώρα διάβασα προσεκτικά την πρώτη φράση σου. Δεν έχεις προσέξει κάτι και έτσι έχεις καταλάβει λάθος. (Για αυτό δεν καταλάβαινα γιατί γράφεις τα όσα γράφεις στην τελευταία παράγραφο).

 

Δεν μπορεί να διαβαστεί το config.ini που για να φτάσει σε αυτό διαβάζει το path μέσα από το DeviceName.ini

 

Όπως είπα και πριν για κάθε device φτιάχνονται

  1. ένα αρχείο ini (π.χ. DeviceName.ini) (το βασικό αρχείο ini) και
     
  2. ένα folder (π.χ. DeviceName.avd)(μέσα στο οποίο folder υπάρχουν πολλά πράγματα ένα από αυτά είναι το config.ini)

και τα δύο έχουν το όνομα του device (συνήθως).

 

π.χ. Βασικό ini

C:\Users\Κώστας\.android\avd\DeviceName.ini

 

Αυτό το βασικό ini έχει 2 γραμμές (απ όσα έχω δεί μέχρι στιγμής). Είναι ας πούμε το shortcut το κάθε virtual device.

Με περιεχόμενο:

target=... android platform version

path=... path to folder

 

Από αυτό διαβάζει το path του folder που είναι το virtual device (όλα του τα καλούδια δηλαδή), το οποίο για παράδειγμα είναι

 

C:\Users\Κώστας\.android\avd\DeviceName.avd ( <- που είναι folder)

 

Και σε αυτό το path (που διαβάζει απο το πρώτο ini) θα ψάξει για το config.ini.

 

C:\Users\Κώστας\.android\avd\DeviceName.avd\config.ini

 

Τώρα αυτό το πρώτο ini (το βασικό ini του virtual device - στο συγκεκριμένο παράδειγμα DeviceName.ini) είναι by-default σε utf-8.

 

Και όταν υπάρχουν Ελληνικά στο path που έχει μέσα του σαν γραμμή το πρώτο ini (DeviceName.ini), κάτι στραβώνει και δε μπορεί να το αξιοποιήσει σωστά το Path που διαβάζει απο αυτό. Και σαν πρώτο πρόβλημα δε βρίσκει το config.ini (στα windows και μόνο).

 

 

Σκέψου να συνδεόταν το filesystem στο οποίο βρίσκεται το .ini με το encoding του

 

Προφανώς...

 

EDIT

Λοιπόν έκανα μια δοκιμή. Έφτιαξα ένα χρήστη με Ελληνικά (σήκωσα ενα vm για αυτή τη δουλειά. Μην φτιάχνω χρήστες στο κανονικό μου λειτουργικό χωρίς λόγο :D ). Εγκατέστησα jre και android SDK και έφτιαξα και ένα πρώτο virtual device.

 

Πήγα λοιπόν στο αρχείο ini του device και το αρχείο ήταν (εδώ είναι το περίεργο) σε UTF-8.

 

Το άφησα ως έχει, πήγα να εκκινήσω το device και είχα το ίδιο μήνυμα.

 

 

post-205103-0-32000300-1351008062_thumb.png

 

 

Ας το μετατρέψω λέω σε windows-1253. Κάνω λοιπόν από το notepad++ Convert to ANSI.

 

Και το vd ξεκίνησε μια χαρά.

 

post-205103-0-99458000-1351008115_thumb.png

 

Τώρα όντως το πρόβλημα είναι με το encoding του αρχείου. Δεν έχω την παραμικρή ιδέα του σε πιο επίπεδο λαμβάνει χώρα. Συμβαίνει μόνο με τα Ελληνικά και επειδή σώζει by default το αρχείο σε utf-8.

 

Θα κάνω μια δοκιμή και στο linux με Ελληνικά στο path. Να δω τι γίνεται. Ας το αναφέρει κανείς στη google ως σφάλμα πάντως. :)

 

Έκανα δοκιμή και στο linux.

 

Δεν υπάρχει πρόβλημα να βρίσκεται το virtual device μέσα σε path με Ελληνικά γράμματα και με το βασικό ini να είναι UTF-8

Επεξ/σία από moukoublen
  • Like 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Tώρα διάβασα προσεκτικά την πρώτη φράση σου. Δεν έχεις προσέξει κάτι και έτσι έχεις καταλάβει λάθος. (Για αυτό δεν καταλάβαινα γιατί γράφεις τα όσα γράφεις στην τελευταία παράγραφο).

 

Όπως τα λες. :)

 

Απ' όλη την υπόλοιπη έρευνά σου το συμπέρασμα που βγάζω (εκτός κι αν πάλι μου ξέφυγε κάτι...) είναι ότι

  • το αρχείο σώζεται σε utf-8
  • τα δεδομένα από το αρχείο (το path δηλαδή για το δεύτερο ini) ταΐζονται στη σχετική library function χωρίς πολλά πολλά -- συγκεκριμένα σε Windows που εν τέλει έχει 2 διαφορετικές, καλείται η single-byte εκδοχή στην οποία κάθε ελληνικός χαρακτήρας UTF-8 "μεταφράζεται" σε 2 από τους κινέζικους που βλέπουμε
  • σε linux όλα είναι utf-8 οπότε η αντίστοιχη open() λειτουργεί χωρίς πρόβλημα

Επομένως το android SDK χρειάζεται κάπου ένα patch ούτως ώστε το σχετικό Windows binary να λειτουργεί σωστά όταν το path δεν είναι απλό ASCII. Αν κάποιος θέλει να ασχοληθεί νομίζω η εμπειρία θα είναι χρήσιμη.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Το δοκίμασα με το notepad++ αυτό που είπες αλλά πάλη το ίδιο βγάζει, πφφφ, να δω πως θα κάνω την εφαρμογή για την σχολή.

 

Έκανες το αρχείο ini του virtual device σου με το notepad++ Conver to ANSI και μετά Save και πάλι δεν έτρεξε;

 

Το αρχείο σου πρέπει να λέγεται Phone.ini σε εσένα απ ότι βλέπω από το post σου πάνω.

 

[...]

  • τα δεδομένα από το αρχείο (το path δηλαδή για το δεύτερο ini) ταΐζονται στη σχετική library function χωρίς πολλά πολλά -- συγκεκριμένα σε Windows που εν τέλει έχει 2 διαφορετικές, καλείται η single-byte εκδοχή στην οποία κάθε ελληνικός χαρακτήρας UTF-8 "μεταφράζεται" σε 2 από τους κινέζικους που βλέπουμε

[...]

 

Ναι κάτι τέτοιο πρέπει να γίνεται. Άρχισα να το ψάχνω κατεβάζοντας τον κώδικα των εργαλείων του SDK γενικά.

Μέχρι στιγμής απ όσο είδα το πρόβλημα είναι καθαρά στο emulator.exe (στην αρχή νόμιζα και κοίταζα γενικότερα στον launcher που είναι java πρόγραμμα αλλά αυτός δεν κάνει κάτι άλλο απο το να σηκώσει ένα proccess του emulator δίνοντας σαν όρισμα το συμβολικό όνομα (σκέτο) του device που επιλέγουμε από το ui).

 

O emulator.exe (που είναι το project -ή μέρος του- qemu) είναι γραμμένος σε C.

 

Τέλος πάντων θα δείξει. Αν καταφέρω και βρω κάτι, θα επανέλθω.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...