• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2008 The Android Open Source Project
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  *  * Redistributions of source code must retain the above copyright
9  *    notice, this list of conditions and the following disclaimer.
10  *  * Redistributions in binary form must reproduce the above copyright
11  *    notice, this list of conditions and the following disclaimer in
12  *    the documentation and/or other materials provided with the
13  *    distribution.
14  *
15  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
16  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
17  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
18  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
19  * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
20  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
21  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
22  * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
23  * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
24  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
25  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26  * SUCH DAMAGE.
27  */
28 
29 #pragma once
30 
31 /**
32  * @file android/api-level.h
33  * @brief Functions and constants for dealing with multiple API levels.
34  */
35 
36 #include <sys/cdefs.h>
37 
38 __BEGIN_DECLS
39 
40 #ifndef __ANDROID_API_FUTURE__
41 /**
42  * Magic version number for an Android OS build which has
43  * not yet turned into an official release,
44  * for comparisons against __ANDROID_API__.
45  */
46 #define __ANDROID_API_FUTURE__ 10000
47 #endif
48 
49 #ifndef __ANDROID_API__
50 /**
51  * `__ANDROID_API__` is the API level being targeted. For the OS,
52  * this is `__ANDROID_API_FUTURE__`. For the NDK, this is set by the
53  * compiler/build system based on the API level you claimed to target.
54  */
55 #define __ANDROID_API__ __ANDROID_API_FUTURE__
56 #endif
57 
58 /** Names the Gingerbread API level (9), for comparisons against __ANDROID_API__. */
59 #define __ANDROID_API_G__ 9
60 
61 /** Names the Ice-Cream Sandwich API level (14), for comparisons against __ANDROID_API__. */
62 #define __ANDROID_API_I__ 14
63 
64 /** Names the Jellybean API level (16), for comparisons against __ANDROID_API__. */
65 #define __ANDROID_API_J__ 16
66 
67 /** Names the Jellybean MR1 API level (17), for comparisons against __ANDROID_API__. */
68 #define __ANDROID_API_J_MR1__ 17
69 
70 /** Names the Jellybean MR2 API level (18), for comparisons against __ANDROID_API__. */
71 #define __ANDROID_API_J_MR2__ 18
72 
73 /** Names the KitKat API level (19), for comparisons against __ANDROID_API__. */
74 #define __ANDROID_API_K__ 19
75 
76 /** Names the Lollipop API level (21), for comparisons against __ANDROID_API__. */
77 #define __ANDROID_API_L__ 21
78 
79 /** Names the Lollipop MR1 API level (22), for comparisons against __ANDROID_API__. */
80 #define __ANDROID_API_L_MR1__ 22
81 
82 /** Names the Marshmallow API level (23), for comparisons against __ANDROID_API__. */
83 #define __ANDROID_API_M__ 23
84 
85 /** Names the Nougat API level (24), for comparisons against __ANDROID_API__. */
86 #define __ANDROID_API_N__ 24
87 
88 /** Names the Nougat MR1 API level (25), for comparisons against __ANDROID_API__. */
89 #define __ANDROID_API_N_MR1__ 25
90 
91 /** Names the Oreo API level (26), for comparisons against __ANDROID_API__. */
92 #define __ANDROID_API_O__ 26
93 
94 /** Names the Oreo MR1 API level (27), for comparisons against __ANDROID_API__. */
95 #define __ANDROID_API_O_MR1__ 27
96 
97 /** Names the Pie API level (28), for comparisons against __ANDROID_API__. */
98 #define __ANDROID_API_P__ 28
99 
100 /** Names the "Q" API level (29), for comparisons against __ANDROID_API__. */
101 #define __ANDROID_API_Q__ 29
102 
103 /**
104  * Returns the `targetSdkVersion` of the caller, or `__ANDROID_API_FUTURE__`
105  * if there is no known target SDK version (for code not running in the
106  * context of an app).
107  *
108  * The returned values correspond to the named constants in `<android/api-level.h>`,
109  * and is equivalent to the AndroidManifest.xml `targetSdkVersion`.
110  *
111  * See also android_get_device_api_level().
112  *
113  * Available since API level 24.
114  */
115 int android_get_application_target_sdk_version() __INTRODUCED_IN(24);
116 
117 #if __ANDROID_API__ < __ANDROID_API_Q__
118 
119 // android_get_device_api_level is a static inline before API level 29.
120 #define __BIONIC_GET_DEVICE_API_LEVEL_INLINE static __inline
121 #include <bits/get_device_api_level_inlines.h>
122 #undef __BIONIC_GET_DEVICE_API_LEVEL_INLINE
123 
124 #else
125 
126 /**
127  * Returns the API level of the device we're actually running on, or -1 on failure.
128  * The returned values correspond to the named constants in `<android/api-level.h>`,
129  * and is equivalent to the Java `Build.VERSION.SDK_INT` API.
130  *
131  * See also android_get_application_target_sdk_version().
132  */
133 int android_get_device_api_level() __INTRODUCED_IN(29);
134 
135 #endif
136 
137 __END_DECLS
138