나는 AOSP를 탐색하여 안드로이드 애플 리케이션이 어떻게 설치되었는지 알아 내려고 노력해 왔습니다.안드로이드의 패키지 관리자에 대한 Aidl 코드 연결
PackageManagerService.java
에는 platform.xml
파일을 구문 분석하여 해당 사용 권한에 대한 gids가 있습니다.
PackageInstallerActivity
기존 패키지가 있는지 확인한 다음 InstallAppProgress
을 호출합니다.
패키지를 구문 분석하고 유효성을 검사하고 PackagerManager.installPackage()
메서드가 호출 된 경로를 따라 패키지를 설치하려면 InstallAppProgress.initView()
에서 호출 할 수있었습니다. 이것이 JNI 라이브러리에 대한 기본 호출을한다는 것을 알고 있습니다. 해당 .aidl
파일의 파일 크기는 IPackageManager.aidl
입니다.
내가 알고 싶은 것은 위에서 언급 한이 보조와 관련된 스텁 (또는 네이티브 코드가있는 경우)의 구현을 어디에서 찾을 수 있습니까?
나는 그것이 뉘앙스를 완전히 이해할 수없는 이유이기 때문에 aidl을 처음 접했습니다. 누군가가 나를 올바른 방향으로 친절하게 안내 할 수 있습니까?
Android Interface Definition Language가 의견을 보내 주셔서 감사합니다. 이제 AIDL 개념을 분명히 이해하는 것 같습니다. Android에서 앱이 완전히 어떻게 설치되는지 알고 싶었습니다. packageManager에서 시작하여 위의 내용을 통해 PackageManager Service로 이동하는 지점까지이 시점에 도달했습니다. 거기에서 올바른 방향으로 나를 가르쳐 주시겠습니까? –
@AdiGuNPanagerManagerService의 세부 사항에 들어가는 것은 상당히 복잡하지만 대부분은 거기에 머물러 있습니다. installPackage 체인을 installPackageWithVerificationAndEncryption에 연결하여 INIT_COPY 메시지를 mHandler로 보내면 mPendingInstalls에 설치가 추가됩니다. 그런 다음 HandleParams에있는 params.startCopy()로 처리하고 체인을 연결하는 MCS_BOUND 메시지를 전송합니다.이 메시지는 결국 InstallParams 및 handleStartCopy()에 연결되며 종료되지 않는 코드 체인입니다. 친구. –
설명을 해 주신 Andrew에게 감사드립니다. 네 말에 전적으로 동의 해. 사실 나는 단지 PackageHandler 클래스를 통해 수행하고 있었고 위에서 언급 한 모든 요소를 발견했습니다.나는 더 구체적으로 "내 안드로이드에서 설치 과정에서 권한이 앱에 어떻게 설정되는지 알고 싶다."라고 질문한다. AndroidManifest.xml의 권한이 linux uid 또는 gid로 변환되는 방법. –