3

나는 AOSP를 탐색하여 안드로이드 애플 리케이션이 어떻게 설치되었는지 알아 내려고 노력해 왔습니다.안드로이드의 패키지 관리자에 대한 Aidl 코드 연결

PackageManagerService.java에는 platform.xml 파일을 구문 분석하여 해당 사용 권한에 대한 gids가 있습니다.

PackageInstallerActivity 기존 패키지가 있는지 확인한 다음 InstallAppProgress을 호출합니다.

패키지를 구문 분석하고 유효성을 검사하고 PackagerManager.installPackage() 메서드가 호출 된 경로를 따라 패키지를 설치하려면 InstallAppProgress.initView()에서 호출 할 수있었습니다. 이것이 JNI 라이브러리에 대한 기본 호출을한다는 것을 알고 있습니다. 해당 .aidl 파일의 파일 크기는 IPackageManager.aidl입니다.

내가 알고 싶은 것은 위에서 언급 한이 보조와 관련된 스텁 (또는 네이티브 코드가있는 경우)의 구현을 어디에서 찾을 수 있습니까?

나는 그것이 뉘앙스를 완전히 이해할 수없는 이유이기 때문에 aidl을 처음 접했습니다. 누군가가 나를 올바른 방향으로 친절하게 안내 할 수 있습니까?

답변

2

그래서 AIDL 파일은 서비스와 클라이언트가 서로 이야기하는 방식을 정의합니다. 멀티 스레딩을 처리해야하기 때문에 시스템 서비스에 중요합니다. 대화하기를 원하는 여러 가지 앱이 많이 있습니다. 그래서 IPackageManager.aidl은 클라이언트가 PackageManager와 통신 할 수있게 해줍니다.

InstallAppProgress.initView()를 보았는데 고유 코드에 대한 특정 호출이 표시되지 않습니다. 여기 패키지 매니저에 대한 호출이 : 그래서

pm.installPackageWithVerificationAndEncryption(mPackageURI, observer, installFlags, 
       installerPackageName, verificationParams, null); 

설명 할 방법이 체인이 작품 InstallAppProgress는 실제로 돌려 볼 수 있습니다 당신은 체인 ContextImpl.getPackageManager (리드 것을 따른다면 상황에서 패키지 매니저를) 가져 ApplicationPackageManager는 추상 PackageManager 클래스를 확장합니다.

ApplicationPackageManager는 인터페이스를 통해 호출하는 실제 PackageManagerService에 대한 참조를 가지며,이 패키지는 aidl 파일 IPackageManager에 의해 정의됩니다. 여기서 관리자는 서비스에 대한 액세스를 제어하고 외부 세계에 실제로 액세스 할 수 있고 액세스 할 수없는 것을 정의하는 것입니다. 앱은 일반적으로 PackageManagerService, IIRC를 처리 할 수는 없지만 그렇게 할 수는 있지만 시스템 권한이 있어야합니다.

는 AIDL 파일이 실제로 무엇인지에 대한 더 나은 설명을 얻을 여기에 안드로이드 사이트의 페이지를 확인하려면

+0

Android Interface Definition Language가 의견을 보내 주셔서 감사합니다. 이제 AIDL 개념을 분명히 이해하는 것 같습니다. Android에서 앱이 완전히 어떻게 설치되는지 알고 싶었습니다. packageManager에서 시작하여 위의 내용을 통해 PackageManager Service로 이동하는 지점까지이 시점에 도달했습니다. 거기에서 올바른 방향으로 나를 가르쳐 주시겠습니까? –

+2

@AdiGuNPanagerManagerService의 세부 사항에 들어가는 것은 상당히 복잡하지만 대부분은 거기에 머물러 있습니다. installPackage 체인을 installPackageWithVerificationAndEncryption에 연결하여 INIT_COPY 메시지를 mHandler로 보내면 mPendingInstalls에 설치가 추가됩니다. 그런 다음 HandleParams에있는 params.startCopy()로 처리하고 체인을 연결하는 MCS_BOUND 메시지를 전송합니다.이 메시지는 결국 InstallParams 및 handleStartCopy()에 연결되며 종료되지 않는 코드 체인입니다. 친구. –

+0

설명을 해 주신 Andrew에게 감사드립니다. 네 말에 전적으로 동의 해. 사실 나는 단지 PackageHandler 클래스를 통해 수행하고 있었고 위에서 언급 한 모든 요소를 ​​발견했습니다.나는 더 구체적으로 "내 안드로이드에서 설치 과정에서 권한이 앱에 어떻게 설정되는지 알고 싶다."라고 질문한다. AndroidManifest.xml의 권한이 linux uid 또는 gid로 변환되는 방법. –