Ubuntu에서 스마트폰 OS인 Ubuntu Touch를 선보였고 어느 덧 16.10 버전까지 발표되었다.

Ubuntu Touch는 안드로이드 레퍼런스 폰에서 구동이 가능하도록 롬을 지원하는데 지원하는 기기는 다음과 같다.
 

 


초창기 Preview 버전에서는 속도와 안정성에 대한 문제가 엄청 심했지만, 현재는 많이 안정화되어 있는 듯 하다.

다만, 아쉬운 점이 있다면 UI에 한글은 지원하지만, ​한글 키보드는 지원하지 않는다는 점이다.​

따라서, 재미삼아 체험으로 써보기엔 좋을지 모르지만 실용성으로 보자면 0%에 가깝다고 볼 수 있어서, 몇번 쓰다가 무조건 다시 안드로이드로 롤백하게 된다.

 

이번 포스팅은 Nexus 4를 이용하여 Ubuntu Touch 16.10을 설치하는 방법과 사용 후기를 소개한다.

설치 전, 기기에 중요한 데이터가 있다면 백업은 필수이며, 혹시나 설치 실패로 벽돌이 된다면 fastboot flash 명령어로 다시 갈아 엎으면 된다.


기본적으로 Ubuntu Touch를 Nexus 4기기에 설치하기 위해서는 Ubuntu Linux가 필요하다.

VMware Player 같은 프로그램을 이용하여 가상머신에 Ubuntu를 설치하고 USB를 연결하면 하드웨어 셋팅은 끝난다.

VMware Player 기준으로는 아래와 같이 설정하면 해당 가상머신에서 USB를 인식한다.

 

 


설치하기 전, Nexus 4에 디버깅 모드가 설정되어 있어야 하며, bootloader로 Reboot를 해야한다.

USB 디버깅 모드 설정 : 2017/05/02 - [Android] - 안드로이드 USB 디버깅 모드 설정

 

다음으로 apt-get을 이용하여, ubuntu-device-flash를 설치한다.

$ sudo apt-get install ubuntu-device-flash

 

 


ubuntu-device-flash 설치와 기기가 bootloader 모드로 되어 준비가 완료되었다면, Ubuntu Touch 롬을 받고 설치를 진행한다.

$ ubuntu-device-flash touch --channel=ubuntu-touch/stable/ubuntu --bootstrap


 

 

[Ubuntu Touch 16.10이 설치되는 화면]

 

 

[Ubuntu Touch 16.10이 부팅되는 화면]

 

 

[잠금화면과 기본 앱 목록 UI 부분]

 

 

[좌측을 드래그하면 탭바가 나오고 우측을 드래그하면 현재 동작중인 앱들 목록이 나타난다]

 

 

[앱 업데이트 목록과 종료 버튼을 누를 때 나타나는 종료 창]

 

안드로이드용 Tcpdump는 아래 사이트에서 다운로드 받을 수 있으며, adb 명령어를 이용하여 안드로이드 기기 내부의 /data/local/tmp/ 디렉토리에 Push 하여 실행이 가능하다.


안드로이드용 Tcpdump : http://www.androidtcpdump.com/android-tcpdump/downloads


다운로드 받은 Tcpdump를 안드로이드 기기의 /data/local/tmp 디렉토리에 Push 한다.

$ adb push tcpdump /data/local/tmp 



 

Tcpdump를 실행시키기 위해서는 해당 기기가 루팅 상태이어야 하며, 루트 권한이 없을 경우 다음과 같이 퍼미션 에러 메시지를 나타내며, 실행이 되지 않는다.

 


 

다음으로 Tcpdump에 실행 권한을 부여한다.

$ chmod 777 tcpdump

 


 

Tcpdump 실행하여 패킷 캡쳐

 


 

덤프가 완료되면, adb 명령어를 이용하여 해당 dump 파일을 pull한다. 단, 이때 루트 권한으로 덤프를 저장했기 때문에 dump.pcap의 소유주가 root로 되어 있으므로, 이를 다시 shell 권한으로 변경해 주어야 한다. 이를 변경하지 않을 경우, adb pull 명령어를 사용할 때 다음과 같이 소유주 문제로 덤프 파일을 받을 수 없게 된다.

 


 

다음과 같이 덤프 파일 소유주를 변경한다.

$ chown shell:shell dump_file_name

 


 

adb 명령어를 이용하여 덤프 파일을 pull한다.

$ adb pull /data/local/tmp/dump_file_name

 


 

Wireshark 도구를 이용하여 덤프 파일 분석

 

 

Windows 환경에서 OS가 문제가 발생했을 때의 대비를 위해 이미지 백업을 해두었다가 복원을 하는 Norton Ghost 도구가 있었다.

안드로이드도 이와 같이 커스텀 Recovery를 이용하여 손쉽게 백업 및 복원이 가능하다.


이번 포스팅은 TWRP Recovery를 이용한 안드로이드 백업 및 복원에 대한 설명을 한다.


TWRP Recovery를 적용하기 전, 해당 기기는 USB 디버깅 모드가 설정되어 있어야 하며, 설정 방법은 이전 포스팅에서 설명을 하였다.

USB 디버깅 모드 : 2017/05/02 - [Android] - 안드로이드 USB 디버깅 모드 설정


TWRP Recovery는 아래 사이트에서 다운로드 받을 수 있다.

https://twrp.me/Devices/

해당 하는 기기의 TWRP Recovery를 다운받으면, adb명령어를 이용하여 bootloader로 리부팅한다.

$ adb reboot bootloader



 

fastboot 명령어를 이용하여 TWRP Recovery 이미지를 플래싱한다.

$ fastboot flash recovery Recovery_Image_File

 

 


Recovery Mode를 선택하여 TWRP Recovery로 진입한다.

 

 

 

1. 이미지 백업

Backup 버튼을 선택하고, 백업할 파티션 요소를 선택한 후 Swipe로 백업을 진행한다.

 

 

 

 

 

 

2. 이미지 복원

Restore 버튼을 선택하고, 복원할 패키지를 선택한 후 복원을 진행한다.

 

 

 

 


 

복원 완료 후, 리부팅을 진행하면 다음과 같이 이전 백업해놓은 이미지로 복원된 것을 확인할 수 있다.

 

 

 


방법은 팩토리 이미지를 다운받아 초기화 하는 방법이 있는데, 이번 포스팅에서는 팩토리 이미지를 이용하여 안드로이드를 초기화 하는 방법을 설명한다.

 

팩토리 이미지를 적용하기 전, 해당 기기는 USB 디버깅 모드가 설정되어 있어야 하며, 설정 방법은 이전 포스팅에서 설명을 하였다.
USB 디버깅 모드 설정 : 2017/05/02 - [Android] - 안드로이드 USB 디버깅 모드 설정

 

아래 링크에서 해딩 기기와 원하는 안드로이드 버전의 팩토리 이미지를 다운 받을 수 있다.

Android Factory Imagehttps://developers.google.com/android/nexus/images

동의 버튼을 누르면 페이지가 펼쳐지고 해당 기기와 원하는 안드로이드 버전 선택이 가능하다.

 

 


해당 파일을 압축 풀면 다음과 같이 팩토리 이미지를 플래싱 할 수 있는 쉘 스크립트가 나온다.

 


 

adb 명령어로 기기가 정상적으로 연결되어 있는지 확인

$ adb devices

 



adb 명령어로 bootloader 모드로 리부팅 

$ adb reboot bootloader

 

 


flash-all을 실행하여 팩토리 이미지 적용

$ ./flash-all.sh

  (참고 : Windows 환경에서는 flash-all.bat를 실행)



 

다음과 같이 팩토리 이미지가 모두 업로드 완료되면 자동으로 리부팅되며, 새로운 버전의 안드로이드가 뜨는 것을 확인할 수 있다.

 

 

이번 포스팅은 안드로이드 OS 풀 소스를 안드로이드 에뮬레이터 환경에 맞춰 빌드하는 과정과 빌드 완료 후, 안드로이드 에뮬레이터에 생성된 이미지 파일을 플래싱하여 구동시키는 것을 설명한다.

출처 : http://source.android.com/source/building.html

 

 

1. 빌드 환경 설정

$ source build/envsetup.sh

 

 

 

2. 빌드 하드웨어 타겟 설정​

다음의 명령어를 입력하여 원하는 기기에 맞는 항목을 선택한다.

$ lunch

 

안드로이드 에뮬레이터에 빌드가 완료된 이미지를 올릴 것이므로 9. mini_emulator_arm64_userdebug를 선택하였다.

 

 

 

3. 빌드 시작 (참고 : VM환경 - CPU : Intel Core i5-4690K 3.50GHz, RAM : 4GB, 약 2시간 30분 소요)

​  - 빌드 시 "-j"뒤 숫자는 CPU 코어의 2배를 하면 된다.

$ make -j8

 


 


 

다음과 같이 약 2시간 30분만에 빌드에 성공하였다.

 

 

4. 빌드 결과물 확인

$ cd out/target/product/{CodeName}

  ex) cd out/target/product/mini-emulator-armv7-a-neon

 

 

 

5. 안드로이드 에뮬레이터 SDK 다운로드

$ cd /android_sdk_path/android-sdk-linux/tools/

$ ./android

  - Android SDK Build-tools 

  - Android Version (API Version) (Repo에서 받은 API 버전과 맞춰서 다운로드)


 

 

6. 설치된 에뮬레이터 이미지 파일을 컴파일 된 이미지로 교체

$ cp /root/work/out/target/product/mini-emulator-armv7-a-neon/ramdisk.img  /android_sdk_path/android-sdk-linux/system-images/android-22/default/armeabi-v7a/

$ cp /root/work/out/target/product/mini-emulator-armv7-a-neon/system.img  /android_sdk_path/android-sdk-linux/system-images/android-22/default/armeabi-v7a/

$ cp /root/work/out/target/product/mini-emulator-armv7-a-neon/userdata.img /android_sdk_path/android-sdk-linux/system-images/android-22/default/armeabi-v7a/


 

 

7. 안드로이드 에뮬레이터 생성 및 실행

  - ​(기존 생성된 에뮬레이터가 있다면, cache 문제가 될 수 있으므로 삭제 후 새로 생성)

 

 


다음과 같이 컴파일된 Mini-Emulator가 구동이 된다. Mini-Emulator로 빌드하였기 때문에 테스트 카메라 앱과 설정 앱만 존재하며, 기본 앱들이 탑재된 이미지를 빌드하고 싶다면 빌드 시, 1. aosp_arm_eng​를 선택하여 빌드 후 동일한 방법으로 이미지를 생성하여 올리면 된다.

 

 

이번 포스팅은 안드로이드 OS 풀 소스를 Nexus 4 실제 기기 기준에 맞춰 빌드하는 과정과 빌드 완료 후, Nexus 4 기기에 생성된 이미지 파일을 플래싱하여 구동시키는 것을 설명한다.

출처 : http://source.android.com/source/building.html

 

안드로이드 OS 풀 소스 빌드 시, 기기에 적용하기 위해서는 해당 기기의 드라이버 바이너리 파일을 적용하여야 하며, 드라이버 바이너리 파일을 적용하지 않고 빌드 후 기기에 적용할 경우, 다음과 같이 Android 로고 화면에서 넘어가지 않는다.

 

 


그 이유로는 해당 기기의 지원하는 드라이버가 설치되어 있지 않아 발생하는 문제인데, 이를 해결하기 위해서는 각각의 기기별 지원하는 드라이버 바이너리 파일들을 다운 받은 소스 코드에 적용 시키고 난 후 빌드를 해야한다.

 

 

1. 드라이버 바이너리 파일 다운로드 및 적용

각각 기기별 안드로이드 버전에 대한 드라이버는 아래에서 다운 받을 수 있다.
Android Device Driver https://developers.google.com/android/nexus/drivers

 

테스트 환경 기기는 Nexus 4이고, OS 버전은 Build:LMY48T / Branch:android-5.1.1_r19​ 이므로, 해당 환경과 동일한 드라이버를 다운로드 하였다.

 


 

해당 기기와 빌드할 안드로이드 버전을 선택하여 다운 받는다.

$ get Link_URL



 

각각의 드라이버 파일을 다운받아 압축을 풀면, 압출 파일당 하나의 쉘 스크립트가 나온다.

 

 


각각의 쉘 스크립트를 다운받은 소스 코드 경로에서 실행시켜, 드라이버 바이너리 파일들을 소스 코드에 적용한다.

 

 


해당 쉘 스크립트를 실행하면 다음과 같의 라이센스에 대한 내용이 나온다.

 


 

"more" 명령어를 이용하여 원문을 보여주기 때문에 Skip을 원한다면 Ctrl+C 키로 Skip 하고, "I ACCEPT"를 정확하게 입력하여 적용한다.

 


 

다운 받은 쉘 스크립트들을 실행하여 각각의 드라이버 파일들이 소스 코드에 적용되면, 기기에 적용할 이미지 파일 생성 빌드 환경 구성이 완료된다.

 

 

2. 빌드 환경 설정

$ source build/envsetup.sh

 

 

 

3. 빌드 하드웨어 타겟 설정​

  - 다음의 명령어를 입력하여 원하는 기기에 맞는 항목을 선택한다.

$ lunch


Nexus 4 기기에 빌드가 완료된 이미지를 올릴 것이므로 13. aosp_mako-userdebug를 선택하였다.

기기의 코드네임을 모를 경우 아래에서 해당 Nexus에 알맞은 코드네임을 찾아서 선택하면 된다.

Android Factory Imagehttps://developers.google.com/android/nexus/images

 

 

 

4. 빌드 시작 (참고 : VM환경 - CPU : Intel Core i5-4690K 3.50GHz, RAM : 4GB, 약 2시간 30분 소요)
​빌드 시 "-j"뒤 숫자는 CPU 코어의 2배를 하면 된다.

$ make -j4

 

 


 


5. 빌드 결과물 확인

$ cd out/target/product/{CodeName}

  ex) cd out/target/product/mako


  

 


6. 기기에 빌드된 이미지 적용

​생성된 이미지 경로를 export 한다.

$ export ANDROID_PRODUCT_OUT=/root/work/out/target/product/{코드네임}

  ex) export ANDROID_PRODUCT_OUT=/root/work/out/target/product/mako


adb 명령어로 기기가 정상적으로 연결되어 있는지 확인

$ adb devices

 

 

 

adb 명령어를 이용하여 부트로더로 리부팅한다.

$ adb reboot bootloader

 


 

Fastboot 명령어로 디바이스에 이미지를 플래싱 한다.

 $ fastboot flashall


 


다음과 같이 모델 번호와 빌드 번호가 AOSP on Mako로 빌드한 이미지가 올라간 것을 확인할 수 있다.

 


 

이번 포스팅에서는 원문에서 설명된 안드로이드 OS 컴파일을 위한 환경 구축과 소스코드 다운로드 방법을 설명한다.

안드로이드는 오픈 소스 라이센스로 구성되어 있기 때문에 구글에서는 이를 공개하여 git으로 다운로드 할 수 있도록 제공한다.

다운로드에 대한 원문 설명은 아래와 같다.

Android OS Soruce Code : http://source.android.com/source/index.html

 

원문에서는 GNU/Linux와 Mac OS (Intel/x86) 두 가지에 대한 환경 구축을 설명하지만, 이번 포스팅에서는 리눅스 환경에서 구축하는 것을 주로 하여 설명한다.

 

 

1. 환경 구축 요구사항

  - http://source.android.com/source/requirements.html

 

하드웨어 요구사항

  - 진저브레드(2.3.x) 이상의 OS 버전에서는 64-bit 환경 필요

  - checkout에 필요한 공간은 최소 100GB이며, 싱글 빌드시 150GB가 필요하고, 그 이상일 경우 최소 200GB를 필요

  - 가상 머신환경에서는 최소 16GB의 RAM/swap 크기 필요


소프트웨어 요구사항

  - Android 6.0 (Marshmallow) - AOSP master: Ubuntu 14.04 (Trusty)

  - Android 2.3.x (Gingerbread) - Android 5.x (Lollipop): Ubuntu 12.04 (Precise)

  - Android 1.5 (Cupcake) - Android 2.2.x (Froyo): Ubuntu 10.04 (Lucid)


Java Development Kit (JDK)

  - The master branch of Android in AOSP: Ubuntu - OpenJDK 8, Mac OS - jdk 8u45 or newer
  - Android 5.x (Lollipop) - Android 6.0 (Marshmallow): Ubuntu - OpenJDK 7, Mac OS - jdk-7u71-macosx-x64.dmg
  - Android 2.3.x (Gingerbread) - Android 4.4.x (KitKat): Ubuntu - Java JDK 6, Mac OS - Java JDK 6
  - Android 1.5 (Cupcake) - Android 2.2.x (Froyo): Ubuntu - Java JDK 5

 

주요 패키지

  - Python 2.6 -- 2.7 from python.org
  - GNU Make 3.81 -- 3.82 from gnu.org; Android 3.2.x (Honeycomb) and earlier will need to revert from make 3.82 to avoid build errors
  - Git 1.7 or newer from git-scm.com

 

 

2. 환경 구축

필자의 경우 Ubuntu 14.04.4 LTS 에서 구동되는 것을 확인하였으며, Build:LMY48T / Branch:android-5.1.1_r19의 소스 코드를 다운받아 빌드되는 것을 확인하였다.


  - 필요 패키지 설치

    $ apt-get update

    $ apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev ccache libgl1-mesa-dev libxml2-utils xsltproc unzip

 

 

3. Repo 설치

  - http://source.android.com/source/downloading.html

 

  - root 디렉토리 아래에 bin 디렉토리를 만들고 PATH 환경 변수 설정

$ mkdir ~/bin
$ PATH=~/bin:$PATH

  - Repo 도구를 다운로드하고 실행 퍼미션 설정

$ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
$ chmod a+x ~/bin/repo

 

 


4. Repo 클라이언트 초기화

  - 소스 코드를 다운받아 작업할 디렉토리 생성

$ mkdir WORKING_DIRECTORY
$ cd WORKING_DIRECTORY


  - 해당 git에 이름과 이메일 주소 등록

$ git config --global user.name "Your Name"
$ git config --global user.email "you@example.com"


  - 등록하지 않은 상태에서 Repo 클라이언트 초기화를 진행하면 다음과 같은 에러가 발생
 


 

  - 기본 마스터로 설정된 코드를 다운받고 싶다면 아래와 같이 입력

$ repo init -u https://android.googlesource.com/platform/manifest


  - 만약 원하는 특정 버전의 소스 코드를 받고 싶다면 -b 옵션으로 해당 브런치 네임을 사용하여 초기화

$ repo init -u https://android.googlesource.com/platform/manifest -b {BranchName}

  ex) repo init -u https://android.googlesource.com/platform/manifest -b android-5.1.1_r19


  - 원하는 브런치를 확인하기 위해서는 아래의 주소를 참고하면 된다.

Android SourceCode : http://source.android.com/source/build-numbers.html#source-code-tags-and-builds

 

 


  - 다음과 같이 'y'를 누르면 Repo 클라이언트 초기화 작업은 완료된다.

 

 

5. 안드로이드 소스 코드 다운로드 (android-5.1.1_r19 기준 약 40GB, 1시간 반 소요)

$ repo sync



 

  - 소스 코드 다운로드 완료 후, 저장된 소스 코드 목록

 

 

안드로이드 OS는 리눅스 기반의 환경에서 Dalvik/ART으로 하여금 앱이 동작하며, 따라서 리눅스에 대한 Native Code를 지원한다.

간단히 설명하자면, 리눅스 기반의 C/C++ 코드를 지원하며 안드로이드 NDK (Native Development Kit)를 이용하여 컴파일이 가능하다.

아래는 안드로이드 NDK를 받기 위한 경로이다.

 

안드로이드 NDK (Native Development Kit) : http://developer.android.com/ndk/downloads/index.html

 

다운받은 NDK를 압축 풀어보면, 아래와 같은 파일목록이 있는데, 이 중 ndk-build.cmd​를 이용하여 컴파일한다. 편의를 위해서는 환경변수를 등록하여 사용하는 것이 좋다.

 

 

안드로이드 기기에서 실행하기 위한 간단한 소스를 입력한 후 저장을 하자.

 

 

ndk-build.cmd를 이용하기 위해서는 해당 소스 파일이 jni ​디렉토리에 있어야 한다. 또한 Makefile을 만들어주어야 하는데 자세한 정보는 아래페이지에 설명되어 있으니 참고해서 사용하면 된다. 이번 포스팅에서는 간단하게 NDK를 이용한 안드로이드 환경에서의 Hello World 프로그램 작성이므로, 간단한 컴파일 방법까지만 설명한다.

 

Android.mk : http://developer.android.com/ndk/guides/android_mk.html

 

 

다음과 같이 Android.mk로 Makefile을 만들고 ndk-build를 실행하면 HelloWorld.c 파일이 컴파일 된 것을 확인할 수 있다.

 

 

컴파일된 바이너리 파일은 libs 디렉토리에서 확인할 수 있다.

 

 

실행을 위해 adb를 이용하여 안드로이드 기기의 /data/local/tmp 디렉토리에 push 한다.

 

 

안드로이드 USB 디버깅 모드 설정이 되어있지 않다면, 이전 포스팅에서 정리한 글을 참고하여 USB 디버깅 모드를 설정한다.

안드로이드 USB 디버깅 모드 설정 : http://blog.naver.com/programmist/220653236705

adb push를 이용하여 /data/local/tmp 디렉토리의 HelloWorld를 바로 실행하게 되면, 아래와 같이 실행 권한이 없기 때문에 실행이 되지 않는다.

 

 

chmod를 이용하여 실행 권한을 준다.

 

 

실행 권한을 주고 난 뒤, 해당 파일을 실행시키면 다음과 같이 정상적으로 HelloWorld가 뜨는 것을 확인할 수 있다.

 

 

다음과 같은 방법으로 일반적인 POSIX를 따르는 소스 코드는 NDK를 이용하여 구현이 가능하며, Linux에서 사용하는 많은 명령어들이 크로스 컴파일를 이용하여 공개되어 있다. 따라서, NDK에서 지원하지 않는 라이브러리가 있더라도 해당 라이브러리 소스 코드만 있다면 NDK를 이용하여 다양한 응용이 가능할 것이다.

 

안드로이드는 USB 디버깅 모드가 활성화 되어 있으면, 설치된 앱의 apk 파일을 추출하는 것이 가능하다.

 

안드로이드 USB 디버깅 활성화 방법은 이전 포스팅에서 설명하였다.
USB 디버깅 모드 설정 : 2017/05/02 - [Android] - 안드로이드 USB 디버깅 모드 설정

 

앱을 추출하기 위해서, 이전 포스팅에서 예를 들었던 Notepad for Android 앱을 추출하는 것을 예시로 설명한다.
Notepad for Android : https://play.google.com/store/apps/details?id=com.blogspot.logpedia.note2

 

안드로이드 앱을 설치하게 되면 기본 경로는 /data/app ​디렉토리에 apk 원본파일을 다운받아 저장한다.
저장되는 파일명은 해당 apk의 AndroidManifest.xml에 등록된 Package명-1.apk로 저장하게 되며, 이를 이용하여 저장되는 디렉토리와 해당 apk파일명에 대해 유추가 가능하다.

 

 

먼저 apk를 추출하기 전, 먼저 자신의 안드로이드 버전을 확인해야 한다.
안드로이드가 4,x에서 5.x로 넘어가면서부터 설치된 apk가 저장되는 경로가 바뀌어졌으며, 해당 경로를 직접적으로 확인하기 위해서는 아래의 그림처럼 루팅(Rooting)을 해야 확인 가능하다.

 

 

4.x 이하 버전에서는 다음과 같이 루트 권한을 가진 상태에서 경로를 확인해보면 설치된 앱의 apk가 /data/app ​디렉토리에서 앱의 ​Package명-1.apk 형태로 저장이 되어 있는 것을 확인할 수 있다.

따라서, AndroidManifest.xml를 분석하여 Package명을 알 수 있으면 4.x 이하 버전에서는 이와 같은 경로로 설치된 앱에 대하여 저장 경로가 유추가 가능하고, 이를 바탕으로 adb 명령어를 사용하여 다음 아래 그림과 같이 루트 권한 없이도 해당 앱을 추출하는 것을 확인할 수 있다.

 

 

4.x 이하 버전과는 다르게 5.x 버전 이후에서는 아래 그림처럼 apk가 저장되는 경로가 /data/app/Package-1 ​디렉토리로 변경되고, 해당 디랙토리 내의 base.apk ​형태로 앱이 저장되도록 변경되었다.

 

 

앞서, 설명한 것과 마찬가지로 adb 명령어를 이용하면, 루트권한 없이도 앱 추출이 가능하다.

 

 

 

구글 레퍼런스 폰은 새로운 안드로이드 OS를 내놓을 때마다 제일 빠르게 적용되는 폰을 의미한다.

그만큼 레퍼런스 폰은 안드로이드 OS를 탑재하였을 때 최적화 된 상태를 의미하며, 구글은 이러한 테스트 과정을 거치고 난 뒤, 팩토리 이미지(Factory Image) 혹은 OTA로 레퍼런스 폰 사용자에게 가장 빠르게 업데이트를 제공한다.

반면, 각 제조사는 새로 발표한 안드로이드 OS의 오픈소스를 토대로 각 제조사 기기에 커스터마이징을 하여 출시하기 때문에 발표시기와 다르게 업데이트가 늦어질 수 밖에 없다.

(과정 자체는 제조사에서 해본 적이 없기 때문에 정확하지는 않다...)


따라서, 안드로이드 OS에 대한 가장 빠른 최신 업데이트는 레퍼런스 폰의 특권이자 당연한 수순이라고 봐야 할 것이다.

(제조사는 다시 자사의 기기에 맞게 커스터마이징을 해야하니까...)


이와 같은 구글 레퍼런스 폰은 넥서스(Nexus) 시리즈로 판매하고 있으며, 기기는 여러 업체들을 통하여 다양한 업체들에 의해 제조하여 판매하고 있다. (삼성, LG HTC, Motorola, Asus 등등)


이번 포스팅에서는 넥서스 중, LG에서 제조한 넥서스 4을 바탕으로 루팅하는 방법을 설명한다.

(넥서스 루팅 도구로 넥서스 4, 5, 7(2015), 5X 까지 해본 결과 동일한 방법으로 루팅이 가능한 것을 확인하였다.)


루팅을 하기 위해서는 Nexus Root Toolkit(NRT)이 필요하다

Nexus Root Toolkit : http://www.wugfresh.com/nrt

 

루팅을 시작하기 전, 해당 기기는 USB 디버깅 모드가 설정되어 있어야 하며 설정 방법은 이전 포스팅에서 설명을 하였다.
USB 디버깅 모드 설정 : 2017/05/02 - [Android] - 안드로이드 USB 디버깅 모드 설정

 

 

우선 Nexus Root Toolkit을 설치하여 실행하면 아래와 같은 GUI를 볼 수 있다.

 

 

루팅을 하기 전, 해당 기기의 모델과 현재 사용하고 있는 "Change..." 버튼을 눌러 해당 기기와 안드로이드 OS에 대한 설정을 한다.

 

 

 

만일 bootloader에서 폰이 LOCK STATE가 locked로 되어 있다면, Unlock 버튼을 눌러 Yes를 선택하여 LOCK STATE를 unlocked으로 변경한다.

 

 

 

  

 

Root 버튼을 누르면 아래와 같이 USB 디버깅 모드가 활성화 되어 있는지 확인하는 창이 뜬다. 확인을 누른다.

 

 

다음과 같이 어떠한 작업이 수행될 것인지 설명을 한다. 확인을 누르면 루팅 작업을 수행한다.

 

 

다음과 같이 adb를 이용하여 bootloader로 진입한 후, 루팅 작업을 자동으로 수행한다. 

 

 

다음과 같이 adb를 이용하여 bootloader로 진입한 후, 루팅 작업을 자동으로 수행한다. 

 

 

adb로 접근하여 'su' 명령어를 실행하여 정상적으로 루팅이 되었는지 확인한다.

 

 

+ Recent posts