910e62b5创建于 1月15日历史提交
<?xml version="1.0" encoding="utf-8"?>
<!--
  Copyright 2012 The Chromium Authors
  Use of this source code is governed by a BSD-style license that can be
  found in the LICENSE file.
-->

<!--
Note: This is a jinja2 template, processed at build time into the final manifest.

Blocks denoted with { % block some_name % }foo{ % endblock % } can be overridden
by a child template that "extends" this file.
-->

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="{{manifest_package|default('com.android.webview')}}"
    android:isolatedSplits="true"
    tools:ignore="MissingLeanbackLauncher">

    <uses-feature android:name="android.hardware.touchscreen"
                  android:required="false" />
    <uses-feature android:name="android.software.leanback"
                  android:required="false" />

    <uses-feature android:glEsVersion="0x00030000" />

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

    <!-- Required by WebView Developer UI only -->
    <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />

    <uses-permission android:name="android.permission.FOREGROUND_SERVICE_SPECIAL_USE"/>
    <!-- Required to run the foreground service-->
    <uses-permission android:name="android.permission.POST_NOTIFICATIONS" />

    <application android:label="{{ application_label|default('Android System WebView') }}"
                 android:icon="@{{manifest_package|default('com.android.webview')}}:drawable/icon_webview"
                 android:name="{{ application_name|default('org.chromium.android_webview.nonembedded.WebViewApkApplication') }}"
                 android:multiArch="true"
                 {% if force_32_bit is defined and force_32_bit == 'true' %}
                 android:use32bitAbi="true"
                 {% endif %}>
        {# This part is shared between stand-alone WebView and Monochrome #}
        {% macro common(manifest_package, webview_lib) %}
            <meta-data android:name="com.android.webview.WebViewLibrary"
                       android:value="{{ webview_lib }}" />
            <!-- Service used to hold androidx.webkit startup feature metadata
                 that can be read from other apps via PackageManager. -->
            <service
              android:name="org.chromium.android_webview.services.StartupFeatureMetadataHolder"
              android:enabled="false"
              android:exported="true"
              tools:ignore="ExportedService">
              <meta-data
                  android:name="STARTUP_FEATURE_SET_DATA_DIRECTORY_SUFFIX"
                  android:value="true"/>
              <meta-data
                  android:name="STARTUP_FEATURE_SET_DIRECTORY_BASE_PATH"
                  android:value="true"/>
              <meta-data
                  android:name="STARTUP_FEATURE_CONFIGURE_PARTITIONED_COOKIES"
                  android:value="true"/>
            <meta-data
                  android:name="STARTUP_FEATURE_SET_UI_THREAD_STARTUP_MODE"
                  android:value="true"/>
            <meta-data
                  android:name="STARTUP_FEATURE_SET_UI_THREAD_STARTUP_MODE_V2"
                  android:value="true"/>
            <meta-data
                  android:name="STARTUP_FEATURE_SET_PROFILES_TO_LOAD"
                  android:value="true"/>
            </service>
            <!-- WebView Developer UI Activities. If you change these Activities, please update
                 android_webview/test/shell/AndroidManifest.xml as well. -->
            <!--suppress HardcodedText -->
            <activity android:name="org.chromium.android_webview.devui.MainActivity"
                      android:windowSoftInputMode="adjustPan"
                      android:visibleToInstantApps="true"
                      android:label="WebView DevTools"
                      android:icon="@drawable/icon_webview"
                      android:theme="@style/Theme.DevUi.DayNight"
                      android:launchMode="singleTask"
                      android:taskAffinity="{{ manifest_package }}.org.chromium.android_webview.devui" {# Explicit taskAffinity for WebView Activities. #}
                      android:process=":webview_apk"  {# Explicit process required for WebView. #}
                      android:exported="true">
                <intent-filter>
                    <action android:name="com.android.webview.SHOW_DEV_UI" />
                    <category android:name="android.intent.category.DEFAULT" />
                </intent-filter>
            </activity>
            <!-- Don't actually try to launch with this alias: it only exists so we can query its enabled state. -->
            <!-- If you change this component make sure to update the corresponding copy in
                 test/shell/AndroidManifest.xml -->
            <activity-alias android:name="org.chromium.android_webview.devui.DeveloperModeState"
                      android:targetActivity="org.chromium.android_webview.devui.MainActivity"
                      android:enabled="false" />
            <!-- End of WebView Developer UI Activities -->

            <!-- Don't actually try to launch with this alias: it only exists so we can query its enabled state. -->
            <!-- If you change this component make sure to update the corresponding copy in
                 test/shell/AndroidManifest.xml -->
            <activity-alias android:name="org.chromium.android_webview.SafeModeState"
                      android:targetActivity="org.chromium.android_webview.devui.MainActivity"
                      android:enabled="false" />

            <activity android:name="org.chromium.android_webview.nonembedded.LicenseActivity"
                      android:label="@string/license_activity_title"
                      android:process=":webview_apk"  {# Explicit process required for WebView. #}
                      android:exported="true">
                <intent-filter>
                    <action android:name="android.settings.WEBVIEW_LICENSE" />
                    <category android:name="android.intent.category.DEFAULT" />
                </intent-filter>
                <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
                           android:value="true" />
            </activity>
            <provider android:name="org.chromium.android_webview.nonembedded.LicenseContentProvider"
                      android:exported="true"
                      android:authorities="{{ manifest_package }}.LicenseContentProvider"
                      android:grantUriPermissions="true"
                      android:process=":webview_apk"  {# Explicit process required for WebView. #}
                      tools:ignore="ExportedContentProvider"/>
            <!-- Disabled by default, enabled at runtime by Developer UI. -->
            <!-- If you change this component make sure to update the corresponding copy in
                 test/shell/AndroidManifest.xml-->
            <provider android:name="org.chromium.android_webview.services.DeveloperModeContentProvider"
                      android:visibleToInstantApps="true"
                      android:exported="true"
                      android:authorities="{{ manifest_package }}.DeveloperModeContentProvider"
                      android:process=":webview_service"  {# Explicit process required for WebView. #}
                      tools:ignore="ExportedContentProvider" />
            <provider android:name="androidx.core.content.FileProvider"
                      android:visibleToInstantApps="true"
                      android:exported="false"
                      android:authorities="{{ manifest_package }}.net_logs_provider"
                      android:process=":webview_service"  {# Explicit process required for WebView. #}
                      android:grantUriPermissions="true"
                      tools:ignore="ExportedContentProvider">
                      <meta-data android:name="android.support.FILE_PROVIDER_PATHS"
                          android:resource="@xml/provider_paths" />
            </provider>
            <!-- If you change this component make sure to update the corresponding copy in
                 test/shell/AndroidManifest.xml-->
            <provider android:name="org.chromium.android_webview.services.SafeModeVariationsSeedContentProvider"
                      android:visibleToInstantApps="true"
                      android:exported="true"
                      android:authorities="{{ manifest_package }}.SafeModeVariationsSeedContentProvider"
                      android:process=":webview_service"  {# Explicit process required for WebView. #}
                      tools:ignore="ExportedContentProvider" />
            <provider android:name="org.chromium.android_webview.services.SafeModeContentProvider"
                      android:visibleToInstantApps="true"
                      android:exported="true"
                      android:authorities="{{ manifest_package }}.SafeModeContentProvider"
                      android:process=":webview_service"  {# Explicit process required for WebView. #}
                      tools:ignore="ExportedContentProvider" />
            <!-- Disables at startup init of Emoji2. See http://crbug.com/1205141 -->
            <provider
                android:name="androidx.startup.InitializationProvider"
                tools:node="remove">
            </provider>
            <!-- If you change the variations services, also see
                 android_webview/test/shell/AndroidManifest.xml. -->
            <!-- All WebView components need an android:process attribute. See //android_webview/nonembedded/README.md. -->
            <service android:name="org.chromium.android_webview.services.VariationsSeedServer"
                     android:exported="true"
                     android:process=":webview_service"  {# Explicit process required for WebView. #}
                     tools:ignore="ExportedService" />
            <service android:name="org.chromium.android_webview.services.AwVariationsSeedFetcher"
                     android:permission="android.permission.BIND_JOB_SERVICE"
                     android:exported="false"
                     android:process=":webview_service" />  {# Explicit process required for WebView. #}
            <service android:name="org.chromium.android_webview.services.CrashReceiverService"
                     android:exported="true"
                     android:process=":webview_service"  {# Explicit process required for WebView. #}
                     tools:ignore="ExportedService" />
            <service android:name="org.chromium.android_webview.services.AwMinidumpUploadJobService"
                     android:permission="android.permission.BIND_JOB_SERVICE"
                     android:exported="true"
                     android:process=":webview_service" />  {# Explicit process required for WebView. #}
            <service android:name="org.chromium.android_webview.services.DeveloperUiService"
                     android:foregroundServiceType="specialUse"
                     android:exported="true"
                     android:process=":webview_service"  {# Explicit process required for WebView. #}
                     tools:ignore="ExportedService" >
                      <property
                        android:name="android.app.PROPERTY_SPECIAL_USE_FGS_SUBTYPE"
                        android:value="debugging"
                      />
            </service>
            <service android:name="org.chromium.android_webview.services.SafeModeService"
                     android:exported="true"
                     android:process=":webview_service"  {# Explicit process required for WebView. #}
                     tools:ignore="ExportedService" />
            <service android:name="org.chromium.android_webview.services.AwNetLogService"
                     android:exported="true"
                     android:process=":webview_service"  {# Explicit process required for WebView. #}
                     tools:ignore="ExportedService" />
            <service android:name="org.chromium.android_webview.services.MetricsBridgeService"
                     android:exported="true"
                     android:visibleToInstantApps="true"
                     android:process=":webview_service"  {# Explicit process required for WebView. #}
                     tools:ignore="ExportedService" />
            <service android:name="org.chromium.android_webview.services.MetricsUploadService"
                     android:exported="true"
                     android:visibleToInstantApps="true"
                     android:process=":webview_service"  {# Explicit process required for WebView. #}
                     tools:ignore="ExportedService" />
            <!-- This service runs inside webview_apk process because it loads native -->
            <service android:name="org.chromium.android_webview.nonembedded.AwComponentUpdateService"
                     android:permission="android.permission.BIND_JOB_SERVICE"
                     android:exported="false"
                     android:process=":webview_apk"/>  {# Explicit process required for WebView. #}
            <service android:name="org.chromium.android_webview.services.ComponentsProviderService"
                     android:exported="true"
                     android:visibleToInstantApps="true"
                     android:process=":webview_service"  {# Explicit process required for WebView. #}
                     tools:ignore="ExportedService" />
            <!-- JS Execution Sandbox -->
            <service android:name="org.chromium.android_webview.js_sandbox.service.JsSandboxService0"
                android:process=":js_sandboxed_process0"
                android:isolatedProcess="true"
                android:exported="true"
                android:externalService="true"
                tools:ignore="ExportedService"
                android:visibleToInstantApps="true" />
            {% block extra_application_definitions %}
            {% endblock %}
        {% endmacro %}
        {{ common(manifest_package|default('com.android.webview'), library|default('libwebviewchromium.so')) }}
        {% set num_sandboxed_services = 40 %}
        <meta-data android:name="org.chromium.content.browser.NUM_SANDBOXED_SERVICES"
                   android:value="{{ num_sandboxed_services }}" />
        {% for i in range(num_sandboxed_services) %}
            <service android:name="org.chromium.content.app.SandboxedProcessService{{ i }}"
                     android:process=":sandboxed_process{{ i }}"
                     android:isolatedProcess="true"
                     android:exported="true"
                     android:externalService="true"
                     tools:ignore="ExportedService"
                     android:visibleToInstantApps="true" />
        {% endfor %}
        <meta-data android:name="org.chromium.content.browser.NUM_PRIVILEGED_SERVICES"
                   android:value="0" />
        {% if trichrome_library is defined %}
        <uses-static-library
            android:name="{{ trichrome_library }}"
            android:version="{{ trichrome_version }}"
            android:certDigest="{{ trichrome_certdigest }}" />
        {% endif %}
    </application>
</manifest>