안드로이드 앱을 만들 때 필자는 내부 DB로 SQLite를 쓰고 있다.
이때 SQLite로 생성된 내부 DB는
data/data/[package name]/database/.db 위치에 있다.

그런데 안드로이드 폰을 USB로 연결하여 해당 경로로 들어가보면 data 폴더가 비어있다.
이는 안드로이드 디바이스가 data 폴더에 접근하지 못하도록 막았기 때문이다.

안드로이드 폰은 리눅스 운영체제를 사용하기 때문에 System 파티션과 data 파티션으로 구분되어 관리된다.
data 폴더가 속해있는 곳은 System 파티션으로,
System 파티션에는 시스템에 대한 정보나 펌웨어 등 중요한 파일들이 저장되어 있어 사용자의 접근이 차단되어 있다.

때문에 data 폴더에 접근하기 위해서는 디바이스를 Rooting하여 접근 권한을 얻어야 한다.


Rooting
사용자가 기기나 운영체제를 해킹하여 최고 관리자 권한을 얻는 것.
(리눅스에서 최고 권한을 가진 계정이 root)

사용자 본인의 디바이스를 해킹하는 것이라 법적인 책임은 없으나 몇 가지 알아두어야 할 점들이 있다.

  1. 시스템 보안 취약 - 금융 앱 사용 불가능
    앱 설치에 제한이 없어져 악성 앱을 설치하게 될 수도 있고,
    정보 유출의 위험성이 높아지기 때문에 rooting 된 디바이스에서는 금융 앱이 작동하지 않도록 되어 있다.
    임시로 unRooting 상태로 만들어 금융 앱을 사용하는 방법도 있지만, 일부 기관은 불가능 할 수도 있다.
  2. 시스템 불안정 - 벽돌화, 무한 부팅 등
    rooting 중 또는 rooting 후 사용자 부주의로 인하여 발생하는 문제.
    디바이스가 부팅이 안되거나, 부팅되더라도 아무 작동도 하지 않을 때를 벽돌화 되었다고 한다.
  3. A/S 불가능
    rooting 기록이 기기에 남기 때문에 사용자 부주의로 인한 고장이 확실시 된다.
    무상 수리는 물론이고, 심할 경우 유상 수리도 거부될 수 있다.
  4. 수명 단축
    사용자의 입맛에 맞게 디바이스를 변형하다가
    아무런 지식 없이 CPU를 오버클럭하거나 배터리 절약을 위해 다운클럭 등을 시도 하면
    디바이스에 무리가 가해져 하드웨어 수명이 단축될 수 있다.

이와 같은 단점들 때문에 관련 지식이 풍부한 사용자들 외에는 rooting 을 추천하지 않는다.
하더라도 사용하지 않는 안드로이드 폰을 rooting 하길 바란다.

필자는 디바이스를 변형할 목적이 전혀 없고 내부 DB만 볼 생각이지만
혹시 모르는 일이라 안드로이드 앱 개발 용 (혹은 게임, 비상용)외에 쓰지 않는 다른 안드로이드 폰에 rooting 했다.
하여 본 내용은 GALAXY Note와 Windows를 기준으로 써졌음을 미리 알린다.


Kingo ROOT
Kingo 사이트에서 Windows용을 다운로드 받아 디바이스를 USB 연결하여 rooting 하거나
디바이스에 Android 용을 다운로드 받아 .apk 파일을 실행, 설치해서 rooting 한다.

Windows

  1. USB 디버깅 허용
    안드로이드 폰과 프로그램을 연결하려면 기기의 USB 디버깅 모드를 켜야 한다.
    개발자 옵션이 열려있는 디바이스라면 USB 디버깅을 체크한다.
    그렇지 않은 디바이스라면 설정의 디바이스 정보로 들어가 빌드 번호를 계속 터치하여 개발자 옵션을 활성화 시킨다.
    보통 개발자 옵션은 민감한 설정들을 포함하고 있어 일반 사용자들이 만질 수 없도록 숨겨져 있다.
  2. 알 수 없는 출처 허용
    외부에서 프로그램을 설치해야 하기 때문에
    환경설정의 보안에서 알 수 없는 출처 앱을 다운로드 할 수 있도록 허용해준다.
  3. Kingo ROOT 실행
    사이트에서 다운로드 받은 설치 파일을 실행하여 Kingo ROOT를 설치 후 실행 시킨다.


      기기를 USB 연결하면 프로그램이 자동으로 몇 개의 드라이버를 설치 후 기기를 인식한다.
      인식된 기기 화면에는 연결됐다는 문구 Connected 가 쓰여있다.


      프로그램 화면 하단에 뜬 ROOT 버튼을 클릭하면 rooting이 시작된다.


      프로그램과 기기 화면의 퍼센트가 똑같이 올라가는 것이 보일 것이다.
      (캡쳐를 동시에 못해서 퍼센트가 다른 건 너그러이 넘어가주시길)


      rooting 이 끝나면 ROOT SUCCEED 로 바뀐다.
      재부팅을 하지 않으면 문제가 발생할 수 있으므로 반드시 두 번 하도록 한다.


Android

    기기 안에 apk 파일을 다운로드 받아 실행하면 Kingo ROOT가 설치된다.
    설치된 앱을 실행하여 One Click Root를 한 번만 클릭하면 끝난다.
    rooting이 성공적으로 끝나면 재부팅하는 것을 잊지 말자.




코드에서 Rooting 확인하기
시스템에 super user 권한을 요청하는 명령어 ‘su’를 사용한다.

public class MainActivity extends AppCompatActivity {
private final String TAG = "Root";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
       
        try{
            Runtime.getRuntime().exec("su");
            Log.d(TAG, "root OK");
        }catch(Exception e){
            Log.d(TAG, "root NO");
        }
    }
}



안드로이드 디바이스의 폴더에 접근할 수 있는 툴
필자는 이전에 다운로드 받은 ASTRO가 권한 설정이 불가능하기에
플레이 스토어에서 root file 을 검색하여 아무거나 다운로드 받았다.
설치한 앱을 실행하여 bata 폴더를 열면 Kingo가 앱의 root permission 허용 여부를 묻는 알림 창이 나타난다.
허용해야 data 폴더의 내용이 보인다.

여기서 해야 할 것은 PC에서 접근이 가능하도록 하는 것이다.
현재는 기기 내부에서만 접근이 가능한 상태로, USB에 연결하여 DB 파일을 PC로 가져올 수 있도록 해야 한다.
USB를 연결해서 가져오려면 해당 경로 data/data/[package name]/database/.db 의
모든 파일(data, data, [package name], database, .db)의 접근 권한을 수정해주어야 한다.

고 하는 데 필자는 잘 안되어서 메일로 보내서 가져왔다. (야매다!)


DB Browser for SQLite
DB 파일에 접근해서 가져오는 것까지 끝냈다면 위 링크에서
본인의 운영체제에 맞는 프로그램을 다운로드 받아 설치한다.
DB Browser for SQLite를 실행하여 DB 파일을 불러오면 정보를 볼 수 있다.