apk 추출로 검색을 해보면, 안드로이드 기기에 설치되어 있는 apk 파일 추출하는데 있어서, 어떤 앱을 안드로이드 기기에 새로 설치를 하는 방법이 많이 나오는데... 나는 앱 설치고 뭐고 그냥 apk 추출을 하고 싶다.
나의 경우는, 개발용 폰을 따로 지원 받았는데 내 Google 계정 로그인 하기도 싫고(나도 쓰고, 남도 쓰고, 다 돌려쓰는 단말이기에)해서 알아 보았다.
AOS 개발하는 사람들은 무조건 adb 설치되어 있을테니, 간단히 adb를 이용해서 추출하는 방법을 정리하고자 한다.
명령어는 아주 간단하게 다음과 같다.
adb pull [apk 설치되어 있는 경로] [apk 추출할 경로]
문제는 안드로이드 기기에 "apk 설치되어 있는 경로"를 어떻게 아냐..인데 그건 다음 명령어를 이용하면 된다.
adb shell pm list packages -f -3
옵션으로 적은 내용에 대한 다음과 같다.
- -f : 패키지ㅣ명과 연관된 apk 파일 경로 보여줌(apk 추출을 위해 경로가 필요하므로 필수)
- -3 : 시스템 패키지가 아닌 3rd 패키지만 보여줌 (옵션)
- -s : 시스템 패키지만 보여줌 (옵션)
위 "adb shell pm" 명령어에 -3, -s 옵션 주지 않아도 출력은 되는데 필요한 부분만 간단하게 출력하고자 할 때 사용하면 된다. 만약 package 까지 안다고 하면, grep 명령어도 추가 작성하면 된다.
adb shell pm list pakcaegs -f | grep "XXXX"
자, 나는 블루투스 개발할 때 무조건 사용하는 nRF Connect apk를 추출하고자 한다. 개인용 폰에 설치되어 있는 nordic apk를 추출해서 개발용 폰에 설치하고자 한다.
일단 개인용 폰을 연결하고, "adb shell pm list packages -f"를 입력하면 다음과 같다.
옵션을 따로 주지 않아, 설치되어 있는 많은 리스트가 나오는데 형태를 보면 다음과 같다.
package:/.../.../app/XXX.XXX.XXX.apk=YYY.YYY.YYY
중요한 부분은 .apk 이전까지의 설치되어 있는 경로 부분이다. 일단 리스트가 너무 많으니 grep을 통해서 내가 필요한 부분만 보자.
apk 가 설치되어 있는 경로까지 알았으니 "adb pull" 명령어를 통해 추출해 보자.
adb pull /data/app/no.nordicsemi.android.mcp-wZ_s001ECLWEekRUwN6sdQ==/base.apk nRFConnect.apk
apk 가 잘 추출되었음을 알수 있고, 해당 apk 를 "adb install" 명령어를 통해 다른 디바이스에 설치하기만 하면 된다.
근데, 만약 adb install을 했는데 다음과 같은 에러가 뜬다면?
$ adb install nRFConnect.apk
Performing Streamed Install
adb: failed to install nRFConnect.apk: Failure [INSTALL_FAILED_VERIFICATION_FAILURE]
다음 명령어 작성해주고 다시 adb install 시도
adb shell settings put global verifier_verify_adb_installs 0
설치도 잘되었고, 물론 실행도 잘된다.
'Android' 카테고리의 다른 글
Android Studio .gitignore 적용 안될 때 (0) | 2023.03.17 |
---|---|
Android Studio 빌드 후 자동 실행 안될 때 (0) | 2023.03.13 |
[AOS] 코틀린(Kotlin) 코루틴 채널(Channel) (0) | 2023.02.09 |
[AOS] 코틀린(Kotlin) 코루틴 취소(Coroutines cancel) (0) | 2023.02.06 |
[AOS] 코틀린(Kotlin) 코루틴 기초(Coroutines basic) (0) | 2023.02.04 |