// Messages describing APK Set's table of contents (toc.pb entry). // Please be advised that the ultimate source is at // https://github.com/google/bundletool/tree/master/src/main/proto // so you have been warned. syntax = "proto3"; package android.bundle; option go_package = "android_bundle_proto"; option java_package = "com.android.bundle"; // Targeting on the level of variants. message VariantTargeting { SdkVersionTargeting sdk_version_targeting = 1; AbiTargeting abi_targeting = 2; ScreenDensityTargeting screen_density_targeting = 3; MultiAbiTargeting multi_abi_targeting = 4; TextureCompressionFormatTargeting texture_compression_format_targeting = 5; } // Targeting on the level of individual APKs. message ApkTargeting { AbiTargeting abi_targeting = 1; GraphicsApiTargeting graphics_api_targeting = 2; LanguageTargeting language_targeting = 3; ScreenDensityTargeting screen_density_targeting = 4; SdkVersionTargeting sdk_version_targeting = 5; TextureCompressionFormatTargeting texture_compression_format_targeting = 6; MultiAbiTargeting multi_abi_targeting = 7; SanitizerTargeting sanitizer_targeting = 8; } // Targeting on the module level. // The semantic of the targeting is the "AND" rule on all immediate values. message ModuleTargeting { SdkVersionTargeting sdk_version_targeting = 1; repeated DeviceFeatureTargeting device_feature_targeting = 2; UserCountriesTargeting user_countries_targeting = 3; } // User Countries targeting describing an inclusive/exclusive list of country // codes that module targets. message UserCountriesTargeting { // List of country codes in the two-letter CLDR territory format. repeated string country_codes = 1; // Indicates if the list above is exclusive. bool exclude = 2; } message ScreenDensity { enum DensityAlias { DENSITY_UNSPECIFIED = 0; NODPI = 1; LDPI = 2; MDPI = 3; TVDPI = 4; HDPI = 5; XHDPI = 6; XXHDPI = 7; XXXHDPI = 8; } oneof density_oneof { DensityAlias density_alias = 1; int32 density_dpi = 2; } } // Wrapper message for `int32`. // // The JSON representation for `Int32Value` is JSON number. message Int32Value { // The int32 value. int32 value = 1; } message SdkVersion { // Inclusive. Int32Value min = 1; } message GraphicsApi { oneof api_oneof { // Inclusive. OpenGlVersion min_open_gl_version = 1; // Inclusive. VulkanVersion min_vulkan_version = 2; } } message VulkanVersion { int32 major = 1; // VK_VERSION_MAJOR int32 minor = 2; // VK_VERSION_MINOR } message OpenGlVersion { // e.g. OpenGL ES 3.2 is represented as { major: 3, minor: 2 } int32 major = 1; // GL_MAJOR_VERSION int32 minor = 2; // GL_MINOR_VERSION } message TextureCompressionFormat { enum TextureCompressionFormatAlias { UNSPECIFIED_TEXTURE_COMPRESSION_FORMAT = 0; ETC1_RGB8 = 1; PALETTED = 2; THREE_DC = 3; ATC = 4; LATC = 5; DXT1 = 6; S3TC = 7; PVRTC = 8; ASTC = 9; ETC2 = 10; } TextureCompressionFormatAlias alias = 1; } message Abi { enum AbiAlias { UNSPECIFIED_CPU_ARCHITECTURE = 0; ARMEABI = 1; ARMEABI_V7A = 2; ARM64_V8A = 3; X86 = 4; X86_64 = 5; MIPS = 6; MIPS64 = 7; } AbiAlias alias = 1; } message MultiAbi { repeated Abi abi = 1; } message Sanitizer { enum SanitizerAlias { NONE = 0; HWADDRESS = 1; } SanitizerAlias alias = 1; } message DeviceFeature { string feature_name = 1; // Equivalent of android:glEsVersion or android:version in . int32 feature_version = 2; } // Targeting specific for directories under assets/. message AssetsDirectoryTargeting { AbiTargeting abi = 1; GraphicsApiTargeting graphics_api = 2; TextureCompressionFormatTargeting texture_compression_format = 3; LanguageTargeting language = 4; } // Targeting specific for directories under lib/. message NativeDirectoryTargeting { Abi abi = 1; GraphicsApi graphics_api = 2; TextureCompressionFormat texture_compression_format = 3; Sanitizer sanitizer = 4; } // Targeting specific for image files under apex/. message ApexImageTargeting { MultiAbiTargeting multi_abi = 1; } message AbiTargeting { repeated Abi value = 1; // Targeting of other sibling directories that were in the Bundle. // For master splits this is targeting of other master splits. repeated Abi alternatives = 2; } message MultiAbiTargeting { repeated MultiAbi value = 1; // Targeting of other sibling directories that were in the Bundle. // For master splits this is targeting of other master splits. repeated MultiAbi alternatives = 2; } message ScreenDensityTargeting { repeated ScreenDensity value = 1; // Targeting of other sibling directories that were in the Bundle. // For master splits this is targeting of other master splits. repeated ScreenDensity alternatives = 2; } message LanguageTargeting { // ISO-639: 2 or 3 letter language code. repeated string value = 1; // Targeting of other sibling directories that were in the Bundle. // For master splits this is targeting of other master splits. repeated string alternatives = 2; } message GraphicsApiTargeting { repeated GraphicsApi value = 1; // Targeting of other sibling directories that were in the Bundle. // For master splits this is targeting of other master splits. repeated GraphicsApi alternatives = 2; } message SdkVersionTargeting { repeated SdkVersion value = 1; // Targeting of other sibling directories that were in the Bundle. // For master splits this is targeting of other master splits. repeated SdkVersion alternatives = 2; } message TextureCompressionFormatTargeting { repeated TextureCompressionFormat value = 1; // Targeting of other sibling directories that were in the Bundle. // For master splits this is targeting of other master splits. repeated TextureCompressionFormat alternatives = 2; } message SanitizerTargeting { repeated Sanitizer value = 1; } // Since other atom targeting messages have the "OR" semantic on values // the DeviceFeatureTargeting represents only one device feature to retain // that convention. message DeviceFeatureTargeting { DeviceFeature required_feature = 1; }