티스토리 뷰

 안드로이드 최신 버전의 SDK에서 pm명령어 모음입니다. adb shell로 접근하여 얻을 수 있는 명령어입니다. adb shell 접근 방법은 아래에서 설명하겠습니다.

 명령어를 통해 앱을 설치하거나, 삭제하고, 사용자를 추가하고, 삭제 할 수 있는 명령어도 있습니다. 현재 기본값으로 셋팅 된 설치 경로를 가져오는 get-install-location 도 있습니다. 일반적으로 [0/auto]가 설정되어 있습니다.

ADB pm 명령어

usage: pm list packages [-f] [-d] [-e] [-s] [-e] [-u] [FILTER]
       pm list permission-groups
       pm list permissions [-g] [-f] [-d] [-u] [GROUP]
       pm list instrumentation [-f] [TARGET-PACKAGE]
       pm list features
       pm list libraries
       pm path PACKAGE
       pm install [-l] [-r] [-t] [-i INSTALLER_PACKAGE_NAME] [-s] [-f] PATH
       pm uninstall [-k] PACKAGE
       pm clear PACKAGE
       pm enable PACKAGE_OR_COMPONENT
       pm disable PACKAGE_OR_COMPONENT
       pm disable-user PACKAGE_OR_COMPONENT
       pm set-install-location [0/auto] [1/internal] [2/external]
       pm get-install-location
       pm createUser USER_NAME
       pm removeUser USER_ID

pm list packages: prints all packages, optionally only
  those whose package name contains the text in FILTER.  Options:
    -f: see their associated file.
    -d: filter to only show disbled packages.
    -e: filter to only show enabled packages.
    -s: filter to only show system packages.
    -3: filter to only show third party packages.
    -u: also include uninstalled packages.

pm list permission-groups: prints all known permission groups.

pm list permissions: prints all known permissions, optionally only
  those in GROUP.  Options:
    -g: organize by group.
    -f: print all information.
    -s: short summary.
    -d: only list dangerous permissions.
    -u: list only the permissions users will see.

pm list instrumentation: use to list all test packages; optionally
  supply  to list the test packages for a particular
  application.  Options:
    -f: list the .apk file for the test package.

pm list features: prints all features of the system.

pm path: print the path to the .apk of the given PACKAGE.

pm install: installs a package to the system.  Options:
    -l: install the package with FORWARD_LOCK.
    -r: reinstall an exisiting app, keeping its data.
    -t: allow test .apks to be installed.
    -i: specify the installer package name.
    -s: install package on sdcard.
    -f: install package on internal flash.

pm uninstall: removes a package from the system. Options:
    -k: keep the data and cache directories around after package removal.

pm clear: deletes all data associated with a package.

pm enable, disable, disable-user: these commands change the enabled state
  of a given package or component (written as "package/class").

pm get-install-location: returns the current install location.
    0 [auto]: Let system decide the best location
    1 [internal]: Install on internal device storage
    2 [external]: Install on external media

pm set-install-location: changes the default install location.
  NOTE: this is only intended for debugging; using this can cause
  applications to break and other undersireable behavior.
    0 [auto]: Let system decide the best location
    1 [internal]: Install on internal device storage
    2 [external]: Install on external media

이 중 가장 많이 사용하는 명령어가 앱을 강제로 SD카드로 이동하는 명령어 일 겁니다. 해당 명령어도 아래와 같이 변경되었습니다.

설치 경로의 기본 값을 가져오는 명령어와 설정하는 명령어입니다.

pm get-install-location //기본값으로 지정된 설치 경로를 불러옵니다.
pm set-install-location 0/1/2 //강제로 경로를 설정합니다.

 위의 명령어를 윈도우, MAC OS, 리눅스에서 사용하시면 됩니다. set 뒤에 숫자를 주시면 되고, 값은 0 - 자동 설정(앱에서 지정한 경로에 따라 설치됩니다. 대부분 내장 메모리에 설치됩니다. 1 - 무조건 내장 메모리 우선 설치, 2 - 무조건 SD카드 우선 설치가 됩니다. SD카드에 설치가 불가능한 앱들도 설치가 가능하게 변경됩니다.

 이렇게 간단한 명령어를 사용하여 변경 할 경우 장점은 내장 메모리 용량이 적을 경우에는 이득이 되지만, 폰을 재부팅 하실 경우에는 자동 실행 되지 않는 앱들이 발생합니다. 푸쉬가 오지 않는 경우도 있으니 2번은 권장 하지 않습니다. 그리고 내장 메모리의 용량이 옛날 초기 폰들에 비해 1기가 이상의 용량을 가지고 있습니다. 갤럭시 넥서스의 경우에도 6기가 정도의 용량을 가지고 있기에 불필요한 작업입니다.


ADB shell 접속 및 명령어 사용 방법 - 윈도우

 adb shell 사용하기 전에 반드시 해당 기기의 윈도우 드라이브를 설치해야 합니다. 설치 방법은 Nexus 4.0.4 루팅에서 1번 안드로이드 SDK 설치 하는 방법을 참고해주세요.

   http://www.thdev.net/170


모든 설명은 android-sdk의 위치가 c:\(c 드라이브) 아래에 있다는 가정하에 진행합니다.

cmd를 실행 합니다. 시작에서 cmd라고 입력하시면 실행 가능합니다.


cmd에서 아래 명령어를 이용하여 경로를 android-sdk-windows\platform-tools로 이동합니다.

cd \android-sdk-windows\platform-tools


기기와 PC와의 연결을 확인하셨다면 adb shell 명령어를 입력하시면 됩니다.

adb shell

adb shell 명령어를 작성하였으면 이제 위에서 봤던 pm 명령어를 사용 할 수 있게 되었습니다.

 일단 설정 된 값을 불러옵니다. pm get-install-location 을 통해 가져온 값은 0[auto] 의 값입니다. 앱에 따라 자동 설치되도록 설정되어 있습니다.


 pm set-install-location 1/2 명령을 통해 설정합니다. 설정된 값은 아래와 같이 2[external]로 설정되었습니다. 원래대로 돌리실려면 0 을 입력하시면 됩니다.


ADB shell 접속 및 명령어 사용 방법 - 리눅스

 Linux는 윈도우와는 다르게 드라이브 설치가 필요하지 않습니다. 사용하기 편하도록 PATH를 등록하고 진행하도록 하겠습니다. PATH 등록 방법은 Mac os와 동일합니다. 그전에 설치해야할 android-sdk를 다운 받아 설치해두고, Eclipse에서 설치를 진행 하셔야 합니다.


PATH 등록

 다운받아 설치해 둔 android-sdk의 경로를 확인합니다. 저는 사용자 폴더아래에 두었기에 경로는 /home/taehwan/android-sdks/platform-tools의 경로를 사용하고 있습니다. 설치하시는 폴더에 따라 경로가 달라집니다.

경로를 우선 확인 합니다. 경로 확인 명령어는 pwd 입니다. 아래 경로를 복사해 둡니다. 복사 방법은 ctrl+shift+c 입니다.


새로운 창(Ctrl+shift+n)을 열고 사용자 홈 디렉토리로 이동합니다. cd ~

사용자 홈 디렉토리로 이동하고 명령어에 다음을 입력합니다.


편집기가 실행 되면 좀전에 복사한 내용을 아래와 같이 입력하고 저장합니다.

export PATH="$PATH:안드로이드 sdk 경로"
export PATH="$PATH:/home/taehwan/android-sdks/platform-tools"


저장이 완료되면 창을 닫고 새로운 터미널을 실행 하고, adb shell을 입력합니다.

adb shell
pm get-install-location
pm set-install-location 0/1/2

만약 adb shell을 실행하는데 있어 아래와 같은 내용이 표시될 수 있습니다.

insufficient permissions for device

이때 해결 방법은 아래와 같습니다. 해당 명령어를 입력하고 adb shell을 다시 실행합니다.

슈퍼유저 권환으로 adb 서버를 다시 실행하면 문제가 해결 됩니다. 꼭 platform-tools 폴더로 이동 한 후 실행 하세요.

android-sdks\platform-tools 폴더로 이동하고 아래 명령어를 실행합니다.
./adb kill-server
sudo ./adb start-server
비밀번호 입력



ADB shell 접속 및 명령어 사용 방법 - Mac

 Mac에서도 리눅스와 같이 PATH 등록을 하고 작업을 진행하겠습니다. android-sdk 설치 방법은 윈도우와는 다르게 진행하셔야 합니다. Eclipse를 설치하고 다운받은 sdk를 등록하신 다음 진행 하시면 됩니다.


PATH 등록

 다운 받아 설치해둔 android-sdk의 경로를 확인합니다. 저는 사용자 폴더의 개발폴더 아래에 저장해두었기에 경로가 좀 길게 됩니다.

 제가 설치해둔 경로는 /Users/taehwan/Library/Developer/android-sdk-macosx/platform-tools 의 경로입니다. 해당 경로를 복사해두시고 진행하면 됩니다.


새로운 창을 하나 더 열고(cmd+n) 진행합니다.

명령어는 vi .bash_profile 를 입력합니다.


Python을 설치하면서 자동 생성된 PATH가 보입니다. 이와 동일한 형태로 추가 작성합니다.

 vi로 실행했기에 vi 명령어를 아셔야 합니다. 기본적으로 입력은 i또는 a를 사용하시면 됩니다. 이동은 키보드로 화살표로 하시면 되구요. MAC에서는 cmd+c, cmd+v가 됩니다. 그대로 붙여넣기 하시면 됩니다. 저장은 esc 를 누르고 :wq 로 하시면 됩니다.

여러개의 경로를 등록할 경우
export PATH="${PATH}:안드로이드 sdk 경로:경로:경로"
하나씩 등록 할 경우
export PATH="${PATH}:안드로이드 sdk 경로"
export PATH="${PATH}:/Users/taehwan/Library/Developer/android-sdk-macosx/platform-tools"


저장을 하셨다면 해당창을 터미널을 닫고, 새로운 터미널을 여시면 됩니다.

명령어는 윈도우에서와 동일합니다. 역시 USB 연결을 해두시면 되고, 드라이브 설치는 필요치 않습니다.


명령어

adb shell
pm get-install-location
pm set-install-location 0/1/2


폰에서 적용 확인

일단 install-location의 값이 0(기본값) 일 때에는 아래와 같이 SD카드로 이동이 비활성화 되어 있을 겁니다.

비활성화 되어있고, USB storage app 역시 0.00B가 뜨고 있습니다.


SD카드에 설치를 적용한 모습입니다.

위와 다르게 SD카드 이동이 활성화 된 모습입니다. 아직 이동하지 않았기에 용량은 0.00B가 표시됩니다.


 이제 이동을 해보았습니다. 내장메모리로 이동이 활성화 되고, USB 저장소에는 0.00B가 아닌 45.72MB가 이동된 모습을 확인 할 수 있습니다. 무려 45MB의 용량이 확보된 모습입니다.


마무리

 안드로이드도 고용량의 프로그램들이 늘어나고 있고, 1GB 정도의 용량으러 허덕이는 폰들이 많이 있습니다. 이미 이 방법을 알고 사용하시는 분들도 많을 것이라고 생각됩니다. SD카드로 이동을 해두면 용량면에서는 이득이 되겠지만.. 프로그램을 사용하는데에는 입출력이 많아 느려지게 되는 원인이 될 수 있습니다. 자주 사용하지 않는 그런 프로그램들만 SD카드로 이동하시길 권장합니다.

 게임의 경우 대부분 SD카드를 사용하도록 설정되어 있습니다. 그리고 제조사에서 설치해 놓은 앱들과 몇몇 앱들은 이동이 되지 않습니다.





댓글