안드로이드 애뮬레이터를 사용해서 시스템 앱으로 설치해서 테스트 해보고 싶은신적 있으신가요?
저희 회사는 안드로이드 단말기를 생산하는 회사라서 대부분 시스템 앱으로 빌드하여 배포합니다. 그래서 애뮬레이터에서 시스템 앱으로 돌리려고 삽질을 좀 했습니다.
1. 애뮬레이터 설치
애뮬레이터 설치 부터 신경써야 합니다. 아래 그림과 같이 Target 정보에 Google APIs 가 아닌 이미지를 선택해야 합니다. 그래야 AOSP 오픈소스에서 제공하는 platform key를 사용하여 apk를 시스템 앱으로 설치할수 있습니다.
2. 매니패스트의 system uid 입력
아래와 코드를 매니패스트 최상단의 입력되어야, 시스템 앱 권한으로 앱이 실행이 됩니다.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
android:sharedUserId="android.uid.system"
xmlns:tools="http://schemas.android.com/tools">
3. apk sign
애뮬레이터를 설치했다면 APK를 시스템 앱으로 sign해서 밀어넣어야 합니다. 아래 명령어로 apk를 sign하고 /system/app/<folder> 에 apk를 넣는 원리 입니다. 저 공간에 apk가 있으면 reboot하는 과정에서 시스템 앱으로 인지하고 install을 시도할 것입니다. 여기서 삽질을 좀 했는데, /system/priv-app/<folder> 이곳에 넣어야 한다는 의견도 있었는데, 괜히 넣었다가 이미지가 부팅이 안되어서 한참 시간을 버렸습니다. 그리고 신경써야할 부분이 adb remount 이후에 에러가 떨어질수 있는데 -writable-system 옵션을 신경써서 해주어야 adb remount 시, 성공 메세지가 출력 됩니다. 그리고 또 신경써줘야 하는 부분이, 저는 windows 11 os에 안드로이드 스튜디오 환경을 사용합니다. 그래서 안드로이드 스튜디오의 Device Manager에서 애뮬레이터를 부팅하는 것과 'emulator -avd <EMULATOR_AVD_NAME> -writable-system' 명령어를 사용하여 애뮬레이터를 부팅하는 것은 다른 결과를 가져옵니다. 주의해주세요.
emulator -list-avds
emulator -avd <EMULATOR_AVD_NAME> -writable-system
adb root
adb remount
apksigner sign --key platform.pk8 --cert platform.x509.pem <YourAPK>
adb shell mkdir /system/app/<YourAppFolder>
adb push <YourAPK> /system/app/<YourAppFolder>/
adb reboot
4. pk8과 pem 파일을 jks로 변경하는 방법
jks로 변경하면 안드로이드 스튜디오에서 편하게 사용할 수 있습니다. 아래 포스팅을 참고해주세요.
https://coding-food-court.tistory.com/352
'Android' 카테고리의 다른 글
pk8, pem 파일을 jks로 변경하는 방법(Android) (0) | 2024.03.27 |
---|---|
repo init mirror 옵션 vs reference 옵션 차이 (0) | 2024.01.31 |
Activity orientation 상황에서 액티비티 재생성 방지 (0) | 2023.06.10 |
안드로이드 해시키 구하는 방법, 카카오 API (2) | 2021.04.12 |
BaseObservable을 이용한 inverseBinding (0) | 2021.02.11 |