Chromium on Android: ContentShell 의 AndroidManifest 파일 해독
Android Manifest 는 권한, 응용 프로그램, Activity, 콘 텐 츠 제공 자, Intent 필터, 허 용 된 배경 service 프로 세 스 이름과 수량 등 여러 정 보 를 포함 한 응용 프로그램의 기본 정 보 를 설명 합 니 다.Chromium 은 모든 플랫폼 에 하나의 케이스 프로그램 을 제공 합 니 다. Android 플랫폼 도 예외 가 아 닙 니 다. 간단 한 주소 입력 표시 줄 과 네 비게 이 션 표시 줄 만 제공 하고 가장 기본 적 인 웹 페이지 렌 더 링 기능 을 가 집 니 다. 주로 Content API 를 통 해 Chromium 커 널 을 맞 추 는 방법 을 보 여 주 려 고 합 니 다.
다음은 ContentShell 프로그램 을 만 드 는 Manifest 파일 (src/content/shell/android/shell apk/android Manifest. xml) 입 니 다.
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (c) 2012 The Chromium Authors. All rights reserved.
Use of this source code is governed by a BSD-style license that can be
found in the LICENSE file.
-->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="org.chromium.content_shell_apk">
<permission android:name="org.chromium.content_shell.permission.SANDBOX"
android:protectionLevel="signature" />
<application android:name="ContentShellApplication"
android:icon="@mipmap/app_icon"
android:label="Content Shell">
<activity android:name="ContentShellActivity"
android:launchMode="singleTask"
android:theme="@android:style/Theme.Holo.Light.NoActionBar"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize"
android:hardwareAccelerated="true">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<!-- The following service entries exist in order to allow us to
start more than one sandboxed process. -->
<!-- NOTE: If you change the values of "android:process" for any of the below services,
you also need to update kHelperProcessExecutableName in chrome_constants.cc. -->
<service android:name="org.chromium.content.app.SandboxedProcessService0"
android:process=":sandboxed_process0"
android:permission="org.chromium.content_shell.permission.SANDBOX"
android:isolatedProcess="true"
android:exported="false" />
<service android:name="org.chromium.content.app.SandboxedProcessService1"
android:process=":sandboxed_process1"
android:permission="org.chromium.content_shell.permission.SANDBOX"
android:isolatedProcess="true"
android:exported="false" />
<service android:name="org.chromium.content.app.SandboxedProcessService2"
android:process=":sandboxed_process2"
android:permission="org.chromium.content_shell.permission.SANDBOX"
android:isolatedProcess="true"
android:exported="false" />
<service android:name="org.chromium.content.app.SandboxedProcessService3"
android:process=":sandboxed_process3"
android:permission="org.chromium.content_shell.permission.SANDBOX"
android:isolatedProcess="true"
android:exported="false" />
<service android:name="org.chromium.content.app.SandboxedProcessService4"
android:process=":sandboxed_process4"
android:permission="org.chromium.content_shell.permission.SANDBOX"
android:isolatedProcess="true"
android:exported="false" />
<service android:name="org.chromium.content.app.SandboxedProcessService5"
android:process=":sandboxed_process5"
android:permission="org.chromium.content_shell.permission.SANDBOX"
android:isolatedProcess="true"
android:exported="false" />
<service android:name="org.chromium.content.app.SandboxedProcessService6"
android:process=":sandboxed_process6"
android:permission="org.chromium.content_shell.permission.SANDBOX"
android:isolatedProcess="true"
android:exported="false" />
<service android:name="org.chromium.content.app.SandboxedProcessService7"
android:process=":sandboxed_process7"
android:permission="org.chromium.content_shell.permission.SANDBOX"
android:isolatedProcess="true"
android:exported="false" />
<service android:name="org.chromium.content.app.SandboxedProcessService8"
android:process=":sandboxed_process8"
android:permission="org.chromium.content_shell.permission.SANDBOX"
android:isolatedProcess="true"
android:exported="false" />
<service android:name="org.chromium.content.app.SandboxedProcessService9"
android:process=":sandboxed_process9"
android:permission="org.chromium.content_shell.permission.SANDBOX"
android:isolatedProcess="true"
android:exported="false" />
<service android:name="org.chromium.content.app.SandboxedProcessService10"
android:process=":sandboxed_process10"
android:permission="org.chromium.content_shell.permission.SANDBOX"
android:isolatedProcess="true"
android:exported="false" />
<service android:name="org.chromium.content.app.SandboxedProcessService11"
android:process=":sandboxed_process11"
android:permission="org.chromium.content_shell.permission.SANDBOX"
android:isolatedProcess="true"
android:exported="false" />
<service android:name="org.chromium.content.app.SandboxedProcessService12"
android:process=":sandboxed_process12"
android:permission="org.chromium.content_shell.permission.SANDBOX"
android:isolatedProcess="true"
android:exported="false" />
</application>
<uses-sdk android:minSdkVersion="14" android:targetSdkVersion="18" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.VIBRATE"/>
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
</manifest>
안 드 로 이 드 애플 리 케 이 션 개발 경험 이 있 는 사람들 은 이 Manifest 파일 에 대해 낯 설 지 않다. 예 를 들 어 애플 리 케 이 션, Activity, Permission 등 성명 이지 만 몇 가지 특별한 설명 이 필요 하 다.
SANdbOX 보안 권한 에 대한 설명
< permission > 성명 은 서비스 프로 세 스에 대한 보호 입 니 다. ContentShell 응용 프로그램 자체 만 서비스 프로 세 스 를 시작 할 수 있 음 을 나타 냅 니 다. 이 서비스 프로 세 스 를 시작 하 라 고 요청 한 다른 응용 프로그램 에 대해 안 드 로 이 드 시스템 은 서명 검사 에 따라 주어진 권한 을 부여 하 는 지 확인 해 야 합 니 다.위 와 같이 < 서비스 > 요 소 는 이 permission 을 가 져 야 서비스 프로 세 스 를 조작 할 수 있 는 프로그램 을 명시 적 으로 지정 하 였 습 니 다.
13 개의 < 서비스 > 요소 에 대한 설명
이 manifest 파일 의 가장 눈 에 띄 는 것 은 13 개의 < 서비스 > 요소 에 대한 성명 입 니 다.Chromium 은 다 중 프로 세 스 모델 에 구 축 된 시스템 으로 모든 페이지 가 하나의 독립 된 렌 더 링 프로 세 스 에서 실 행 됩 니 다. 모든 로 컬 자원 에 대한 접근 은 IPC (프로 세 스 간 통신) 방식 으로 브 라 우 저 프로 세 스 를 요청 해 야 합 니 다. 예 를 들 어 네트워크 자원 의 로드, 파일 시스템 의 접근, 창 UI 시스템 의 조작 등 입 니 다.렌 더 링 프로 세 스 의 주요 작업 은 페이지 의 레이아웃 과 자바 스 크 립 트 의 실행 입 니 다. 안전 을 고려 하여 신뢰 할 수 없 는 샌 드 박스 (Sandbox) 에서 실 행 됩 니 다.
Android 에서 모든 렌 더 링 프로 세 스 는 실제 적 으로 격 리 된 서비스 프로 세 스 (isolatedprocess: true) 입 니 다. 이 13 개의 < service > 요 소 는 ContentShell 을 최대 13 개의 서비스 프로 세 스, 즉 13 개의 렌 더 링 프로 세 스 만 동시에 실행 할 수 있 도록 지정 합 니 다.렌 더 링 프로 세 스 수가 상한 선 에 도 달 했 을 때 실행 중인 서비스 프로 세 스 에서 새로운 페이지 를 렌 더 링 할 것 을 선택해 야 합 니 다. 예 를 들 어 페이지 가 새로운 링크 주 소 를 열 었 습 니 다.그렇다면 합 리 적 인 서비스 프로 세 스 수 를 어떻게 확정 합 니까?실제로 Chromium 은 실행 할 때 시스템 의 물리 적 메모리 에 따라 몇 개의 서비스 프로 세 스 를 시작 할 수 있 는 지 평가 합 니 다. 시스템 에 1G 의 물리 적 내용 이 있 고 렌 더 링 프로 세 스 가 40M 을 차지한다 고 가정 하면 실제 시작 하 는 서비스 프로 세 스 수 는 512 M/40M = 12 개 입 니 다. Manifest 에서 13 개의 서비스 프로 세 스 를 설명 한 것 입 니 다.1G 의 시스템 에서 실제 실행 과정 에서 최대 12 개의 서비스 프로 세 스 만 시작 할 수 있 습 니 다.
모든 < 서비스 > 요 소 는 permission 를 org. chromium. content 로 지정 합 니 다.셸. permission. SANDBOX 는 이 지정 한 권한 을 가 진 프로그램 만 startService, bidService 또는 stopService 방법 을 실행 할 수 있 습 니 다.
이에 따라 Chromium 은 이 13 개의 < 서비스 > 요 소 를 위해 13 개의 자바 류 를 만 들 었 고 Sandboxed ProcessService [0... 12], Sandboxed ProcessService 는 android. app. Service 에 계승 되 었 다.service 프로 세 스 를 Chromium 다 중 프로 세 스 모델 에 통합 하려 면 다음 과 같은 몇 가지 문 제 를 고려 해 야 합 니 다.
이 같은 문제 의 답 은 ChildProcessService, ChildProcessLauncher, ChildProcessConnection 등 몇 가지 관건 적 인 유형의 실현 에 있다.후속 장 은 그들의 실현 세부 사항 을 깊이 있 게 분석 할 것 이다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Kotlin의 기초 - 2부지난 글에서는 Kotlin이 무엇인지, Kotlin의 특징, Kotlin에서 변수 및 데이터 유형을 선언하는 방법과 같은 Kotlin의 기본 개념에 대해 배웠습니다. 유형 변환은 데이터 변수의 한 유형을 다른 데이터...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.