Ráktalicska

… hogy görbíti a teret…

Brickelt Androidos telefon életre lehelése

Írta JonC Ekkor: 2014. június 4.

Most hogy leírtam a post címét már elkövettem egy hibát: aki azért tévedt ide, hogy egy átfogó tutorial-t vár minden helyzetre azt ki kell hogy ábrándítsam: velem történt egy konkrét eset a múlt héten, ami hasznos lehet mások számára is, és amelyet most részletezni fogok, hátha más is tanul belőle – de ez nem lesz gyógyír minden helyzetre. Aki mégis ilyesmire kíváncsi, annak javaslom ezen oldal meglátogatását – nekem is tudott segíteni, legalábbis egy bizonyos pontig.

De sajnos csak addig, ugyanis egy viszonylag speciális helyzetben találtam magam: múlt hét pénteken mindenféle előjel nélkül egyszercsak megdöglött a telefonom, de durván. Azt csinálta, hogy melóban még működött, rá is küldtem két szoftverfrissítést, ámde mire hazaértem már kikapcsolt állapotban halásztam elő a zsebemből. Indítottam volna el, sikeresen bootloop-ba került (azaz csak ment körbe-körbe a betöltést jelző animáció mindenféle eredmény nélkül). Tudtam, hogy erre megoldás lehet a teljes wipe/factory reset (azaz minden adat – appok, telefonszámok, SMS-ek törlése a telefonról), de aztán rádöbbentem, hogy nincs minden kontaktom szinkronizálva a Google fiókomban. Persze joggal merülhet fel a kérdés, hogy miért vagyok ilyen hülye, erre nem is nagyon tudok válaszolni – a lényeg, hogy nem engedhettem meg magamnak azt a luxust, hogy hagyom mindet veszni. Belegondolva ha mondjuk már akkor tudom, hogy mit fogok szopni ezzel lehet hogy hagytam volna elenyészni őket a /dev/null-ban…

Annyi szerencsém azért volt, hogy – mivel pár hete cseréltem SD-kártyát, és elővigyázatos próbáltam lenni – rendelkezésemre állt az app-jaimról egy viszonylag friss Titanium Backup mentés. Legalább a programokat nem kell majd újra letöltögetnem, és bekonfigolnom – gondoltam. Összegezzük a leírtakat:

  • volt egy telefonom, ami el se tudott indulni
  • ez egy root-olt HTC Desire, amin Cyanogenmod 7 fut(ott)
  • az app-okról volt biztonsági mentésem
  • a telefonszámaim nem voltak sync-elve a Google fiókomba
  • az SMS-eimről sem volt backupom, de szerettem volna visszakapni őket

Ahhoz hogy az adatvesztést nullára minimalizáljam a következőkre volt szükségem:

Első körben izzítottam az SD-kártya olvasót, és ránéztem Partition Wizard-dal az app-ok számára fenntartott 4-500 megás ext3 partícióra (jobb klikk -> Surface test), hogy nem-e az sérült meg, mert az is okozhat ilyen tüneteket. Sajnos vagy szerencsére (nem tudom eldönteni) mindent rendben talált. Itt kezdtem el először vakargatni a fejem: a kártyára gyanakodtam, de úgy fest hogy nem az okozta az összeomlást. De akkor mi? Spoiler: a mai napig nem tudom, és ez kicsit aggaszt. Mindenesetre a mindenható Google segítségét kértem, és szerencsére kaptam is: Clockworkmod Recovery-be be tudtam jutni (nekem HTC Desire Bravo-m van, ott hangerő le + power gomb a módszer erre – ez a Fastboot menübe visz, de ott már kiválasztható a CWM), itt csináltam a működésképtelen ROM-omról egy nandroid backup-ot (itt van róla videó, hogy hogyan kell), majd – némi tépelődés után – ment rá a wipe. Ez a következőket jelentette:

  • wipe cache partition
  • advanced -> wipe dalvik cache

majd legvégül:

  • wipe data/factory reset

Fontosnak tartom megjegyezni, hogy a felső két wipe-ot (amelyek nem okoznak adatvesztést a telefonban) próbáltam külön is, hátha megoldanak bármit is – természetesen nem.

Ezek után fogtam az előzőleg készített nandroid backup-ot, SD-kártya olvasó segítségével letöltöttem a gépemre, majd az UnyAffs nevű csoda segítségével kiműtöttem belőle a két file-t, ami engem érdekelt. Az egyik ez volt:

screenshot-1401903572337

 A másik pedig ez:

screenshot-1401903548692

 Elvileg ezek tárolják az SMS-eket, és a kontaktokat. Később kiderült, hogy csak az egyikre lesz szükségem, és arra sem úgy, ahogy eleinte gondoltam. A tool használata egyszerű: bemásolod a nandroid backupod könyvtárába, majd kiadod a parancsot arra a .img file-ra ami tartalmazza az áhított file-jaidat. Ezután elindul a kitömörítés az adott könyvtárba. Esetemben ez így nézett ki:

unyaffs data.img

Miután ez megvolt a telefon kapott egy restart-ot, és csodák csodájára elindult, bár sem a programjaim, sem a telefonszámaim, sem az SMS-eim nem voltak rajta. Az app-ok visszaállítása gyerekjáték volt Titanium Backup-pal, az SMS-eket pedig vissza tudtam varázsolni az AppExtractor segítségével. Utóbbi annyit csinál, hogy megnézni az SD-kártyán található nandroid backup-okat, majd egyrészt kitömöríthetünk file-okat (ez az amit én az UnyAffs-sal oldottam meg), másrészt pedig könnyedén  SMS-eket és kontaktokat is visszaállíthatunk belőlük. Az SMS visszaállítás simán le is ment, de a kontaktoké már kevésbé: akárhányszor próbáltam utána mindig 0 darab (pontosabban 0 darab olyan, ami a crash előtt csak a telefonon volt elmentve) figyelt a telefonkönyvemben. Később ennek is megtudtam az okát: a contacts2.db nem engedi magát csak úgy bizergálni, csak akkor maradnak meg a módosítások, ha a telefonkönyv eszközeit (például vCard file importálása) segítségével kerültek bele. Más esetekben egész egyszerűen kinullázza a file-t az első adandó alkalommal. Erre úgy sikerült rájönnöm, hogy vagy ötször próbáltam különféle módszerekkel felülírni a nandroid backupból kinyert file-lal a telefonon levőt – sikertelenül. Végül feladtam, és rájöttem hogy más módszerhez kell folyamodnom. Ekkor fordult a figyelmem a contacts2.db file felé: megtudtam például hogy ez egy SQLLite adatbázis file, amit ráadásul lehet is konvertálgatni ide-oda (például vCard formátumba is) – igaz, hogy csak Linux shell scriptek, és Python-os megoldások segítségével. Egyikhez se fűlt a fogam, ezért kínomban feltettem egy SQLLite Manager nevű addon-t a Firefoxomhoz, amellyel utána már meg tudtam nyitni az áhított .db file-t. Innen már sétagalopp volt az egész (nem): ezzel a query-vel tudtam generálni egy olyan listát belőle (az “Execute SQL query” fülön lehet beírni), amelyben név – telefonszám formátumban szerepelt minden elveszettnek hitt kontaktom:

SELECT data1 AS NAME
,(
SELECT data1
FROM data dt2
INNER JOIN mimetypes ON mimetype_id = mimetypes._id
WHERE mimetype LIKE "%phone%"
AND length(data1) > 0
AND dt1.raw_contact_id = dt2.raw_contact_id
) AS Phoneno
FROM data dt1
INNER JOIN mimetypes ON mimetype_id = mimetypes._id
WHERE mimetype LIKE "%name%"
AND length(data1) > 0
ORDER BY NAME

(Ennek a tool-nak a használatáról egy nagyon egyszerű videó itt található amúgy.)

A kapott eredményt átcopy-ztam egy .txt file-ba, így kaptam egy listát, amelyben a sorok formátuma a következő volt:

“név”,”telszám”

Ezután a separator character beállítást automatikuson hagyva mehetett be a Google Sheet-be (File -> Import-tal):

Screenshot_2014-06-04 20_02_47

Az így kapott listát (amelyben az A oszlop a név, a B meg a telefonszám) még sajnos nem eszi meg az Android – vCard formátumot (.vcf) már annál inkább. Először is elmentettem .csv formátumban így:

Screenshot_2014-06-04 20_05_55

Ezután pedig következhetett a CSV to vCard nevű csodaprogram letöltése és telepítése. Ez képes volt megenni a .csv-met és átkonvertálni vCard-ba valahogy így:

Screenshot_2014-06-04 20_08_55

 A képen a következő látszik: először be kell neki tallózni a .csv file-t, majd a field-eket megfeleltetni a kívánt mezőtípusnak. A fenti shoton például az látszik, hogy az A oszlopban található neveket éppen megfeleltetem a “Full name”-mel, de ugyanezt el kellett játszanom a telefonszámokkal is, csak ott a “Mobile phone”-t megadva. Ezután mehet a “Convert”. A kimenetként kapott vCard file-lal még mókoltam kicsit (a shoton is látható ékezetes karakter problémával például), végül kaptam egy file-t ilyen formátumban:

BEGIN:VCARD
VERSION:2.1
FN:név1
TEL;CELL;PREF:+36telefonszám1
END:VCARD
BEGIN:VCARD
VERSION:2.1
FN:név2
TEL;CELL;PREF:+36telefonszám2
END:VCARD
BEGIN:VCARD
VERSION:2.1
FN:név3
TEL;CELL;PREF:+36telefonszám3
END:VCARD

Ésígytovábbésígytovább. Ezt a file-t már csak fel kellett pakolnom az SD-kártyára, francokat, hogy megelőzzem a következő crash-nél ezt a szopást egyből töltöttem fel a Google Contacts-ba:

Screenshot_2014-06-04 20_15_04

Amikor ezzel végeztem még toltam rá egy “Find & merge duplicates”-t is a biztonság kedvéért ugyanebből a menüből.

Tanulságos kis élmény volt, de tényleg: konzekvenciaként levonható, hogy a Google Contacts nem hülyeség. Használjátok ti is (szerk.: vagy más biztonsági mentés/sync megoldást, biztos van még ezen kívül is) vagy megismerkedhettek a SQL query-k és vCard file-ok csodálatos világával ha nem akarjátok veszni hagyni a fontos adataitokat.

Ez jó, megosztom!

    2 hozzászólás

    1. bachterman:

      van egy olyan a contacts.apk-ban, hogy import/export. ott lehet a /mnt/sdcard/xxx.vcf-be menteni. én pl mindig csinálok egy backup az sd-ről, ahová meg pl az összes programom dumpolja a szemetét. a gúgelnek nehogymár feltoljam az adataimat. iptables-ben meg tiltom a nemkívánt apk-k internetelérését.

      A komment időpontja: 2014 június 4th, 22:09

    2. JonC:

      ismerem, de ez csak akkor működik, ha elindul a telefon. az enyém nem tudott, a crash meg váratlan volt, nem tudtam rá felkészülni.

      A komment időpontja: 2014 június 4th, 22:29

    Írj kommentet!

    

    Top 5 post

    

    Érdekesség még, hogy 790 darab post, és 2657 darab kommentár született a blogon 2009. szeptember 12. óta. 1 vendég - most ennyien vagytok/vagyunk az oldalon.

    Tagek