아마 사람이 살면서 스마트폰의 앱을 가장 많이 지울때는 역시 막 공장초기화를 끝내고 나서가 아닐까 생각합니다. 항상 지울 앱이 50여개가 넘거든요. 그런데 그걸 일일히 하나하나 설정에 들어가서 지우려니까... 여간 귀찮고 힘든게 아닙니다. 게다가 몇몇 앱들은 삭제가 안되고 오직 비활성화만 됩니다!
그걸 좀 자동화해보고 싶어졌습니다. 무식한 방법으로요.
제일 먼저 필요한 것은 이 글에서 잠깐 소개했던, 패키지명을 알아내는 앱입니다. Package Name을 써도 좋고 Package Name Viewer 2.0을 써도 좋습니다. ADB를 이용해서 단순히 패키지명 리스트만을 뽑아낼 수 있지만, 그러면 그 앱이 무엇을 하는지 모르게 되니까 그 방법은 추천하지 않습니다.
Package Name Viewer 2.0은 체크한 앱들의 리스트를 텍스트 혹은 CSV로 내보낼 수 있습니다. CSV가 더 편하지만, 앱 이름에 한글이 섞이면 CSV가 꼬여버리는 문제가 있으므로, 지우고 싶은 앱들을 체크한 후 텍스트로 복사해서 원하는 텍스트 에디터에 붙여넣고 그걸 PC로 복사해야 합니다.
대충 아래와 같은 식으로 정리하면 됩니다. 중간중간 빈 줄에는 Launcher: <blabla>
같은 식의 내용이 있었는데, 그건 전혀 중요하지 않으므로 지웠습니다.
app:Briefing
package:flipboard.boxer.app
app:Google Play Services for AR
package:com.google.ar.core
app:Google VR 서비스
package:com.google.vr.vrcore
이런 식으로 제거하기를 원하는 앱들의 리스트를 전부 PC로 옮겨넣습니다.
이제 app: 뒤에 있는 패키지명들을 따로 빼서 그것들만 새로 텍스트에 넣습니다.
flipboard.boxer.app
com.google.ar.core
com.google.vr.vrcore
이 텍스트 파일을 apptoremove.txt
라는 이름으로 저장합니다.
제가 쓰는 파일입니다만, 기기나 제조사별로 펌웨어에 포함되어 있는 앱이 다를 수 있으므로, 단순히 참고만 해주세요.
이제 다음 내용을 복사해서 RemoveUserApps.bat
이란 이름으로 저장해주세요.
@echo off
for /f "delims=" %%g in (apptoremove.txt) do (
adb shell am force-stop %%g
adb shell am kill %%g
adb uninstall %%g
adb shell pm uninstall %%g
adb shell pm uninstall --user 0 %%g
)
pause
이 스크립트가 하는 일은 간단합니다.
- 먼저 해당 앱을 강제로 종료합니다. force-stop이 안되면 kill로 종료합니다.
- 통상적인 방법으로 제거를 시도합니다. adb uninstall과 adb shell pm uninstall이 하는 역할은 같은 것으로 알고 있지만, 혹시나 해서 다 넣었습니다.
- 이제 제거가 안되는 앱들은 그냥 사용자에게서 안보이게 숨겨버립니다. 이 글에서 썼던 방법입니다.
작업하면서 FAILURE같은 오류 메세지가 보일테지만, 무시합니다. 1번과 2번 방법으로 제거가 안되었을 때 표시되는 문구인데 어짜피 3번 방법으로 강제로 숨겨버리기에 결과적으로는 원하는 바를 얻게 됩니다.
다만 이렇게 하면 찌꺼기가 하나 남게 됩니다. 3번 방법으로 없앤 앱들이 설정의 앱 리스트에 여전히 남아있는 경우가 있습니다. 이럴 경우 단순히 그 앱에 들어가서 '강제 종료'를 눌러주면 해당 앱이 앱 리스트에서 완전히 사라지게 됩니다. 이런 경우 재부팅을 해도 앱 리스트에 그대로 남아있기 때문에 반드시 '강제 종료'를 눌러줘야 합니다.