blob: 82bb2e7a25c93b9cd28acceabbf8874ffb3b8a15 [file] [log] [blame]
// Copyright 2012 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef BASE_ANDROID_BUILD_INFO_H_
#define BASE_ANDROID_BUILD_INFO_H_
#include <jni.h>
#include <string>
#include <vector>
#include "base/android/android_info.h"
#include "base/base_export.h"
#include "base/memory/singleton.h"
namespace base::android {
// DEPRECATED: Please use android_info::SdkVersion.
//
// This enumeration maps to the values returned by BuildInfo::sdk_int(),
// indicating the Android release associated with a given SDK version.
enum SdkVersion {
SDK_VERSION_JELLY_BEAN = android_info::SDK_VERSION_JELLY_BEAN,
SDK_VERSION_JELLY_BEAN_MR1 = android_info::SDK_VERSION_JELLY_BEAN_MR1,
SDK_VERSION_JELLY_BEAN_MR2 = android_info::SDK_VERSION_JELLY_BEAN_MR2,
SDK_VERSION_KITKAT = android_info::SDK_VERSION_KITKAT,
SDK_VERSION_KITKAT_WEAR = android_info::SDK_VERSION_KITKAT_WEAR,
SDK_VERSION_LOLLIPOP = android_info::SDK_VERSION_LOLLIPOP,
SDK_VERSION_LOLLIPOP_MR1 = android_info::SDK_VERSION_LOLLIPOP_MR1,
SDK_VERSION_MARSHMALLOW = android_info::SDK_VERSION_MARSHMALLOW,
SDK_VERSION_NOUGAT = android_info::SDK_VERSION_NOUGAT,
SDK_VERSION_NOUGAT_MR1 = android_info::SDK_VERSION_NOUGAT_MR1,
SDK_VERSION_OREO = android_info::SDK_VERSION_OREO,
SDK_VERSION_O_MR1 = android_info::SDK_VERSION_O_MR1,
SDK_VERSION_P = android_info::SDK_VERSION_P,
SDK_VERSION_Q = android_info::SDK_VERSION_Q,
SDK_VERSION_R = android_info::SDK_VERSION_R,
SDK_VERSION_S = android_info::SDK_VERSION_S,
SDK_VERSION_Sv2 = android_info::SDK_VERSION_Sv2,
SDK_VERSION_T = android_info::SDK_VERSION_T,
SDK_VERSION_U = android_info::SDK_VERSION_U,
SDK_VERSION_V = android_info::SDK_VERSION_V,
};
// DEPRECATED: Use AndroidInfo, DeviceInfo or ApkInfo instead.
// These are more efficient because they only retrieve the data being queried.
//
// BuildInfo is a singleton class that stores android build and device
// information. It will be called from Android specific code and gets used
// primarily in crash reporting.
class BASE_EXPORT BuildInfo {
public:
BuildInfo(const BuildInfo&) = delete;
BuildInfo& operator=(const BuildInfo&) = delete;
~BuildInfo();
// Static factory method for getting the singleton BuildInfo instance.
// Note that ownership is not conferred on the caller and the BuildInfo in
// question isn't actually freed until shutdown. This is ok because there
// should only be one instance of BuildInfo ever created.
static BuildInfo* GetInstance();
const std::string& device() const { return device_; }
const std::string& manufacturer() const { return manufacturer_; }
const std::string& model() const { return model_; }
const std::string& brand() const { return brand_; }
const std::string& android_build_id() const { return android_build_id_; }
const std::string& android_build_fp() const { return android_build_fp_; }
const std::string& gms_version_code() const;
void set_gms_version_code_for_test(const std::string& gms_version_code);
// The package name of the host app which has loaded WebView, retrieved from
// the application context. In the context of the SDK Runtime, the package
// name of the app that owns this particular instance of the SDK Runtime will
// also be included. e.g.
// com.google.android.sdksandbox:com:com.example.myappwithads
const std::string& host_package_name() const { return host_package_name_; }
// The application name (e.g. "Chrome"). For WebView, this is name of the
// embedding app. In the context of the SDK Runtime, this is the name of the
// app that owns this particular instance of the SDK Runtime.
const std::string& host_version_code() const { return host_version_code_; }
// By default: same as versionCode. For WebView: versionCode of the embedding
// app. In the context of the SDK Runtime, this is the versionCode of the app
// that owns this particular instance of the SDK Runtime.
const std::string& host_package_label() const { return host_package_label_; }
// The SHA256 of the public certificate used to sign the host application.
// This will default to an empty string if we were unable to retrieve it.
const std::string host_signing_cert_sha256();
const std::string& package_version_code() const {
return package_version_code_;
}
const std::string& package_version_name() const {
return package_version_name_;
}
const std::string& package_name() const { return package_name_; }
const std::string& resources_version() const { return resources_version_; }
const std::string& build_type() const { return build_type_; }
const std::string& board() const { return board_; }
const std::string& installer_package_name() const {
return installer_package_name_;
}
const std::string& abi_name() const { return abi_name_; }
int sdk_int() const { return sdk_int_; }
// Returns the targetSdkVersion of the currently running app. If called from a
// library, this returns the embedding app's targetSdkVersion.
//
// This can only be compared to finalized SDK versions, never against
// pre-release Android versions. For pre-release Android versions, see the
// targetsAtLeast*() methods in BuildInfo.java.
int target_sdk_version() const { return target_sdk_version_; }
bool is_debug_android() const { return is_debug_android_; }
bool is_tv() const { return is_tv_; }
const std::string& version_incremental() const {
return version_incremental_;
}
const std::string& hardware() const { return hardware_; }
bool is_automotive() const { return is_automotive_; }
const std::string& codename() const { return codename_; }
bool is_foldable() const { return is_foldable_; }
bool is_desktop() const { return is_desktop_; }
// Available only on Android T+.
int32_t vulkan_deqp_level() const { return vulkan_deqp_level_; }
// Available only on android S+. For S-, this method returns empty string.
const std::string& soc_manufacturer() const { return soc_manufacturer_; }
bool is_debug_app() const { return is_debug_app_; }
private:
friend struct BuildInfoSingletonTraits;
explicit BuildInfo();
const std::string brand_;
const std::string device_;
const std::string android_build_id_;
const std::string manufacturer_;
const std::string model_;
const int sdk_int_;
const std::string build_type_;
const std::string board_;
const std::string host_package_name_;
const std::string host_version_code_;
const std::string host_package_label_;
const std::string package_name_;
const std::string package_version_code_;
const std::string package_version_name_;
const std::string android_build_fp_;
const std::string installer_package_name_;
const std::string abi_name_;
const std::string resources_version_;
const int target_sdk_version_;
const bool is_debug_android_;
const bool is_tv_;
const std::string version_incremental_;
const std::string hardware_;
const bool is_automotive_;
const std::string codename_;
const int32_t vulkan_deqp_level_;
const bool is_foldable_;
const std::string soc_manufacturer_;
const bool is_debug_app_;
const bool is_desktop_;
};
} // namespace base::android
#endif // BASE_ANDROID_BUILD_INFO_H_