blob: 2cb93e4f8cea74a45eb9c3e897a7bcb01d08692d [file] [log] [blame]
Jeff Brownd5a5b5a2014-06-05 17:14:39 -07001/*
2 * Copyright (C) 2014 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package android.annotation;
18
19import static java.lang.annotation.ElementType.ANNOTATION_TYPE;
20import static java.lang.annotation.ElementType.CONSTRUCTOR;
21import static java.lang.annotation.ElementType.FIELD;
22import static java.lang.annotation.ElementType.METHOD;
23import static java.lang.annotation.ElementType.PACKAGE;
24import static java.lang.annotation.ElementType.TYPE;
25
26import java.lang.annotation.Retention;
27import java.lang.annotation.RetentionPolicy;
28import java.lang.annotation.Target;
29
30/**
31 * Indicates an API is exposed for use by bundled system applications.
32 * <p>
33 * These APIs are not guaranteed to remain consistent release-to-release,
34 * and are not for use by apps linking against the Android SDK.
35 * </p><p>
36 * This annotation should only appear on API that is already marked <pre>@hide</pre>.
37 * </p>
38 *
39 * @hide
40 */
41@Target({TYPE, FIELD, METHOD, CONSTRUCTOR, ANNOTATION_TYPE, PACKAGE})
Jiyong Park3b0867e2018-01-02 19:02:07 +090042@Retention(RetentionPolicy.RUNTIME)
Jeff Brownd5a5b5a2014-06-05 17:14:39 -070043public @interface SystemApi {
Jiyong Parkabe61582019-12-04 17:17:48 +090044 enum Client {
45 /**
46 * Specifies that the intended clients of a SystemApi are privileged apps.
Jiyong Park5ed5a042019-12-13 14:53:14 +090047 * This is the default value for {@link #client}. This implies
48 * MODULE_APPS and MODULE_LIBRARIES as well, which means that APIs will also
49 * be available to module apps and jars.
Jiyong Parkabe61582019-12-04 17:17:48 +090050 */
51 PRIVILEGED_APPS,
Jiyong Park5ed5a042019-12-13 14:53:14 +090052
53 /**
54 * Specifies that the intended clients of a SystemApi are modules implemented
55 * as apps, like the NetworkStack app. This implies MODULE_LIBRARIES as well,
56 * which means that APIs will also be available to module jars.
57 */
58 MODULE_APPS,
59
60 /**
61 * Specifies that the intended clients of a SystemApi are modules implemented
62 * as libraries, like the conscrypt.jar in the conscrypt APEX.
63 */
64 MODULE_LIBRARIES
Jiyong Parkabe61582019-12-04 17:17:48 +090065 }
66
67 enum Process {
68 /**
69 * Specifies that the SystemAPI is available in every Java processes.
70 * This is the default value for {@link #process}.
71 */
72 ALL,
Jiyong Park5ed5a042019-12-13 14:53:14 +090073
74 /**
75 * Specifies that the SystemAPI is available only in the system server process.
76 */
77 SYSTEM_SERVER
Jiyong Parkabe61582019-12-04 17:17:48 +090078 }
79
80 /**
81 * The intended client of this SystemAPI.
82 */
83 Client client() default android.annotation.SystemApi.Client.PRIVILEGED_APPS;
84
85 /**
86 * The process(es) that this SystemAPI is available
87 */
88 Process process() default android.annotation.SystemApi.Process.ALL;
Jeff Brownd5a5b5a2014-06-05 17:14:39 -070089}