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