1<?xml version="1.0" encoding="utf-8"?>
2<!--
3/*
4 * Copyright (C) 2023 The Android Open Source Project
5 *
6 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
9 *
10 *     http://www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
17 */
18-->
19<manifest xmlns:android="http://schemas.android.com/apk/res/android"
20          xmlns:androidprv="http://schemas.android.com/apk/prv/res/android"
21          xmlns:tools="http://schemas.android.com/tools"
22          package="android.ext.services"
23          android:versionCode="309999900"
24          android:versionName="2019-09"
25          coreApp="true">
26
27    <!-- Declare the broadcast as protected so only the system service can send it.  The AdServices
28    System Service will send this broadcast to the AdServices module where there is a package
29    change.-->
30    <protected-broadcast android:name="com.android.ext.adservices.PACKAGE_CHANGED"/>
31
32    <!-- Allows the system service to query app status-->
33    <uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"/>
34
35    <!-- Permissions required for reading device configs -->
36    <uses-permission android:name="android.permission.READ_DEVICE_CONFIG"/>
37
38    <!-- Used for reporting -->
39    <uses-permission android:name="android.permission.INTERNET"/>
40
41    <!-- Used for scheduling connectivity jobs -->
42    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
43
44    <!-- Allows an application to access AdServices Topics API. -->
45    <permission android:name="android.permission.ACCESS_ADSERVICES_TOPICS"
46                android:label="@string/permlab_accessAdServicesTopics"
47                android:description="@string/permdesc_accessAdServicesTopics"
48                android:protectionLevel="normal"/>
49
50    <!-- Allows an application to access AdServices Attribution APIs. -->
51    <permission android:name="android.permission.ACCESS_ADSERVICES_ATTRIBUTION"
52                android:label="@string/permlab_accessAdServicesAttribution"
53                android:description="@string/permdesc_accessAdServicesAttribution"
54                android:protectionLevel="normal"/>
55
56    <!-- Allows an application to access AdServices Custom Audience APIs. -->
57    <permission android:name="android.permission.ACCESS_ADSERVICES_CUSTOM_AUDIENCE"
58                android:label="@string/permlab_accessAdServicesCustomAudience"
59                android:description="@string/permdesc_accessAdServicesCustomAudience"
60                android:protectionLevel="normal"/>
61
62    <!-- Allows an application to access AdServices Ad Id API. -->
63    <permission android:name="android.permission.ACCESS_ADSERVICES_AD_ID"
64                android:label="@string/permlab_accessAdServicesAdId"
65                android:description="@string/permdesc_accessAdServicesAdId"
66                android:protectionLevel="normal"/>
67
68    <!-- Note: Signature permissions for AdServices code running in ExtServices APK must be
69    redefined with the suffix _COMPAT since the ExtServices and AdServices APKs are signed by
70    different keys. -->
71
72    <!-- Allows AdServices to access API for Ad ID. -->
73    <permission android:name="android.permission.ACCESS_PRIVILEGED_AD_ID_COMPAT"
74                android:label="@string/permlab_adServicesAccessAdId"
75                android:description="@string/permdesc_adServicesAccessAdId"
76                android:protectionLevel="signature"/>
77
78    <!-- Allows AdServices to access API for App set ID. -->
79    <permission android:name="android.permission.ACCESS_PRIVILEGED_APP_SET_ID_COMPAT"
80                android:label="@string/permlab_adServicesAccessAppSetId"
81                android:description="@string/permdesc_adServicesAccessAppSetId"
82                android:protectionLevel="signature"/>
83
84    <!-- Allows AdServices to access API for AdServices Cobalt upload. -->
85    <permission android:name="android.permission.ACCESS_PRIVILEGED_ADSERVICES_COBALT_UPLOAD_COMPAT"
86                android:label="@string/permlab_adServicesAccessAdServicesCobaltUpload"
87                android:description="@string/permdesc_adServicesAccessAdServicesCobaltUpload"
88                android:protectionLevel="signature"/>
89
90    <!-- Allows the caller to modify AdService's state via Common Service. -->
91    <permission android:name="android.permission.MODIFY_ADSERVICES_STATE_COMPAT"
92                android:label="@string/permlab_modifyAdServicesState"
93                android:description="@string/permdesc_modifyAdServicesState"
94                android:protectionLevel="signature|configurator"/>
95
96    <!-- Allows the caller to get AdService's state via Common Service. -->
97    <permission android:name="android.permission.ACCESS_ADSERVICES_STATE_COMPAT"
98                android:label="@string/permlab_accessAdServicesState"
99                android:description="@string/permdesc_accessAdServicesState"
100                android:protectionLevel="signature|configurator"/>
101
102    <!-- Permission to allow calling updating AdId Cache API via Common Service. -->
103    <permission android:name="android.permission.UPDATE_PRIVILEGED_AD_ID_COMPAT"
104                android:label="@string/permlab_updateAdservicesAdId"
105                android:description="@string/permdesc_updateAdservicesAdId"
106                android:protectionLevel="signature|configurator"/>
107
108    <uses-permission android:name="android.permission.ACCESS_PRIVILEGED_AD_ID_COMPAT"/>
109    <uses-permission android:name="android.permission.ACCESS_PRIVILEGED_APP_SET_ID_COMPAT"/>
110    <uses-permission android:name="android.permission.ACCESS_PRIVILEGED_ADSERVICES_COBALT_UPLOAD_COMPAT" />
111
112    <!-- Permission to allow self calling Common Service. -->
113    <uses-permission android:name="android.permission.ACCESS_ADSERVICES_STATE_COMPAT"/>
114    <uses-permission android:name="android.permission.MODIFY_ADSERVICES_STATE_COMPAT"/>
115
116    <!-- Allows JobScheduler to persist jobs across reboot. -->
117    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
118
119    <!-- Required for sending measurement events -->
120    <uses-permission android:name="android.permission.ondevicepersonalization.NOTIFY_MEASUREMENT_EVENT"/>
121
122    <!-- LINT.IfChange(adExtServicesApplication) -->
123    <application
124        android:name=".ExtServicesApplication"
125        android:label="@string/app_name"
126        android:forceQueryable="true"
127        android:allowBackup="false"
128        android:supportsRtl="true"
129        android:icon="@drawable/ic_android_icon"
130        android:theme="@style/FilterTouches">
131        <!-- Activity for the main view of Adservices Settings UI-->
132        <activity
133            android:name="com.android.adservices.ui.settings.activities.AdServicesSettingsMainActivity"
134            android:exported="true"
135            android:enabled="false"
136            android:theme="@style/Theme.SubSettingsBase"
137            android:process=".adservices">
138            <intent-filter android:priority="1">
139                <action android:name="android.adservices.ui.SETTINGS"/>
140                <category android:name="android.intent.category.DEFAULT"/>
141            </intent-filter>
142        </activity>
143
144        <!-- Activity for the topics view of Adservices Settings UI-->
145        <activity
146            android:name="com.android.adservices.ui.settings.activities.TopicsActivity"
147            android:exported="true"
148            android:enabled="false"
149            android:theme="@style/Theme.SubSettingsBase"
150            android:process=".adservices">
151            <intent-filter android:priority="1">
152                <action android:name="android.adservices.ui.TOPICS"/>
153                <category android:name="android.intent.category.DEFAULT"/>
154            </intent-filter>
155        </activity>
156
157        <!-- Activity for the blocked topics view of Adservices Settings UI-->
158        <activity
159            android:name="com.android.adservices.ui.settings.activities.BlockedTopicsActivity"
160            android:exported="true"
161            android:enabled="false"
162            android:theme="@style/Theme.SubSettingsBase"
163            android:process=".adservices">
164            <intent-filter android:priority="1">
165                <action android:name="android.adservices.ui.BLOCKED_TOPICS"/>
166                <category android:name="android.intent.category.DEFAULT"/>
167            </intent-filter>
168        </activity>
169
170        <!-- Activity for the apps view of Adservices Settings UI-->
171        <activity
172            android:name="com.android.adservices.ui.settings.activities.AppsActivity"
173            android:exported="true"
174            android:enabled="false"
175            android:theme="@style/Theme.SubSettingsBase"
176            android:process=".adservices">
177            <intent-filter android:priority="1">
178                <action android:name="android.adservices.ui.APPS"/>
179                <category android:name="android.intent.category.DEFAULT"/>
180            </intent-filter>
181        </activity>
182
183        <!-- Activity for the blocked apps view of Adservices Settings UI-->
184        <activity
185            android:name="com.android.adservices.ui.settings.activities.BlockedAppsActivity"
186            android:exported="true"
187            android:enabled="false"
188            android:theme="@style/Theme.SubSettingsBase"
189            android:process=".adservices">
190            <intent-filter android:priority="1">
191                <action android:name="android.adservices.ui.BLOCKED_APPS"/>
192                <category android:name="android.intent.category.DEFAULT"/>
193            </intent-filter>
194        </activity>
195
196        <!-- Activity for the ads measurement view of AdServices Settings UI-->
197        <activity
198            android:name="com.android.adservices.ui.settings.activities.MeasurementActivity"
199            android:exported="true"
200            android:enabled="false"
201            android:theme="@style/Theme.SubSettingsBase"
202            android:process=".adservices">
203            <intent-filter android:priority="1">
204                <action android:name="android.adservices.ui.MEASUREMENT"/>
205                <category android:name="android.intent.category.DEFAULT"/>
206            </intent-filter>
207        </activity>
208
209        <!-- Activity for Adservices Detailed Notification UI -->
210        <activity
211            android:name="com.android.adservices.ui.notifications.ConsentNotificationActivity"
212            android:exported="true"
213            android:enabled="false"
214            android:theme="@style/AdServices.NotificationTheme"
215            android:process=".adservices">
216            <intent-filter android:priority="1">
217                <action android:name="android.adservices.ui.NOTIFICATIONS"/>
218                <category android:name="android.intent.category.DEFAULT"/>
219            </intent-filter>
220        </activity>
221
222        <!-- Activity for Adservices to run shell command. -->
223        <!-- Dump permission limits who can call this activity, Shell has DUMP permission -->
224        <activity
225            android:name="com.android.adservices.shell.ShellCommandActivity"
226            android:exported="true"
227          android:theme="@style/Theme.SubSettingsBase"
228          android:permission="android.permission.DUMP"
229            android:process=".adservices">
230            <intent-filter android:priority="1">
231                <action android:name="android.adservices.BACK_COMPACT_SHELL_COMMAND"/>
232                <category android:name="android.intent.category.DEFAULT"/>
233            </intent-filter>
234        </activity>
235
236        <service android:name="com.android.adservices.adselection.AdSelectionService"
237                 android:enabled="@bool/isAtLeastS"
238                 android:exported="true"
239                 android:visibleToInstantApps="false"
240                 android:process=".adservices">
241            <intent-filter android:priority="1">
242                <action android:name="android.adservices.adselection.AD_SELECTION_SERVICE"/>
243            </intent-filter>
244        </service>
245
246        <service android:name=
247                     "com.android.adservices.customaudience.CustomAudienceService"
248                 android:enabled="@bool/isAtLeastS"
249                 android:exported="true"
250                 android:visibleToInstantApps="false"
251                 android:process=".adservices">
252            <intent-filter android:priority="1">
253                <action android:name=
254                            "android.adservices.customaudience.CUSTOM_AUDIENCE_SERVICE"/>
255            </intent-filter>
256        </service>
257
258        <service android:name=
259                     "android.adservices.signals.ProtectedSignalsService"
260                 android:enabled="@bool/isAtLeastS"
261                 android:exported="true"
262                 android:visibleToInstantApps="false"
263                 android:process=".adservices">
264            <intent-filter android:priority="1">
265                <action android:name=
266                            "android.adservices.signals.PROTECTED_SIGNALS_SERVICE"/>
267            </intent-filter>
268        </service>
269
270        <service android:name="com.android.adservices.topics.TopicsService"
271                 android:enabled="@bool/isAtLeastS"
272                 android:exported="true"
273                 android:visibleToInstantApps="false"
274                 android:process=".adservices">
275            <intent-filter android:priority="1">
276                <action android:name="android.adservices.TOPICS_SERVICE"/>
277            </intent-filter>
278        </service>
279
280        <service android:name="com.android.adservices.adid.AdIdService"
281                 android:exported="true"
282                 android:visibleToInstantApps="false"
283                 android:process=".adservices">
284            <intent-filter android:priority="1">
285                <action android:name="android.adservices.ADID_SERVICE"/>
286            </intent-filter>
287        </service>
288
289        <service android:name="com.android.adservices.appsetid.AppSetIdService"
290                 android:enabled="@bool/isAtLeastS"
291                 android:exported="true"
292                 android:visibleToInstantApps="false"
293                 android:process=".adservices">
294            <intent-filter android:priority="1">
295                <action android:name="android.adservices.APPSETID_SERVICE"/>
296            </intent-filter>
297        </service>
298
299        <service android:name="com.android.adservices.measurement.MeasurementService"
300                 android:exported="true"
301                 android:visibleToInstantApps="false"
302                 android:process=".adservices">
303            <intent-filter android:priority="1">
304                <action android:name="android.adservices.MEASUREMENT_SERVICE"/>
305            </intent-filter>
306        </service>
307
308        <service android:name="com.android.adservices.common.AdServicesCommonService"
309                 android:exported="true"
310                 android:visibleToInstantApps="false"
311                 android:process=".adservices">
312            <intent-filter android:priority="1">
313                <action android:name="android.adservices.AD_SERVICES_COMMON_SERVICE"/>
314            </intent-filter>
315        </service>
316
317        <!-- The JobService schedules all jobs for AdServices using SPE framework. -->
318        <service android:name="com.android.adservices.spe.AdServicesJobService"
319                 android:permission="android.permission.BIND_JOB_SERVICE"
320                 android:process=".adservices">
321        </service>
322
323        <!-- Daily maintenance Job. -->
324        <service android:name="com.android.adservices.service.MaintenanceJobService"
325                 android:permission="android.permission.BIND_JOB_SERVICE"
326                 android:process=".adservices">
327        </service>
328
329        <!-- Epoch computation Job. -->
330        <service android:name="com.android.adservices.service.topics.EpochJobService"
331                 android:permission="android.permission.BIND_JOB_SERVICE"
332                 android:process=".adservices">
333        </service>
334
335        <!-- Mdd background Job. -->
336        <service android:name="com.android.adservices.download.MddJobService"
337                 android:permission="android.permission.BIND_JOB_SERVICE"
338                 android:process=".adservices">
339        </service>
340
341        <!-- Encryption key fetch job. -->
342        <service android:name="com.android.adservices.service.encryptionkey.EncryptionKeyJobService"
343                 android:permission="android.permission.BIND_JOB_SERVICE"
344                 android:process=".adservices">
345        </service>
346
347        <!-- Enable Notification Job. -->
348        <service android:name="com.android.adservices.service.common.ConsentNotificationJobService"
349                 android:permission="android.permission.BIND_JOB_SERVICE"
350                 android:process=".adservices">
351        </service>
352
353        <!-- Measurement event main report upload job. -->
354        <service
355            android:name="com.android.adservices.service.measurement.reporting.EventReportingJobService"
356            android:permission="android.permission.BIND_JOB_SERVICE"
357            android:process=".adservices">
358        </service>
359
360        <!-- Measurement debug report upload job. -->
361        <service android:name=
362                     "com.android.adservices.service.measurement.reporting.DebugReportingJobService"
363            android:permission="android.permission.BIND_JOB_SERVICE"
364            android:process=".adservices">
365        </service>
366
367        <!-- Measurement verbose debug report upload job. -->
368        <service android:name=
369              "com.android.adservices.service.measurement.reporting.VerboseDebugReportingJobService"
370            android:permission="android.permission.BIND_JOB_SERVICE"
371            android:process=".adservices">
372        </service>
373
374        <!-- Measurement event fallback report upload job. -->
375        <service android:name=
376                     "com.android.adservices.service.measurement.reporting.EventFallbackReportingJobService"
377                 android:permission="android.permission.BIND_JOB_SERVICE"
378                 android:process=".adservices">
379        </service>
380
381        <!-- Measurement aggregate main report upload job. -->
382        <service android:name=
383                     "com.android.adservices.service.measurement.reporting.AggregateReportingJobService"
384                 android:permission="android.permission.BIND_JOB_SERVICE"
385                 android:process=".adservices">
386        </service>
387
388        <!-- Measurement aggregate fallback report upload job. -->
389        <service android:name=
390                     "com.android.adservices.service.measurement.reporting.AggregateFallbackReportingJobService"
391                 android:permission="android.permission.BIND_JOB_SERVICE"
392                 android:process=".adservices">
393        </service>
394
395        <!-- Measurement immediate aggregate report upload job. -->
396        <service android:name=
397                     "com.android.adservices.service.measurement.reporting.ImmediateAggregateReportingJobService"
398                 android:permission="android.permission.BIND_JOB_SERVICE"
399                 android:process=".adservices">
400        </service>
401
402        <!-- Measurement regular report upload job. -->
403        <service android:name=
404                     "com.android.adservices.service.measurement.reporting.ReportingJobService"
405                 android:permission="android.permission.BIND_JOB_SERVICE"
406                 android:process=".adservices">
407        </service>
408
409        <!-- Measurement Attribution Job.-->
410        <service android:name=
411                     "com.android.adservices.service.measurement.attribution.AttributionJobService"
412                 android:permission="android.permission.BIND_JOB_SERVICE"
413                 android:process=".adservices">
414        </service>
415        <!-- Measurement Attribution Fallback Job.-->
416        <service android:name=
417                     "com.android.adservices.service.measurement.attribution.AttributionFallbackJobService"
418                 android:permission="android.permission.BIND_JOB_SERVICE"
419                 android:process=".adservices">
420        </service>
421
422        <!-- Deletion Job.-->
423        <service android:name=
424                     "com.android.adservices.service.measurement.DeleteExpiredJobService"
425                 android:permission="android.permission.BIND_JOB_SERVICE"
426                 android:process=".adservices">
427        </service>
428
429        <!-- Measurement Deletion Uninstalled Apps Job. -->
430        <service android:name=
431                     "com.android.adservices.service.measurement.DeleteUninstalledJobService"
432                 android:permission="android.permission.BIND_JOB_SERVICE"
433                 android:process=".adservices">
434        </service>
435
436        <!-- FLEDGE Background Fetch Job -->
437        <service android:name=
438                     "com.android.adservices.service.customaudience.BackgroundFetchJobService"
439                 android:permission="android.permission.BIND_JOB_SERVICE"
440                 android:process=".adservices">
441        </service>
442
443        <!-- FLEDGE Schedule Custom Audience Update Job -->
444        <service android:name=
445                     "com.android.adservices.service.customaudience.ScheduleCustomAudienceUpdateJobService"
446                 android:permission="android.permission.BIND_JOB_SERVICE"
447                 android:process=".adservices">
448        </service>
449
450        <!-- FLEDGE Ad selection debug report sender Job -->
451        <service android:name=
452                     "com.android.adservices.service.adselection.DebugReportSenderJobService"
453                 android:permission="android.permission.BIND_JOB_SERVICE"
454                 android:process=".adservices">
455        </service>
456
457        <!-- FLEDGE Protected Signals periodic encoding job -->
458        <service android:name=
459                     "com.android.adservices.service.signals.PeriodicEncodingJobService"
460                 android:permission="android.permission.BIND_JOB_SERVICE"
461                 android:process=".adservices">
462        </service>
463
464        <!-- FLEDGE KAnon sign join background job -->
465        <service android:name=
466                     "com.android.adservices.service.kanon.KAnonSignJoinBackgroundJobService"
467                 android:permission="android.permission.BIND_JOB_SERVICE"
468                 android:process=".adservices">
469        </service>
470
471        <!-- FLEDGE Background Key Fetch Job -->
472        <service android:name=
473                     "com.android.adservices.service.adselection.encryption.BackgroundKeyFetchJobService"
474                 android:permission="android.permission.BIND_JOB_SERVICE"
475                 android:process=".adservices">
476        </service>
477
478        <!-- Measurement Registration Job -->
479        <service android:name=
480                     "com.android.adservices.service.measurement.registration.AsyncRegistrationQueueJobService"
481                 android:permission="android.permission.BIND_JOB_SERVICE"
482                 android:process=".adservices">
483        </service>
484        <!-- Measurement Registration Fallback Job -->
485        <service android:name=
486                     "com.android.adservices.service.measurement.registration.AsyncRegistrationFallbackJobService"
487                 android:permission="android.permission.BIND_JOB_SERVICE"
488                 android:process=".adservices">
489        </service>
490
491        <!-- Measurement Verbose Debug Reporting Fallback Job. -->
492        <service android:name=
493                     "com.android.adservices.service.measurement.reporting.VerboseDebugReportingFallbackJobService"
494                 android:permission="android.permission.BIND_JOB_SERVICE"
495                 android:process=".adservices">
496        </service>
497
498        <!-- Measurement Debug Reporting Fallback Job. -->
499        <service android:name=
500                     "com.android.adservices.service.measurement.reporting.DebugReportingFallbackJobService"
501                 android:permission="android.permission.BIND_JOB_SERVICE"
502                 android:process=".adservices">
503        </service>
504
505        <!-- Cobalt Logging Job -->
506        <service android:name="com.android.adservices.cobalt.CobaltJobService"
507            android:permission="android.permission.BIND_JOB_SERVICE"
508            android:process=".adservices">
509        </service>
510
511        <provider
512            android:name=
513                "com.android.adservices.service.measurement.attribution.TriggerContentProvider"
514            android:authorities="com.android.ext.adservices.provider.trigger"
515            android:exported="false"
516            android:process=".adservices"
517        />
518
519        <provider
520            android:name=
521                "com.android.adservices.service.measurement.registration.AsyncRegistrationContentProvider"
522            android:authorities="com.android.ext.adservices.provider.asyncregistration"
523            android:exported="false"
524            android:process=".adservices"
525        />
526
527        <provider
528            android:name="com.android.adservices.service.common.AdServicesInternalProvider"
529            android:authorities="com.android.ext.adservices.provider.internal"
530            android:exported="false"
531            android:process=".adservices"
532        />
533
534        <!-- Boot completed receiver registers package changed event receivers. -->
535        <receiver android:name="com.android.adservices.service.common.AdExtBootCompletedReceiver"
536                  android:enabled="@bool/isAdExtBootCompletedReceiverEnabled"
537                  android:exported="true"
538                  android:process=".adservices">
539            <intent-filter>
540                <action android:name="android.intent.action.BOOT_COMPLETED"/>
541            </intent-filter>
542        </receiver>
543
544        <!-- On S-, this class handles intents from the system. -->
545        <receiver android:name="com.android.adservices.service.common.PackageChangedReceiver"
546                  android:enabled="false"
547                  android:exported="true"
548                  android:process=".adservices">
549            <intent-filter>
550                <action android:name="android.intent.action.PACKAGE_FULLY_REMOVED"/>
551                <action android:name="android.intent.action.PACKAGE_DATA_CLEARED"/>
552                <data android:scheme="package"/>
553            </intent-filter>
554        </receiver>
555
556        <!-- Used and present only on S- -->
557        <uses-library android:name="android.ext.adservices" android:required="false"/>
558    </application>
559    <!-- LINT.ThenChange(adservices/service-core/java/com/android/adservices/service/common/compat/PackageManagerCompatUtils.java:activities_and_services) -->
560</manifest>
561