1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
use serde::{Deserialize, Serialize};
use crate::VarOrBool;
/// Specifies a [`vendor-provided shared native library`] that the application must be
/// linked against.
///
/// This element tells the system to make the native library accessible for the package.
///
/// NDK libraries are by default accessible and therefore don't require the
/// `<uses-native-library>` tag.
///
/// Non-NDK native shared libraries that are provided by silicon vendors or device
/// manufacturers are not accessible by default if the app is targeting Android 12
/// or higher. The libraries are accessible only when they are explicitly requested
/// using the `<uses-native-library>` tag.
///
/// If the app is targeting Android 11 or lower, the `<uses-native-library>` tag is
/// not required. n that case, any native shared library is accessible regardless
/// of whether it is an NDK library.
///
/// This element also affects the installation of the application on a particular device:
///
/// ## Installation
/// If this element is present and its android:required attribute is set to true,
/// the [`PackageManager`] framework won't let the user install the application unless
/// the library is present on the user's device.
///
/// The android:required attribute is described in detail in the following section.
///
/// ## XML Syntax
/// ```xml
/// <uses-native-library
/// android:name="string"
/// android:required=["true" | "false"] />
/// ```
///
/// ## Contained in
/// * [`<application>`]
///
/// ## Introduced in
/// API Level S
///
/// [`vendor-provided shared native library`]: https://source.android.com/devices/tech/config/namespaces_libraries#adding-additional-native-libraries
/// [`PackageManager`]: https://developer.android.com/reference/android/content/pm/PackageManager
/// [`<application>`]: crate::Application
#[derive(
Debug, Deserialize, Serialize, YaSerialize, YaDeserialize, PartialEq, Eq, Default, Clone,
)]
pub struct UsesNativeLibrary {
/// The name of the library file.
#[yaserde(attribute, prefix = "android")]
pub name: String,
/// Boolean value that indicates whether the application requires the library
/// specified by android:name:
///
/// * `"true"`: The application does not function without this library. The system
/// will
/// not allow the application on a device that does not have the library.
///
/// * `"false"`: The application can use the library if present, but is designed to
/// function
/// without it if necessary. The system will allow the application to be installed,
/// even if the library is not present. If you use `"false"`, you are responsible
/// for gracefully handling the absence of the library.
///
/// The default is `"true"`.
#[yaserde(attribute, prefix = "android")]
pub required: Option<VarOrBool>,
}