그래서 안드로이드 앱을 설치하는 방법을 알아 내려고 AOSP를 파고 들었습니다. 지금까지 내가 여기있는 곳입니다 :PackageManagerService에서 안드로이드 앱을 설치하는 방법 이해하기
apk 파일은 PackageManager 메서드 installPackage()를 호출하는 InstallAppProgress로 PackageInstallerActivity에서 전송됩니다.
이전에 PackageManager를 호출하면 AIDL의 마술과 함께 PackageManagerService로 연결됩니다 (이 사실을 이해하는 데 시간이 다소 걸렸습니다). 코어있어서 installPackageWithVerification에서
()는 PackageHandler의 인스턴스가 생성되고, 메시지 전달 등 INIT_COPY 같은 상태 코드의 무리의 사용량 PACKAGE_VERIFIED기반으로 강력한 방식으로 이루어진다 도착 Handler에 수신 된 메시지의 상태 코드에서 ops가 발생합니다. 으로 시작하려면 INIT_COPY - 보류중인 설치 목록에 패키지를 추가하고 코드 MCS_BOUND과 함께 메시지를 호출합니다.
이렇게하면 데이터 파일과 같은 apk 파일에서 추출한 기본 파일이 복사됩니다.
그리고 어딘가에있는 레인에서 메시지가 나타납니다. CHECK_PENDING_VERIFICATION은 보류 목록에서 패키지를 가져와 항목, 특히 AndroidManifest 파일을 구문 분석합니다.updateSettingLI()이 호출되면 결국 3 가지 중요한 함수 호출이 만들어집니다.
- moveDexFilesLI는()
- setPermissionsLI()는 -, Manifest.xml
- updatePermissionsLPw (DIR 고해상도/파일, resources.arsc를 추출) - grantPermissionLPw를 호출 -과의 groupids 추가 매니페스트 파일에서 구문 분석 된 사용 권한
이 시점에서 Package 개체에는 각각의 그룹 ID가 있으므로 이제 기본적으로 권한이 그룹 ID로 변환되는 방법을 파악할 수있었습니다. 실례합니다. 누군가가 PackageManagerService, 특히 scanPackageLI 메소드를 유용하게 사용할 수 있다고 생각했습니다. 특히 코드에서 길을 잃기 쉽습니다.
이제 실제 질문은, 나는 비 유적으로 안드로이드에서 각 애플 리케이션은 리눅스 프로세스 자체의 UI와 gids로 제어된다는 것입니다. 우리는 위의 내용을 참고하여 PackageManagerService에서 Linux 프로세스로 변환되는 방법을 알고 싶습니다.
"installd"도 설치 과정에서 중요한 역할을한다는 것을 알고 있습니다. 그러나 사용 권한 또는 액세스 권한 (Linux teminology에 따라)이 설치되는 패키지 (Linux의 프로세스)에 대해 설정된 링크를 찾을 수 없습니다.
친절하게 도와주세요.
여기에 더 자세한 정보를 제공하는 좋은 블로그 또는 이와 관련된 것이 있습니까? 그렇다면 공유하십시오. –
http://coltf.blogspot.it/p/android-os-processes-and-zygote.html 좋은 출발점입니다. –