xref: /aosp_15_r20/external/cronet/base/android/build_info.h (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1*6777b538SAndroid Build Coastguard Worker // Copyright 2012 The Chromium Authors
2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file.
4*6777b538SAndroid Build Coastguard Worker 
5*6777b538SAndroid Build Coastguard Worker #ifndef BASE_ANDROID_BUILD_INFO_H_
6*6777b538SAndroid Build Coastguard Worker #define BASE_ANDROID_BUILD_INFO_H_
7*6777b538SAndroid Build Coastguard Worker 
8*6777b538SAndroid Build Coastguard Worker #include <jni.h>
9*6777b538SAndroid Build Coastguard Worker 
10*6777b538SAndroid Build Coastguard Worker #include <string>
11*6777b538SAndroid Build Coastguard Worker #include <vector>
12*6777b538SAndroid Build Coastguard Worker 
13*6777b538SAndroid Build Coastguard Worker #include "base/base_export.h"
14*6777b538SAndroid Build Coastguard Worker #include "base/memory/singleton.h"
15*6777b538SAndroid Build Coastguard Worker 
16*6777b538SAndroid Build Coastguard Worker namespace base::android {
17*6777b538SAndroid Build Coastguard Worker 
18*6777b538SAndroid Build Coastguard Worker // This enumeration maps to the values returned by BuildInfo::sdk_int(),
19*6777b538SAndroid Build Coastguard Worker // indicating the Android release associated with a given SDK version.
20*6777b538SAndroid Build Coastguard Worker enum SdkVersion {
21*6777b538SAndroid Build Coastguard Worker   SDK_VERSION_JELLY_BEAN = 16,
22*6777b538SAndroid Build Coastguard Worker   SDK_VERSION_JELLY_BEAN_MR1 = 17,
23*6777b538SAndroid Build Coastguard Worker   SDK_VERSION_JELLY_BEAN_MR2 = 18,
24*6777b538SAndroid Build Coastguard Worker   SDK_VERSION_KITKAT = 19,
25*6777b538SAndroid Build Coastguard Worker   SDK_VERSION_KITKAT_WEAR = 20,
26*6777b538SAndroid Build Coastguard Worker   SDK_VERSION_LOLLIPOP = 21,
27*6777b538SAndroid Build Coastguard Worker   SDK_VERSION_LOLLIPOP_MR1 = 22,
28*6777b538SAndroid Build Coastguard Worker   SDK_VERSION_MARSHMALLOW = 23,
29*6777b538SAndroid Build Coastguard Worker   SDK_VERSION_NOUGAT = 24,
30*6777b538SAndroid Build Coastguard Worker   SDK_VERSION_NOUGAT_MR1 = 25,
31*6777b538SAndroid Build Coastguard Worker   SDK_VERSION_OREO = 26,
32*6777b538SAndroid Build Coastguard Worker   SDK_VERSION_O_MR1 = 27,
33*6777b538SAndroid Build Coastguard Worker   SDK_VERSION_P = 28,
34*6777b538SAndroid Build Coastguard Worker   SDK_VERSION_Q = 29,
35*6777b538SAndroid Build Coastguard Worker   SDK_VERSION_R = 30,
36*6777b538SAndroid Build Coastguard Worker   SDK_VERSION_S = 31,
37*6777b538SAndroid Build Coastguard Worker   SDK_VERSION_Sv2 = 32,
38*6777b538SAndroid Build Coastguard Worker   SDK_VERSION_T = 33,
39*6777b538SAndroid Build Coastguard Worker   SDK_VERSION_U = 34,
40*6777b538SAndroid Build Coastguard Worker };
41*6777b538SAndroid Build Coastguard Worker 
42*6777b538SAndroid Build Coastguard Worker // BuildInfo is a singleton class that stores android build and device
43*6777b538SAndroid Build Coastguard Worker // information. It will be called from Android specific code and gets used
44*6777b538SAndroid Build Coastguard Worker // primarily in crash reporting.
45*6777b538SAndroid Build Coastguard Worker class BASE_EXPORT BuildInfo {
46*6777b538SAndroid Build Coastguard Worker  public:
47*6777b538SAndroid Build Coastguard Worker   BuildInfo(const BuildInfo&) = delete;
48*6777b538SAndroid Build Coastguard Worker   BuildInfo& operator=(const BuildInfo&) = delete;
49*6777b538SAndroid Build Coastguard Worker 
~BuildInfo()50*6777b538SAndroid Build Coastguard Worker   ~BuildInfo() {}
51*6777b538SAndroid Build Coastguard Worker 
52*6777b538SAndroid Build Coastguard Worker   // Static factory method for getting the singleton BuildInfo instance.
53*6777b538SAndroid Build Coastguard Worker   // Note that ownership is not conferred on the caller and the BuildInfo in
54*6777b538SAndroid Build Coastguard Worker   // question isn't actually freed until shutdown. This is ok because there
55*6777b538SAndroid Build Coastguard Worker   // should only be one instance of BuildInfo ever created.
56*6777b538SAndroid Build Coastguard Worker   static BuildInfo* GetInstance();
57*6777b538SAndroid Build Coastguard Worker 
58*6777b538SAndroid Build Coastguard Worker   // Const char* is used instead of std::strings because these values must be
59*6777b538SAndroid Build Coastguard Worker   // available even if the process is in a crash state. Sadly
60*6777b538SAndroid Build Coastguard Worker   // std::string.c_str() doesn't guarantee that memory won't be allocated when
61*6777b538SAndroid Build Coastguard Worker   // it is called.
device()62*6777b538SAndroid Build Coastguard Worker   const char* device() const {
63*6777b538SAndroid Build Coastguard Worker     return device_;
64*6777b538SAndroid Build Coastguard Worker   }
65*6777b538SAndroid Build Coastguard Worker 
manufacturer()66*6777b538SAndroid Build Coastguard Worker   const char* manufacturer() const {
67*6777b538SAndroid Build Coastguard Worker     return manufacturer_;
68*6777b538SAndroid Build Coastguard Worker   }
69*6777b538SAndroid Build Coastguard Worker 
model()70*6777b538SAndroid Build Coastguard Worker   const char* model() const {
71*6777b538SAndroid Build Coastguard Worker     return model_;
72*6777b538SAndroid Build Coastguard Worker   }
73*6777b538SAndroid Build Coastguard Worker 
brand()74*6777b538SAndroid Build Coastguard Worker   const char* brand() const {
75*6777b538SAndroid Build Coastguard Worker     return brand_;
76*6777b538SAndroid Build Coastguard Worker   }
77*6777b538SAndroid Build Coastguard Worker 
android_build_id()78*6777b538SAndroid Build Coastguard Worker   const char* android_build_id() const {
79*6777b538SAndroid Build Coastguard Worker     return android_build_id_;
80*6777b538SAndroid Build Coastguard Worker   }
81*6777b538SAndroid Build Coastguard Worker 
android_build_fp()82*6777b538SAndroid Build Coastguard Worker   const char* android_build_fp() const {
83*6777b538SAndroid Build Coastguard Worker     return android_build_fp_;
84*6777b538SAndroid Build Coastguard Worker   }
85*6777b538SAndroid Build Coastguard Worker 
gms_version_code()86*6777b538SAndroid Build Coastguard Worker   const char* gms_version_code() const {
87*6777b538SAndroid Build Coastguard Worker     return gms_version_code_;
88*6777b538SAndroid Build Coastguard Worker   }
89*6777b538SAndroid Build Coastguard Worker 
90*6777b538SAndroid Build Coastguard Worker   // The package name of the host app which has loaded WebView, retrieved from
91*6777b538SAndroid Build Coastguard Worker   // the application context. In the context of the SDK Runtime, the package
92*6777b538SAndroid Build Coastguard Worker   // name of the app that owns this particular instance of the SDK Runtime will
93*6777b538SAndroid Build Coastguard Worker   // also be included. e.g.
94*6777b538SAndroid Build Coastguard Worker   // com.google.android.sdksandbox:com:com.example.myappwithads
host_package_name()95*6777b538SAndroid Build Coastguard Worker   const char* host_package_name() const { return host_package_name_; }
96*6777b538SAndroid Build Coastguard Worker 
97*6777b538SAndroid Build Coastguard Worker   // The application name (e.g. "Chrome"). For WebView, this is name of the
98*6777b538SAndroid Build Coastguard Worker   // embedding app. In the context of the SDK Runtime, this is the name of the
99*6777b538SAndroid Build Coastguard Worker   // app that owns this particular instance of the SDK Runtime.
host_version_code()100*6777b538SAndroid Build Coastguard Worker   const char* host_version_code() const { return host_version_code_; }
101*6777b538SAndroid Build Coastguard Worker 
102*6777b538SAndroid Build Coastguard Worker   // By default: same as versionCode. For WebView: versionCode of the embedding
103*6777b538SAndroid Build Coastguard Worker   // app. In the context of the SDK Runtime, this is the versionCode of the app
104*6777b538SAndroid Build Coastguard Worker   // that owns this particular instance of the SDK Runtime.
host_package_label()105*6777b538SAndroid Build Coastguard Worker   const char* host_package_label() const { return host_package_label_; }
106*6777b538SAndroid Build Coastguard Worker 
package_version_code()107*6777b538SAndroid Build Coastguard Worker   const char* package_version_code() const {
108*6777b538SAndroid Build Coastguard Worker     return package_version_code_;
109*6777b538SAndroid Build Coastguard Worker   }
110*6777b538SAndroid Build Coastguard Worker 
package_version_name()111*6777b538SAndroid Build Coastguard Worker   const char* package_version_name() const {
112*6777b538SAndroid Build Coastguard Worker     return package_version_name_;
113*6777b538SAndroid Build Coastguard Worker   }
114*6777b538SAndroid Build Coastguard Worker 
package_name()115*6777b538SAndroid Build Coastguard Worker   const char* package_name() const {
116*6777b538SAndroid Build Coastguard Worker     return package_name_;
117*6777b538SAndroid Build Coastguard Worker   }
118*6777b538SAndroid Build Coastguard Worker 
custom_themes()119*6777b538SAndroid Build Coastguard Worker   const char* custom_themes() const { return custom_themes_; }
120*6777b538SAndroid Build Coastguard Worker 
resources_version()121*6777b538SAndroid Build Coastguard Worker   const char* resources_version() const { return resources_version_; }
122*6777b538SAndroid Build Coastguard Worker 
build_type()123*6777b538SAndroid Build Coastguard Worker   const char* build_type() const {
124*6777b538SAndroid Build Coastguard Worker     return build_type_;
125*6777b538SAndroid Build Coastguard Worker   }
126*6777b538SAndroid Build Coastguard Worker 
board()127*6777b538SAndroid Build Coastguard Worker   const char* board() const { return board_; }
128*6777b538SAndroid Build Coastguard Worker 
installer_package_name()129*6777b538SAndroid Build Coastguard Worker   const char* installer_package_name() const { return installer_package_name_; }
130*6777b538SAndroid Build Coastguard Worker 
abi_name()131*6777b538SAndroid Build Coastguard Worker   const char* abi_name() const { return abi_name_; }
132*6777b538SAndroid Build Coastguard Worker 
sdk_int()133*6777b538SAndroid Build Coastguard Worker   int sdk_int() const {
134*6777b538SAndroid Build Coastguard Worker     return sdk_int_;
135*6777b538SAndroid Build Coastguard Worker   }
136*6777b538SAndroid Build Coastguard Worker 
137*6777b538SAndroid Build Coastguard Worker   // Returns the targetSdkVersion of the currently running app. If called from a
138*6777b538SAndroid Build Coastguard Worker   // library, this returns the embedding app's targetSdkVersion.
139*6777b538SAndroid Build Coastguard Worker   //
140*6777b538SAndroid Build Coastguard Worker   // This can only be compared to finalized SDK versions, never against
141*6777b538SAndroid Build Coastguard Worker   // pre-release Android versions. For pre-release Android versions, see the
142*6777b538SAndroid Build Coastguard Worker   // targetsAtLeast*() methods in BuildInfo.java.
target_sdk_version()143*6777b538SAndroid Build Coastguard Worker   int target_sdk_version() const { return target_sdk_version_; }
144*6777b538SAndroid Build Coastguard Worker 
is_debug_android()145*6777b538SAndroid Build Coastguard Worker   bool is_debug_android() const { return is_debug_android_; }
146*6777b538SAndroid Build Coastguard Worker 
is_tv()147*6777b538SAndroid Build Coastguard Worker   bool is_tv() const { return is_tv_; }
148*6777b538SAndroid Build Coastguard Worker 
version_incremental()149*6777b538SAndroid Build Coastguard Worker   const char* version_incremental() const { return version_incremental_; }
150*6777b538SAndroid Build Coastguard Worker 
hardware()151*6777b538SAndroid Build Coastguard Worker   const char* hardware() const { return hardware_; }
152*6777b538SAndroid Build Coastguard Worker 
is_at_least_t()153*6777b538SAndroid Build Coastguard Worker   bool is_at_least_t() const { return is_at_least_t_; }
154*6777b538SAndroid Build Coastguard Worker 
is_automotive()155*6777b538SAndroid Build Coastguard Worker   bool is_automotive() const { return is_automotive_; }
156*6777b538SAndroid Build Coastguard Worker 
is_at_least_u()157*6777b538SAndroid Build Coastguard Worker   bool is_at_least_u() const { return is_at_least_u_; }
158*6777b538SAndroid Build Coastguard Worker 
targets_at_least_u()159*6777b538SAndroid Build Coastguard Worker   bool targets_at_least_u() const { return targets_at_least_u_; }
160*6777b538SAndroid Build Coastguard Worker 
codename()161*6777b538SAndroid Build Coastguard Worker   const char* codename() const { return codename_; }
162*6777b538SAndroid Build Coastguard Worker 
is_foldable()163*6777b538SAndroid Build Coastguard Worker   bool is_foldable() const { return is_foldable_; }
164*6777b538SAndroid Build Coastguard Worker 
165*6777b538SAndroid Build Coastguard Worker   // Available only on Android T+.
vulkan_deqp_level()166*6777b538SAndroid Build Coastguard Worker   int32_t vulkan_deqp_level() const { return vulkan_deqp_level_; }
167*6777b538SAndroid Build Coastguard Worker 
168*6777b538SAndroid Build Coastguard Worker  private:
169*6777b538SAndroid Build Coastguard Worker   friend struct BuildInfoSingletonTraits;
170*6777b538SAndroid Build Coastguard Worker 
171*6777b538SAndroid Build Coastguard Worker   explicit BuildInfo(const std::vector<std::string>& params);
172*6777b538SAndroid Build Coastguard Worker 
173*6777b538SAndroid Build Coastguard Worker   // Const char* is used instead of std::strings because these values must be
174*6777b538SAndroid Build Coastguard Worker   // available even if the process is in a crash state. Sadly
175*6777b538SAndroid Build Coastguard Worker   // std::string.c_str() doesn't guarantee that memory won't be allocated when
176*6777b538SAndroid Build Coastguard Worker   // it is called.
177*6777b538SAndroid Build Coastguard Worker   const char* const brand_;
178*6777b538SAndroid Build Coastguard Worker   const char* const device_;
179*6777b538SAndroid Build Coastguard Worker   const char* const android_build_id_;
180*6777b538SAndroid Build Coastguard Worker   const char* const manufacturer_;
181*6777b538SAndroid Build Coastguard Worker   const char* const model_;
182*6777b538SAndroid Build Coastguard Worker   const int sdk_int_;
183*6777b538SAndroid Build Coastguard Worker   const char* const build_type_;
184*6777b538SAndroid Build Coastguard Worker   const char* const board_;
185*6777b538SAndroid Build Coastguard Worker   const char* const host_package_name_;
186*6777b538SAndroid Build Coastguard Worker   const char* const host_version_code_;
187*6777b538SAndroid Build Coastguard Worker   const char* const host_package_label_;
188*6777b538SAndroid Build Coastguard Worker   const char* const package_name_;
189*6777b538SAndroid Build Coastguard Worker   const char* const package_version_code_;
190*6777b538SAndroid Build Coastguard Worker   const char* const package_version_name_;
191*6777b538SAndroid Build Coastguard Worker   const char* const android_build_fp_;
192*6777b538SAndroid Build Coastguard Worker   const char* const gms_version_code_;
193*6777b538SAndroid Build Coastguard Worker   const char* const installer_package_name_;
194*6777b538SAndroid Build Coastguard Worker   const char* const abi_name_;
195*6777b538SAndroid Build Coastguard Worker   const char* const custom_themes_;
196*6777b538SAndroid Build Coastguard Worker   const char* const resources_version_;
197*6777b538SAndroid Build Coastguard Worker   // Not needed by breakpad.
198*6777b538SAndroid Build Coastguard Worker   const int target_sdk_version_;
199*6777b538SAndroid Build Coastguard Worker   const bool is_debug_android_;
200*6777b538SAndroid Build Coastguard Worker   const bool is_tv_;
201*6777b538SAndroid Build Coastguard Worker   const char* const version_incremental_;
202*6777b538SAndroid Build Coastguard Worker   const char* const hardware_;
203*6777b538SAndroid Build Coastguard Worker   const bool is_at_least_t_;
204*6777b538SAndroid Build Coastguard Worker   const bool is_automotive_;
205*6777b538SAndroid Build Coastguard Worker   const bool is_at_least_u_;
206*6777b538SAndroid Build Coastguard Worker   const bool targets_at_least_u_;
207*6777b538SAndroid Build Coastguard Worker   const char* const codename_;
208*6777b538SAndroid Build Coastguard Worker   const int32_t vulkan_deqp_level_;
209*6777b538SAndroid Build Coastguard Worker   const bool is_foldable_;
210*6777b538SAndroid Build Coastguard Worker };
211*6777b538SAndroid Build Coastguard Worker 
212*6777b538SAndroid Build Coastguard Worker }  // namespace base::android
213*6777b538SAndroid Build Coastguard Worker 
214*6777b538SAndroid Build Coastguard Worker #endif  // BASE_ANDROID_BUILD_INFO_H_
215