나는 왜 여행을 가려고 하는가?

1년간의 장기여행을 준비하면서 많은 사람들을 만나고 있다. 특히 세계 여행을 다녀온 사람들의 조언들은 귀담아 듣는다. 실질적인 것부터 사소한것까지,.. 이런 저런 이야기를 듣다보면 나조차도 헷갈린다. 내가 굳이 여행을 갈 이유가 있었나? 나의 여행 컨셉은 뭘까? 이왕 나가는 김에 구석구석 다녀야하는건가? 한번도 구체적인 계획을 짜서 여행을 다녀본적이 없던 나에게 이런저런 조언들은 그야말로 정보의 홍수였다.

8개월전 세계여행을 떠나자고 짝지와 약속한 후로 7개월이 지났다. 그동안 내가 한일은 고작 LA행 편도 티켓 두장을 샀을 뿐이다. 아니다!.. 카메라도 샀구나. 준비한답시고 세계여행을 다녀온 사람들을 만났고, 이미 다녀온 주변 지인들로부터 조언도 들었다. 남들은 직장을 그만두고도 3~4개월 열심히 준비한다는데 나는 여전히 지금도 회사를 다니고 있다.

나는 왜 여행을 가야만 하는가?

이제 남은 시간은 약 40여일. 한참을 고민했던 주제다. 엄청난 비용을 치루는 여행이기때문에 이왕 가는김에 진짜 여행다운 여행을 하라는 사람들이 많다. 많은 곳을 보고 경험하고 만나라고 한다. 맞는 말이다. 나도 많은 것을 보고 경험하고 돌아올 예정이다. 하지만 그런 여행을 하고 싶은건 아니다. 또 어떤 이들은 평소와 같은 삶의 패턴에서 장소만 바뀐것이 여행이라는 사람들도 있다. 그것도 맞는 말이다. 하지만 내가 그런 여행을 하고 싶은건지는 모르겠다. 누구는 어떤 루트로 어떻게 가라하고 또 누구는 어디를 가고 싶은지부터 정하라고 하는데,.. 사실 난 딱히 어느 나라가 가고 싶은것도 아니다.

얼래? 그럼 난 왜 여행을 가려고하는거지? 음… 모르겠다. 그냥 변화가 필요했다. 똑같은 루틴으로 돌아가는 나의 삶이 지루해졌나? 회사집 회사집,.. 그리고 가끔 휴가 받아 떠나는 여행,.. 그리고 또다시 회사집 회사집 .. 뭔가 반복적이다. 이런 반복되는 루틴이 어느 순간 삶의 위기처럼 느껴졌다. 벗어나야했다. 하지만 내가 그렇게 무모한 사람은 아니다. 겉으로 보기엔 터무니없이 낙척적이고 가끔 생각없이 사는것 같지만, 나는 지극히 현실적이고 계획적이다. 물론 디테일한 계획은 아니고 큰 그림만 그리지만 남들보다 실행력과 멘탈은 앞서있는 것 같다. 그래서 그런지 세계여행을 가야겠다는 결심은 별다른 어려움이 없었다. 아니,.. 아예 고민을 딱히 하지 않았던 것 같다. 고민하면 안가는게 답이니까. 그냥 고민을 안했다. 그래서 선결심 후고민중이다. 아놔… -_-;;;

실험하고 싶은것들

여행간다니까 다들 내가 돈이 많은 줄 알지만 몇몇 지인들은 알것이다. 나는 그 흔한 억단위 돈을 만저본적이 없다. 물론 그런 돈도 지금 없지만 고백하건데 그런 억소리 나는 돈을 날려본적은 있다. -_-;; 인생에서 돈이 그렇게 중요하지 않다는 것은 돈을 날려먹고 나서야 알았다. 땡큐~ 쏘머치머니~ 돈은 여행을 결심하는데 그렇게 중요한 변수는 아니었다. 물론 여행을 갈만한 최소한의 자금은 중요하다. 티켓은 사야하니까 1년간 밥은 먹고 살아야하니까.. 혼자가 아닌 둘이 먹고 살아야하니까 그만큼의 돈은 필요하다. 하지만 그 이상은 필요없다.

지금은 말해줄순 없지만 언젠가 내가 돌아와 돈은 그렇게 중요하지 않아요. 두다리 멀쩡하고 젋은 청춘일때 탈탈 털어 여행을 다녀오세요! 라고 말하고 싶다. 이번 여행에서 그걸 증명해보려한다. 그리고 또하나의 실험은 하루 24시간 1년 365일을 온전히 내 시간으로 만들어 썼을때 나는 얼마나 벌수있을까? 라는 실험도 병행하고 있다. 따라서 나의 이번 여행은 남들이 하는 그런 여행다운 여행은 아닐찌도 모르겠다. 뭐 사실 여행에 정답은 없지 않은가? 나의 이번 여행은 그렇게 정했다. 누가 뭐라든 난 이렇게 내 실험을 하면서 여행을 할 계획이다. 뭐,.. 좋은 말로 포장은 했지만.. 어쩜 생계형 여행이 될수도… 뭐 이런걸 디지털 노마드라고 부르는 사람도 있다.

다음 스텝

이제 준비해야할 것들이 눈앞에 보이기 시작했다. 일단 예방주사부터 맞아야겠다. 남미를 여행하려면 황열병 주사를 맞아야한단다.

현재까지 준비한 것들

  1. LA행 편도 뱅기표 2장
  2. LA에서 머물 4박 5일 숙소 예약
  3. 황열병 주사 예약
  4. 대강의 루트: LA -> 멕시코부터 남미 한바퀴 7개월정도 -> 북미 2개월 -> 유럽 3개월 -> ???

종이 청첩장

종이 청첩장을 안찍겠다고 했지만 결국 찍게됐다. 내가 종이 청첩장을 만들고 싶지 않은 이유는 여러가지가 있다. 일단 그동안 청첩장을 너무 많이 받았다. 그리고 이 청첩장들을 버리는데 어려움을 겪고 있다. 이유는 모르겠다. 그냥 이 청첩장들을 그대로 쓰레기통에 넣으면 안될꺼 같다. 모으는 취미도 없지만 결국 버리지 못해 내방 한구석 서럽 한구석에 조용히 짱박혀 있는 녀석들이 많다. 언젠가 버리겠지. 일부러 잃어버리고 싶다는 생각도 했다. 그래서 난 종이 청첩장이 싫다.

지인들이 시집장가를 갈때 나눠주는 청첩장이 마냥 싫은건 아니다. 결혼한다고 만나서 나눠주는 청첩장을 직접 받아들면 “아 이제 이친구도 가는구나 싶다” 그러데 이 느낌이 싫은건 아니다. 오히려 오랜만에 이렇게라도 만나서 한마디 주고 받는게 참 좋다. 그런데 어느순간 이 좋은 느낌이 청첩장 때문이 아니란걸 알게됐다. 그때부터 종이 청첩장은 받아도 그만 안받아도 그만,.. 오히려 모바일로 받는게 여러가지 편리한 이유로 더 좋다. 간혹 모바일로 띡 던져주는 이들에게 성의없다는 느낌을 받기도 했다. 하지만 그게 모바일로 받아서 그런게 아니라는 것쯤은 눈치로 알게된다. 그것은 마음의 문제다. 하지만 이네 이것도 마음의 문제가 아니라 시간의 문제라는 사실을 최근 알게됐다.

바쁘면 청첩장 줄시간도 없더라. 그래서 나는 좀 더 덜 바쁘고 싶다. 여튼 종이 청첩장을 찍었지만 친한 지인들에게는 그냥 모바일이나 다른 방식으로 전하고 다른 형태로 초대하고 싶다. 하지만 찍어놓은 청첩장은 어찌됐든 소비 해야한다. 안그럼 또 내방한구석 어딘가 짱박혀 있겠지 ㅜㅜ 딜레마,… 그냥 내맘대로 청첩장 들고 온 날은 주고 아니면 말고… 종이 청첩장 받고 싶으면 댓글로~~

안드로이드 앱 디컴파일 해보기

의도한건 아닌데 하다보니 졸지에 안드로이드 앱을 디컴파일까지 하게됐다. 오늘 한일을 정리해보자.

1. 맥에 안드로이드 SDK 설치하기

일단 안드로이드 SDK부터 설치하자. 전에는 직접 다운로드 받아서 ~/dev 폴더에 넣고 관리했었는데, HomeBrew에도 android-sdk 모듈이 있었다!. 난 홈브루 매니아니까 홈브루로 고고!!

$> brew install android-sdk
$> brew info android-sdk
android-sdk: stable 24.3.3
Android API libraries and developer tools
https://developer.android.com/index.html
... 
You may need to add the following to your .bashrc:
export ANDROID_HOME=/usr/local/opt/android-sdk
...

설치된 정보를 보니 24.3.3 버전이다. 그리고 ~/.profile 파일을 열어서 아래와 같이 ANDROID_HOME과 필요한 PATH를 잡아준다.

// .profile 
export ANDROID_HOME=/usr/local/opt/android-sdk
export PATH=$PATH:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools 

2. 자바 최신 버전 설치하기

다음으로 해야할 일은 자바 최신버전을 까는 일이다. 아마 맥에 자바를 따로 설치하지 않았다면 옛날버전일 것이다.

$> java -version
java version "1.6.0_65"

역시나 오랜된 1.6 버전이다. 혹시나해서 홈브루엔 자바가 없나? 했는데 역시나 없다. 그냥 오라클 사이트가서 다운로드 받아 설치한다. 설치가 끝났다면 확인해보자.

$> java -version
java version "1.8.0_60"

올레~!! 됐네 됐어!! 그나저나 난 왜 자바 최신버전까지 깐거지? 그건 뒤 이어 설치할 디컴파일 툴들이 자바 1.7이상에서 돌기 때문이다. 이왕 설치한김에 최신버전~ ㅎㅎ 필요에 따라서는 JAVA_HOME을 설정해야될지도 모르겠다. Mac에서 자바홈은 아래 위치에 있다고 하는데 맥에선 패키지로 인스톨하다보니 JAVA_HOME을 딱히 안해도 되더라~ 오히려 했다가 패스가 안잡혀서 오류가 났었다.

export JAVA_HOME=/usr/libexec/java_home

실제 맥에 JDK가 설치되는 위치는 아래와 같다. 자세한 내용은 문서를 참고하자.

/Library/Java/JavaVirtualMachines/jdk<major>.<minor>.<macro[_update]>.jdk

3. 디컴파일 툴 설치하기

디컴파일 툴은 2가지가 있다. 참고링크: http://visu4l.tistory.com/412

  • dex2jar : https://code.google.com/p/dex2jar/
  • JD-GUI : http://jd.benow.ca/

dex2jar 파일은 apk 파일을 디컴파일해서 jar 파일로 변환해준다. 그리고 JD-GUI는 앞에서 변환한 jar 파일을 열어서 실제 디컴파일된 소스를 볼때 유용하다.

4. 폰에 설치된 앱 가져오기

필요한 도구는 모두 갖춰놨으니 이제 실제 폰에 있는 안드로이드 앱을 가져다가 디컴파일해보자! 일단 폰에 있는 apk 파일을 가져오려면 폰을 USB로 맥에 연결하고 개발자 옵션을 켜야한다. 일단 여기까지 했으면 폰이 제대로 PC에 연결됐는지 확인해보자. 이때 adb 라는 디버깅 도구를 이용한다.

$> adb devices
List of devices attached
d22849b7    device

그런데 adb가 없을수도 있다. 왜냐면 디버깅 도구는 기본 SDK에 포함되어 있지 않고 별도로 설치해야한다. 뭐 간단히 명령어 한줄이면 된다.

$> android update sdk --no-ui --filter 'platform-tools'

여튼 adb 명령어는 매우 유용한다. 연결된 폰이 하나라면 바로 쉡(shell)로 접속할수도 있다.

$> adb shell
shell@ks01lteskt:/ $ ls -al
drwxr-xr-x root     root              1970-02-06 11:46 .system
drwxr-xr-x root     root              1970-02-06 11:46 acct
drwxrwx--- system   cache             2015-09-01 20:29 cache
dr-x------ root     root              1970-02-06 11:46 config
lrwxrwxrwx root     root              1970-02-06 11:46 d -> /sys/kernel/debug
drwxrwx--x system   system            1970-02-06 11:46 data
-rw-r--r-- root     root          255 1970-01-01 09:00 default.prop
drwxr-xr-x root     root              2015-07-29 16:34 dev
...
..

오호라! 굉장한데? 하면서 막 폰속을 서핑하지만 정작 중요한 순간에는 퍼미션이 없다고 나온다. 특히 설치된 앱들이 모여있는 /data/app 폴더는 볼수가 없다.

shell@ks01lteskt:/ $ ls -al /data/app
opendir failed, Permission denied

아… 어쩌지?… 어쩌지… 라고 생각하면서 또 잽싸게 써핑해보니, 역시나 있다 있어! 방법이 다 있어!!

설치된 팩키지 목록

일단 설치된 폴더의 파일 목록을 볼수가 없으니 꼼수를 이용해야한다. 먼저 설치된 패키지가 뭐가 있는지 검색해보자.

$> adb shell pm list packages
adb shell pm list packages
...
package:com.sec.android.app.mediasync
package:com.sec.android.app.sbrowsertry
package:com.sec.android.app.controlpanel
package:com.android.printspooler
package:com.google.android.syncadapters.calendar
... 
..

그런데 오지게 많이 나온다. 일일이 확인하기 어려우니까 적당히 필터하면서 원하는 앱의 패키지 명을 찾는다.

$> adb shell pm list packages | grep <필터할 글자>

설치된 패키지의 실제 경로 확인

그리고 원하는 앱의 패키지명을 찾았다면 그 앱의 실제 경로를 확인해본다. 예를 들어 폰에 멜론앱이 설치되어 있다면 아래와 같이 실제 경로를 확인할수있다.

$> adb shell pm path com.iloen.melon
package:/data/app/com.iloen.melon-7.apk

앱에 있는 apk 파일 다운로드

이제 PC로 다운로드하자!!

$> adb pull /data/app/com.iloen.melon-7.apk

이렇게 추출해낸 apk 파일은 zip으로 압축된 녀석이라 그냥 확장자만 바꿔서 압축을 풀어도 내용을 볼수있지만 실제 소스코드는 컴파일되어 있기 때문에 보기 어렵다. 이제 이 .apk 파일을 디컴파일해보자. 필요한 도구는 앞에서 다 설치해놨다.

5. 소스코드 디컴파일

디컴파일 방법은 또 쓰기 귀찮으니까 링크를 참고하자! http://visu4l.tistory.com/412

다른점이 있다면 도구들이 버전업이 되서 이름이 바뀐것 밖에 없다. 맥에서 할라면 당연히 .bat 파일이 아니라 .sh 파일을 실행시켜야된다. 뭐 이런식이다.

$> sh d2j-dex2jar.sh com.iloen.melon-7.apk

자바 버전이 1.7이상이라면 특별한 문제없이 잘 동작한다. 결과물은 파일명 뒤에 -dex2jar.jar 라는 접미사가 붙는다.

마지막으로 JD-GUI를 실행시켜서 위 파일을 열어서 확인한다. 대부분의 소스코드가 디컴파일되서 java 파일을 볼수있다. 그런데 안드로이드는 java 파일만있다고 해석할수있는게 아니다.
AndroidManifest.xml 파일도 같이 봐야한다.

6. XML 디컴파일

xml 파일을 디컴파일 하려면 apktool을 설치해야한다. 설치는 알아서들.. 점점 귀찮아진다.

http://ibotpeaches.github.io/Apktool/install/

사용법은 이렇다.

$> apktool d com.iloen.melon-7.apk

덧,

사실은 이 모든 것들이 Appium 프로젝트를 만들다가 벌어진일이다.
젠장알~~ -_-;.. 뭐한거냐?
아직 시작도 못했다. ㅎㅎ