https://www.clien.net/service/board/lecture/11092791CLIEN
위 글에 indirex 님이 아래 명령어로 system app을 제거하는 방법을 소개해 주셨습니다.
adb shell pm uninstall -k --user 0 패키지명
그런데, 제거한 앱이 복구하기 힘든 경우가 있습니다. (DEX_PREOPT = true인 APK만 존재하는 경우)
그래서 복구 툴 하나를 만들었습니다.
android-6.x.x(Marshmallow) 용, 아마 7.x.x(Nougat) 에서도 동작하리라 봅니다.
https://github.com/textkiller/android-tool/tree/android-6.x.x/prebuilt
android-8.x.x용 (Oreo)
https://github.com/textkiller/android-tool/tree/master/prebuilt
실행 방법 아래와 같습니다. (adb 설치되어 있어야 함)
adb push atool /data/local/tmp
adb push atool.jar /data/local/tmp
adb shell "chmod 755 /data/local/tmp/atool"
adb shell "/data/local/tmp/atool pm install-existing-package --user 0 패키지명"
* 맥이나 리눅스를 사용하시는 분은 아래 한줄로도 가능합니다.
./atool.sh pm install-existing-package --user 0 패키지명
제가 맥에서만 테스트 했는데 윈도우에서 어떨지 몰라 아래 명령어 하나 더 추가했습니다.
adb shell "chmod 755 /data/local/tmp/atool"
2017/09/03: Nougat에서 문제가 있어서 다시 수정해서 올렸습니다.
android-6.x.x branch는 현재 Nougat, Marshmallow 모두 지원합니다.
아래기기에서 테스트했습니다.
Marshmallow: Nexus 5
Nougat: G5
Oreo: Nexus 5x
생각 보다 단순합니다. ㅋㅋ app_process 실행파일로 java api를 호출할 수 있는 process를 생성하고 거기서 API를 호출한 것 뿐이에요. app_process는 zygote하고도 관련 있어요.
adb shell에서 실행시켰으니, 생성된 process는 shell uid를 가지고 있구요.
com.android.shell 요게 shell uid와 매핑되어 있는 shell package고,
이 package가 갖고 있는 permission으로 실행할 수 있는 API는 모두 실행 가능합니다. ㅎㅎ
처음 공유해 주신 가이드에 나와 있듯이 MANAGE_USER permission이 빠져서 "adb shell pm hide" 를 실행 못하는 것도 Google security patch로인해 com.android.shell의 AndroidManifest에서 MANAGE_USER permission이 빠져서 그런 거구요.
사용법 조금만 자세히 알려 주시면 안될까요?
다운로드는 "Clone or Download" 에서 "Download ZIP" 으로 통째로 받으실 수도 있어요.
adb push atool /data/local/tmp adb push atool.jar /data/local/tmp adb shell "chmod 755 /data/local/tmp/atool" adb shell "/data/local/tmp/atool pm install-existing-package --user com.lge.lms" 이렇게 한칸뛰어쓴채 줄줄이 입력했거든요? 혹시명령어 이렇게 이어서 입력하는게 아니거나 어디 잘못된 방식으로 한부분이 있는지좀 봐주세여ㅠ 저 절실히 파일복구 살려야하는ㅠ 도와주세요 adb: error: target '/data/local/tmp/atool pm install-existing-package --user 0 com.lge.lms' is not a directory 라는 메시지가 뜹니다
adb ~~~ 엔터
adb ~~~ 엔터
adb ~~~ 엔터
이렇게 엔터로 구분됩니다.
adb push atool 여기빈칸 빠짐 ~~~
adb push atool.jar 여기 빈칸 빠짐 ~~~
adb shell “chmod 755 여기 빈칸 빠짐 ~~~ 따옴표도 빠졌네요
본문에 작성해 놓은 명령어를 한줄씩 복사하시고, 오른쪽 마우스 버튼 클릭 -> 붙여넣기 해주세요.
당연히 마지막 명령어 패키지명은 수정해서 넣으셔야 하구요
모든 절차 다 했구요 atool 755 권한까지 다 줬습니다 ㅜㅜ
마지막 명령어를 치면 Aborted가 뜹니다ㅜㅜ 권한문젠가 싶어서 push했던 모든 파일 755 줘도 안되네요 ㅜㅜ
공장초기화하려면 다시 설정해야할게 한두가지가 아닌지라... 도움을 받고 싶습니다