Monday, July 22, 2013

갤럭시S의 sms를 갤럭시S3로 옮기기 (복잡하며 다수의 삽질을 포함합니다)

http://www.clien.net/cs2/bbs/board.php?bo_table=lecture&wr_id=123837


** 안내 및 주의사항 **
* 1. SKT 갤럭시S(SHW-110s) 및 KT 갤럭시S3 LTE(SHV-E210k) 모델을 사용하였습니다.
* 2. sms만 이전하는 것이며, mms나 첨부파일은 아직 방법이 없습니다.
* 3. 여러 삽질 끝에 성공한 일이라, 미리 과정을 기록해둔 것이 아닙니다.
* 따라서, 내용중에 잘못되거나 누락된 것이 있을 수 있습니다.
* 알려주시면 최대한 보완하도록 노력해보겠습니다.
* 4. 커스텀 펌웨어 설치나, 엑셀 등의 프로그램 사용을 어느정도 하실 수 있는 것으로 가정했습니다.
* 안 그러면 내용이 너무 길어질 것 같습니다.
****************
갤럭시S2 부터는 Kies에서 문자 백업&복원을 지원하기때문에 데이터 이전이 간단합니다.
하지만 갤럭시S는 통메의 저주를 받아서 메시지 이전이 매우 어렵습니다.
이 글에서 힌트를 얻었습니다. 하지만, sms 문자도우미라는 앱이 구글 마켓에서 검색되지 않아서 결국 삽질을 통해 다른 방법으로 복원하게 되었습니다.
1. 갤럭시S 문자 데이터 백업
1.1. 테그라크 커널을 설치하기
1.2. 테크라크 커널 앱 설치하여 루팅하기
1.3. 파일관리자 앱으로 문자메시지 데이터베이스 파일 복사
혹은
1.4. 백업해야 하는 데이터베이스
/dbdata/databases/com.sec.mms
/data/data/com.sec.mms (이건 mms 및 첨부파일인거 같은데 아직 복원 방법이 없습니다. 추후에 복원방법이 나올 경우를 대비하여 백업해두시면 좋을 것 같습니다.)
폴더를 통째로 PC로 복사해둡니다.
2. 갤럭시S 문자데이터 변환
2.1. SQLite Maestro 프로그램을 이용하여 문자 db를 xls 파일로 변환해야 합니다.
이 곳에서 다운받을 수 있으며, 상용이지만 트라이얼로 30일간은 제한없이 사용가능합니다.
2.1.1. SQLite Maestro에 문자 db 파일(/dbdata/databases/com.sec.mms/mms.db) 드래그&드롭.
2.1.2. 사진의 번호순서대로 클릭해줍니다.
문자 메시지의 갯수가 1000개를 넘는다면 4번 이후에 table이라고 적혀있는 드롭다운 메뉴 왼쪽의 아래방향 파란색 화살표(?)를 클릭해주셔야 합니다. 빼먹을 경우 앞에서부터 1000개까지의 메시지만 추출되니 주의해야 합니다!
2.1.3. 그림을 참고하면서 xls 파일로 저장.
2.2. Excel 프로그램을 이용하여 xml 파일로 변환
2.2.1. Excel 프로그램으로 SQLite Maestro에서 변환한 xls파일 열기
2.2.2. 앞 부분의 비정상적인 데이터 삭제(대략 1000번까지)
(비정상 데이터의 발신자의 번호는 01234567890이며 내용도 1234567890을 반복적으로 적어둔 것 뿐입니다.)
데이터를 정리하고 나면 다음과 같은 모습이 됩니다.
2.2.3. 데이터 정리
(없는 값은 만들고, 있는 값은 이름을 변경해서 알아보기 쉽게 해둡니다.)
protocol <- 0 (새로 만듭니다. 값은 전부 0)
address <- MDN1st (문자 상대의 연락처)
date <- RegTime (문자를 수신한 날짜와 시간값. ms 단위)
type <- MainType (수신은 0, 발신은 1의 값을 가짐. 1은 2로, 0은 1로 변경해줘야 함.)
subject <- null (새로 만듭니다. 값은 전부 null)
body <- Title (문자 내용)
toa <- null (새로 만듭니다. 값은 전부 null)
sc_toa <- null (새로 만듭니다. 값은 전부 null)
service_center <- +821029190909 (새로 만듭니다. 값은 전부 +821029190909. 다른 값이어도 상관없을듯)
read <- 1 (새로 만듭니다. 값은 전부 1. 아마도 문자를 읽었는지 아닌지 여부 판별용)
status <- -1 (새로 만듭니다. 값은 전부 -1)
locked <- 0 (새로 만듭니다. 값은 전부 0. 삭제 방지 설정?)
date_sent <- date값을 복사하여 사용 (문자를 발신한 시각. date와 값이 같음)
readable_date <- =Text((date_sent/86400000)+25569,"[$-412]yyyy. m. d. AM/PM h:mm:ss;@") (date_sent의 ms 값을 일반적인 날짜 표기 형식으로 변경)
contact_name <- Display (대화상대의 주소록 이름)
이렇게 없는 값은 추가해서 지정한 값으로 만들어주고
readable_date 값에는 저렇게 함수를 적어줍니다. (셀 주소 값은 당연히 상황에 맞게 정해야 하는 거 아시죠?)
2.2.4. xml로 변환하기 위해 xml 매핑 파일을 준비.
<?xml version='1.0' encoding='UTF-8' standalone='yes' ?>
<smses>
<sms protocol="" address="" date="" type="" subject="" body="" toa="" sc_toa="" service_center="" read="" status="" locked="" date_sent="" readable_date="" contact_name=""/>
<sms protocol="" address="" date="" type="" subject="" body="" toa="" sc_toa="" service_center="" read="" status="" locked="" date_sent="" readable_date="" contact_name=""/>
</smses>
메모장에 위의 내용을 붙여넣고, smsXmlMap.xml 이라는 이름으로 저장합니다.
(중간에 똑같은 내용이 2번 있는건, 일부러 그런겁니다. 오타 아닙니다.)
2.2.5. 엑셀에서 '개발 도구 탭'을 표시하도록 설정 (xml 매핑을 위해 필요합니다.)
이 곳의 내용을 참고하여 설정하세요.
2.2.6. 엑셀에서 xml 매핑 (xls 파일을 xml 파일로 내보내기 위해 필요합니다.)
2.2.6.1. 개발 도구 탭에서 '원본' 버튼 클릭.
2.2.6.2. 우측에 새로 열린 'XML 원본' 창에서 'XML 맵...' 버튼 클릭.
2.2.6.3. 'XML 맵' 창에서 '추가(A)...' 버튼을 클릭하고 아까 만든 'smsXmlMap.xml' 파일 불러옴.
2.2.6.4. 엑셀 창 좌측 하단 탭을 이용하여 새로운 시트를 추가하고 새롭게 추가된 시트를 클릭하여 선택.
2.2.6.5. 우측 'XML 원본' 창에서 smses를 선택하고, 새로운 시트로 드래그 & 드롭.
2.2.6.6. 각각의 항목에 맞게 2.2.3.에서 준비한 내용들을 복사&붙이기.
2.2.7. '다른이름으로 저장' -> xml 데이터 파일로 저장.
2.2.8. 저장된 xml 데이터파일을 텍스트에디터로 열어서 정리.
2.2.8.1. 두번째 줄에 <?xml-stylesheet type="text/xsl" href="sms.xsl"?> 를 추가해줍니다.
2.2.8.2. 세번째 줄 <smses><smses count="???">로 바꾸고 ??? 부분에 전체 문자 메시지 갯수를 적어줍니다. 예를 들어 1000개의 문자메시지가 있었다면 <smses count="1000">이 됩니다.
2.2.8.3. 문자메시지 데이터가 쭉 나열된 이후에 불필요하게 남아있는 <sms/> 태그를 전부 제거해줍니다. 아마 양이 상당할 겁니다.
2.2.8.4. 최종적인 xml 파일은 다음과 같은 형식이 됩니다.
(데이터는 그냥 예시입니다.)
<?xml version='1.0' encoding='UTF-8' standalone='yes' ?>
<?xml-stylesheet type="text/xsl" href="sms.xsl"?>
<smses count="1000">
<sms protocol="0" address="01011112222" date="1297412233934" type="2" subject="null" body="어쩌구저쩌구 이런저런 내용의 문자" toa="null" sc_toa="null" service_center="+821029190909" read="1" status="-1" locked="0" date_sent="1297412233934" readable_date="2011. 2. 11. 오전 8:17:14" contact_name="내친구1"/>
<sms protocol="0" address="01033334444" date="1305524787907" type="2" subject="null" body="어쩌구저쩌구 요런조런 내용의 문자" toa="null" sc_toa="null" service_center="+821029190909" read="1" status="-1" locked="0" date_sent="1305524787907" readable_date="2011. 5. 16. 오전 5:46:28" contact_name="내친구2"/>
.
.
.
<sms protocol="0" address="01088889999" date="1347466376000" type="2" subject="null" body="이게 마지막 예제 문자" toa="null" sc_toa="null" service_center="+821029190909" read="1" status="-1" locked="0" date_sent="1347466376000" readable_date="2012. 9. 13. 오전 1:12:56" contact_name="내친구10"/>
</smses>
2.2.8.5. oldSMS.xml 등 알아보기 쉬운 이름으로 저장해둡니다. 저장할때는 UTF-8 인코딩으로 저장해야 합니다.
3. SMS backup & restore 앱을 이용하여 갤럭시 S3에 문자 메시지 복원
3.1. 갤럭시S3에 SMS backup & restore 앱 설치.
설치후 앱을 실행하여 sms 백업을 한번 수행해줍니다. 그러면 스마트폰에 SMSBackupRestore 폴더가 새로 생성됩니다.
3.2. 갤럭시S3를 pc와 usb로 연결하고 SMSBackupRestore 폴더에 아까 만들어진 xml 데이터 파일을 복사합니다.
3.3. 갤럭시 S3를 PC에서 분리하고 SMS backup & restore 앱을 실행합니다. 복사한 xml 파일을 이용하여 문자메시지들을 복원합니다.
이때 복원하는 문자메시지는 덮어씌워지는 게 아니라 추가됩니다. 여러번 복원하면 같은 문자가 여러개 입력되니 주의하세요.

No comments:

Post a Comment