Android Package Manager #01
by Sihyeon Kim
Android Package Manager #01
프로젝트 진행 현황
진행 현황 2019.06.28
- 스마트폰 기기에 안드로이드 마시멜로 6.0.1버전 설치
- adb를 통해 packagemanager dump 출력 시도
- dump 출력 시 확인해야 하는 부분에 대해 멘토에게 문의(06.26) 후 답변 기다리는 중
- pm(pacakage manager) 디렉토리에 포함된 소스코드 확인
앞으로의 진행 계획
- 멘토 답변을 받은 뒤 adb을 통해 package manager 확인
- pm 디렉토리 내에서 구체적으로 어느 소스 코드를 봐야하는지 선정 후 학습
Android Package Manager and Installer
Android Package Installer
- Android에 Package를 설치하는 기본 애플리케이션이다.
- Application/Package를 관리하는 사용자 인터페이스를 제공한다.
- InstallAppProgress Activity를 호출해 사용자의 명령을 전달 받는다.
- InstallAppProgress는 installd를 통해 Package 설치를 Package Manager Service에 요청한다.
- installd는 root permission으로 APK 설치를 수행한다.
Android Package Manager
- 애플리케이션 설치, 삭제, 업그레이드를 위한 API이다.
- 설치할 때 PackageManager가 4개의 Parameter를 갖는 InstallPackage 메소드를 호출한다.
- Package Manager는 Package Service를 실행하고 여기서 분산이 이루어진다.
- PackageInstallerActivity.java와 installAppProgress.java 확인
- Syster service process로 동작하는 Package Manager Service와 install daemon은 부팅 시점에 native process로 동작
APK file 저장 위치
- 기본 설치되는 APK는 /system/app에 저장
- 사용자가 설치한 APK는 /data/app에 저장
- Package Manager는 데이터 디렉토리 /data/data/
을 생성해 저장하고 native library와 cache data를 참조/공유한다.
세부적인 APK 설치 과정
Package Manager Service는 다음의 과정을 실행
- wating
- Installation Process Queue에 Package 추가
- Package 설치 경로를 결정
- 설치인지 업데이트인지 확인
- APK 파일을 주어진 디렉토리에 복사
- APP의 UID 결정
- Installd 데몬 프로세스에 요청
- Application 디렉토리를 만들고 permission 설정
- cache 디렉토리에서 dex code 추출
- package.list를 갱신하기 위해 /system/data/package.xml을 최산상태로 갱신
- 설치 완료를 system에 broadcast
- Intent.ACTION_PACKAGE_ADDED: 신규 패키지
- Intent.ACTION_PACKAGE_REPLACED: 업데이트
Package Manager 데이터 저장 방식
- /data/system 내의 3개 파일에 애플리케이션 정보를 저장
- packages.xml
- Packages/Application과 permission 목록을 포함
- Permission은
태그 하위에 표기 - Permission은 3가지 속성을 가진다.
- name: permission name을 말한다. AndroidManifest.xml에서 사용된다.
- package: package의 permission을 의미
- protection: 보안 레벨을 가리킨다.
- packages.list
- Package Name, UID, flag, data directory 등의 정보를 갖는 텍스트 파일
- 중요 정보를 이용해 Package를 빠르게 찾을 수 있다.
- packages-stopped.xml
- 정지된 상태의 package 목록을 갖는 파일
안드로이드 6.0.1 r81 소스코드 참고 자료
참고 자료
- Pacakage Manager와 관련된 글
- about scanning
- others
Subscribe via RSS