5

다음 링크는 안드로이드의 패키지 설치 과정에 대한 간략한 설명을 제공합니다.Android에서 설치하는 동안 앱의 UID가 어떻게 결정됩니까?

http://java.dzone.com/articles/depth-android-package-manager

나는 응용 프로그램의 UID가 매니페스트 파일에 권한을 설정 기반으로 설치 중에 결정되는 방법을 알고 싶소.

또한 4.0과 ICS 소스 코드의/frameworks/base/data/etc 디렉토리에있는 platform.xml 파일에는 gid와 관련된 사용 권한 목록이 들어 있습니다. 설명은

입니다. 다음 태그는 하위 그룹 ID를 권한 이름과 연결합니다. 그러한 매핑을 지정하면 이라는 주어진 권한을 부여받은 모든 응용 프로그램 프로세스는 도 프로세스에 연결된 주어진 그룹 ID ( )로 실행되므로 파일 시스템 (읽기, 쓰기, 실행) 작업을 수행 할 수 있습니다. 허용 그 그룹을 위해.

비슷한 방법으로 특정 uid에 할당 된 상위 수준 사용 권한 목록이 있습니다.

내 질문 응용 프로그램이 권한 X, Y, Z와 함께 설치되는 경우 어떻게 지정의 접근이

는 또한 매번 앱이 매핑에서 개최 않습니다 실행이 platform.xml에서 매핑에서입니다 않습니다 모든 인스턴트 (그것은 업데이 트가 없다면 애플 리케이션 권한을 변경할 수없는 안드로이드의 초기 디자인에서 오른쪽 보이지 않는). 그렇다면이 앱이 이러한 액세스 및 이와 같은 uid로 실행되어야한다고 말하는 것을 저장하는 경우입니다.

더 자세한 정보가 필요한지 궁금한 점이 있으시면 알려주세요. 나는 안드로이드 OS의 내부가 어떻게 작동하는지에 대해 더 많은 것을 배우려하고있다.

감사합니다.

답변

7

응용 프로그램의 UID는 요청한 권한 집합에 의존하지 않습니다. 일반적인 경우, 설치하는 동안 패키지 매니저가 (실제로,이 과정이 약간 다중 사용자 지원의 도입으로 변경) 세트 [FIRST_APPLICATION_UID; LAST_APPLICATION_UID]에서 응용 프로그램에 고유 한 UID를 할당합니다

안드로이드 시스템은 고유 한 사용자를 할당 ID (UID)를 각 Android 애플리케이션에 적용하고 별도의 프로세스에서 해당 사용자로 실행합니다.

당신이 말하는 것은 권한을 기반으로 응용 프로그램에 할당 된 제한된 GID (그룹 ID)입니다. 예를 들어 네트워크 인터페이스에 응용 프로그램의 액세스를 제한하기 위해 Linux 커널에 특별한 패치가 추가되었습니다.이 프로세스는 특수 하드 코드 된 GID가있는 경우에만 net 소켓을 만들 수 있습니다. 따라서 사용자가 "android.permission.INTERNET"권한을 수락하면 응용 프로그램을 설치할 때 PackageManager가 platform.xml 파일의 값을 기반으로이 응용 프로그램에 특수 GID를 할당합니다. 이 응용 프로그램의 출시 중에이 응용 프로그램의 프로세스는 값으로 설정됩니다. 따라서 응용 프로그램 프로세스는 소켓을 만들 수있는 권한을 얻습니다.

기타 권한은 Android 프레임 워크 수준에서 시행됩니다.응용 프로그램의 요청

+1

감사합니다. 더 많은 의미가 있습니다. 그래서 일단 gid가 어플 리케이션에 할당되면 어플 리케이션이 호출 될 때 더 빠르게 검색 할 수 있도록 어디에나 저장됩니다. 또는 응용 프로그램이 매니페스트 파일에 가지고있는 권한을 기반으로 즉석에서 다시 계산됩니까? 응용 프로그램이 호출 될 때 gid가 매핑되는 위치를 파악하려고합니다. 미리 감사드립니다 Yury. –

+2

내가 아는 한, 패키지 관리자에는 gids에 대한 정보를 저장하는 캐시가 있습니다. 따라서, an이 호출 될 때이 정보는이 캐시에서 가져와 Zygote 프로세스를 위해 설정하는 데 사용됩니다. – Yury

0

사용 권한 만 GID하지만 application.You의 아니오 UID 모든 UID와 GID 물건 확인 this article에 관심이 있습니다 영향을 미칩니다.