Android

Android Emulator System uid App 빌드하기

태인킴 2024. 3. 26. 19:07
반응형

안드로이드 애뮬레이터를 사용해서 시스템 앱으로 설치해서 테스트 해보고 싶은신적 있으신가요?

저희 회사는 안드로이드 단말기를 생산하는 회사라서 대부분 시스템 앱으로 빌드하여 배포합니다. 그래서 애뮬레이터에서 시스템 앱으로 돌리려고 삽질을 좀 했습니다.

 

 

1. 애뮬레이터 설치

애뮬레이터 설치 부터 신경써야 합니다. 아래 그림과 같이 Target 정보에 Google APIs 가 아닌 이미지를 선택해야 합니다. 그래야 AOSP 오픈소스에서 제공하는 platform key를 사용하여 apk를 시스템 앱으로 설치할수 있습니다.

Google APIs 가 아닌 이미지 선택

 

 

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

 

반응형