aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/tools/android/java/com/google/devtools/build/android/proto/Resources.proto
diff options
context:
space:
mode:
Diffstat (limited to 'src/tools/android/java/com/google/devtools/build/android/proto/Resources.proto')
-rw-r--r--src/tools/android/java/com/google/devtools/build/android/proto/Resources.proto687
1 files changed, 687 insertions, 0 deletions
diff --git a/src/tools/android/java/com/google/devtools/build/android/proto/Resources.proto b/src/tools/android/java/com/google/devtools/build/android/proto/Resources.proto
new file mode 100644
index 0000000000..27789a3162
--- /dev/null
+++ b/src/tools/android/java/com/google/devtools/build/android/proto/Resources.proto
@@ -0,0 +1,687 @@
+/*
+ * Copyright 2017 The Bazel Authors. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+syntax = "proto3";
+
+package aapt.pb;
+
+option java_package = "com.android.aapt";
+
+// A string pool that wraps the binary form of the C++ class
+// android::ResStringPool.
+message StringPool {
+ bytes data = 1;
+}
+
+// The position of a declared entity within a file.
+message SourcePosition {
+ uint32 line_number = 1;
+ uint32 column_number = 2;
+}
+
+// Developer friendly source file information for an entity in the resource
+// table.
+message Source {
+ // The index of the string path within the source string pool of a
+ // ResourceTable.
+ uint32 path_idx = 1;
+ SourcePosition position = 2;
+}
+
+// Top level message representing a resource table.
+message ResourceTable {
+ // The string pool containing source paths referenced throughout the resource
+ // table. This does not end up in the final binary ARSC file.
+ StringPool source_pool = 1;
+
+ // Resource definitions corresponding to an Android package.
+ repeated Package package = 2;
+}
+
+// A package ID in the range [0x00, 0xff].
+message PackageId {
+ uint32 id = 1;
+}
+
+// Defines resources for an Android package.
+message Package {
+ // The package ID of this package, in the range [0x00, 0xff].
+ // - ID 0x00 is reserved for shared libraries, or when the ID is assigned at
+ // run-time.
+ // - ID 0x01 is reserved for the 'android' package (framework).
+ // - ID range [0x02, 0x7f) is reserved for auto-assignment to shared libraries
+ // at run-time.
+ // - ID 0x7f is reserved for the application package.
+ // - IDs > 0x7f are reserved for the application as well and are treated as
+ // feature splits. This may not be set if no ID was assigned.
+ PackageId package_id = 1;
+
+ // The Java compatible Android package name of the app.
+ string package_name = 2;
+
+ // The series of types defined by the package.
+ repeated Type type = 3;
+}
+
+// A type ID in the range [0x01, 0xff].
+message TypeId {
+ uint32 id = 1;
+}
+
+// A set of resources grouped under a common type. Such types include string,
+// layout, xml, dimen, attr, etc. This maps to the second part of a resource
+// identifier in Java (R.type.entry).
+message Type {
+ // The ID of the type. This may not be set if no ID was assigned.
+ TypeId id = 1;
+
+ // The name of the type. This corresponds to the 'type' part of a full
+ // resource name of the form package:type/entry. The set of legal type names
+ // is listed in Resource.cpp.
+ string name = 2;
+
+ // The entries defined for this type.
+ repeated Entry entry = 3;
+}
+
+// The status of a symbol/entry. This contains information like visibility
+// (public/private), comments, and whether the entry can be overridden.
+message SymbolStatus {
+ // The visibility of the resource outside of its package.
+ enum Visibility {
+ // No visibility was explicitly specified. This is typically treated as
+ // private. The distinction is important when two separate R.java files are
+ // generated: a public and private one. An unknown visibility, in this case,
+ // would cause the resource to be omitted from either R.java.
+ UNKNOWN = 0;
+
+ // A resource was explicitly marked as private. This means the resource can
+ // not be accessed outside of its package unless the @*package:type/entry
+ // notation is used (the asterisk being the private accessor). If two R.java
+ // files are generated (private + public), the resource will only be emitted
+ // to the private R.java file.
+ PRIVATE = 1;
+
+ // A resource was explicitly marked as public. This means the resource can
+ // be accessed from any package, and is emitted into all R.java files,
+ // public and private.
+ PUBLIC = 2;
+ }
+
+ Visibility visibility = 1;
+
+ // The path at which this entry's visibility was defined (eg. public.xml).
+ Source source = 2;
+
+ // The comment associated with the <public> tag.
+ string comment = 3;
+
+ // Whether the symbol can be merged into another resource table without there
+ // being an existing definition to override. Used for overlays and set to true
+ // when <add-resource> is specified.
+ bool allow_new = 4;
+}
+
+// An entry ID in the range [0x0000, 0xffff].
+message EntryId {
+ uint32 id = 1;
+}
+
+// An entry declaration. An entry has a full resource ID that is the combination
+// of package ID, type ID, and its own entry ID. An entry on its own has no
+// value, but values are defined for various configurations/variants.
+message Entry {
+ // The ID of this entry. Together with the package ID and type ID, this forms
+ // a full resource ID of the form 0xPPTTEEEE, where PP is the package ID, TT
+ // is the type ID, and EEEE is the entry ID. This may not be set if no ID was
+ // assigned.
+ EntryId id = 1;
+
+ // The name of this entry. This corresponds to the 'entry' part of a full
+ // resource name of the form package:type/entry.
+ string name = 2;
+
+ // The symbol status of this entry, which includes visibility information.
+ SymbolStatus symbol_status = 3;
+
+ // The set of values defined for this entry, each corresponding to a different
+ // configuration/variant.
+ repeated ConfigValue config_value = 4;
+}
+
+// A Configuration/Value pair.
+message ConfigValue {
+ Configuration config = 1;
+ Value value = 2;
+}
+
+// The generic meta-data for every value in a resource table.
+message Value {
+ // Where the value was defined.
+ Source source = 1;
+
+ // Any comment associated with the value.
+ string comment = 2;
+
+ // Whether the value can be overridden.
+ bool weak = 3;
+
+ // The value is either an Item or a CompoundValue.
+ oneof value {
+ Item item = 4;
+ CompoundValue compound_value = 5;
+ }
+}
+
+// An Item is an abstract type. It represents a value that can appear inline in
+// many places, such as XML attribute values or on the right hand side of style
+// attribute definitions. The concrete type is one of the types below. Only one
+// can be set.
+message Item {
+ oneof value {
+ Reference ref = 1;
+ String str = 2;
+ RawString raw_str = 3;
+ StyledString styled_str = 4;
+ FileReference file = 5;
+ Id id = 6;
+ Primitive prim = 7;
+ }
+}
+
+// A CompoundValue is an abstract type. It represents a value that is a made of
+// other values. These can only usually appear as top-level resources. The
+// concrete type is one of the types below. Only one can be set.
+message CompoundValue {
+ oneof value {
+ Attribute attr = 1;
+ Style style = 2;
+ Styleable styleable = 3;
+ Array array = 4;
+ Plural plural = 5;
+ }
+}
+
+// A value that is a reference to another resource. This reference can be by
+// name or resource ID.
+message Reference {
+ enum Type {
+ // A plain reference (@package:type/entry).
+ REFERENCE = 0;
+
+ // A reference to a theme attribute (?package:type/entry).
+ ATTRIBUTE = 1;
+ }
+
+ Type type = 1;
+
+ // The resource ID (0xPPTTEEEE) of the resource being referred. This is
+ // optional.
+ uint32 id = 2;
+
+ // The name of the resource being referred. This is optional if the resource
+ // ID is set.
+ string name = 3;
+
+ // Whether this reference is referencing a private resource
+ // (@*package:type/entry).
+ bool private = 4;
+}
+
+// A value that represents an ID. This is just a placeholder, as ID values are
+// used to occupy a resource ID (0xPPTTEEEE) as a unique identifier. Their value
+// is unimportant.
+message Id {
+}
+
+// A value that is a string.
+message String {
+ string value = 1;
+}
+
+// A value that is a raw string, which is unescaped/uninterpreted. This is
+// typically used to represent the value of a style attribute before the
+// attribute is compiled and the set of allowed values is known.
+message RawString {
+ string value = 1;
+}
+
+// A string with styling information, like html tags that specify boldness,
+// italics, etc.
+message StyledString {
+ // The raw text of the string.
+ string value = 1;
+
+ // A Span marks a region of the string text that is styled.
+ message Span {
+ // The name of the tag, and its attributes, encoded as follows:
+ // tag_name;attr1=value1;attr2=value2;[...]
+ string tag = 1;
+
+ // The first character position this span applies to, in UTF-16 offset.
+ uint32 first_char = 2;
+
+ // The last character position this span applies to, in UTF-16 offset.
+ uint32 last_char = 3;
+ }
+
+ repeated Span span = 2;
+}
+
+// A value that is a reference to an external entity, like an XML file or a PNG.
+message FileReference {
+ // Path to a file within the APK (typically res/type-config/entry.ext).
+ string path = 1;
+}
+
+// A value that represents a primitive data type (float, int, boolean, etc.).
+// Corresponds to the fields (type/data) of the C struct android::Res_value.
+message Primitive {
+ uint32 type = 1;
+ uint32 data = 2;
+}
+
+// A value that represents an XML attribute and what values it accepts.
+message Attribute {
+ // A Symbol used to represent an enum or a flag.
+ message Symbol {
+ // Where the enum/flag item was defined.
+ Source source = 1;
+
+ // Any comments associated with the enum or flag.
+ string comment = 2;
+
+ // The name of the enum/flag as a reference. Enums/flag items are generated
+ // as ID resource values.
+ Reference name = 3;
+
+ // The value of the enum/flag.
+ uint32 value = 4;
+ }
+
+ // Bitmask of formats allowed for an attribute.
+ enum FormatFlags {
+ NONE = 0x0; // Proto3 requires a default of 0.
+ ANY = 0x0000ffff; // Allows any type except ENUM and FLAGS.
+ REFERENCE = 0x01; // Allows Reference values.
+ STRING = 0x02; // Allows String/StyledString values.
+ INTEGER = 0x04; // Allows any integer BinaryPrimitive values.
+ BOOLEAN = 0x08; // Allows any boolean BinaryPrimitive values.
+ COLOR = 0x010; // Allows any color BinaryPrimitive values.
+ FLOAT = 0x020; // Allows any float BinaryPrimitive values.
+ DIMENSION = 0x040; // Allows any dimension BinaryPrimitive values.
+ FRACTION = 0x080; // Allows any fraction BinaryPrimitive values.
+ ENUM = 0x00010000; // Allows enums that are defined in the Attribute's
+ // symbols.
+ // ENUM and FLAGS cannot BOTH be set.
+ FLAGS = 0x00020000; // Allows flags that are defined in the Attribute's
+ // symbols.
+ // ENUM and FLAGS cannot BOTH be set.
+ }
+
+ // A bitmask of types that this XML attribute accepts. Corresponds to the
+ // flags in the enum FormatFlags.
+ uint32 format_flags = 1;
+
+ // The smallest integer allowed for this XML attribute. Only makes sense if
+ // the format includes FormatFlags::INTEGER.
+ int32 min_int = 2;
+
+ // The largest integer allowed for this XML attribute. Only makes sense if the
+ // format includes FormatFlags::INTEGER.
+ int32 max_int = 3;
+
+ // The set of enums/flags defined in this attribute. Only makes sense if the
+ // format includes either FormatFlags::ENUM or FormatFlags::FLAGS. Having both
+ // is an error.
+ repeated Symbol symbol = 4;
+}
+
+// A value that represents a style.
+message Style {
+ // An XML attribute/value pair defined in the style.
+ message Entry {
+ // Where the entry was defined.
+ Source source = 1;
+
+ // Any comments associated with the entry.
+ string comment = 2;
+
+ // A reference to the XML attribute.
+ Reference key = 3;
+
+ // The Item defined for this XML attribute.
+ Item item = 4;
+ }
+
+ // The optinal style from which this style inherits attributes.
+ Reference parent = 1;
+
+ // The source file information of the parent inheritance declaration.
+ Source parent_source = 2;
+
+ // The set of XML attribute/value pairs for this style.
+ repeated Entry entry = 3;
+}
+
+// A value that represents a <declare-styleable> XML resource. These are not
+// real resources and only end up as Java fields in the generated R.java. They
+// do not end up in the binary ARSC file.
+message Styleable {
+ // An attribute defined for this styleable.
+ message Entry {
+ // Where the attribute was defined within the <declare-styleable> block.
+ Source source = 1;
+
+ // Any comments associated with the declaration.
+ string comment = 2;
+
+ // The reference to the attribute.
+ Reference attr = 3;
+ }
+
+ // The set of attribute declarations.
+ repeated Entry entry = 1;
+}
+
+// A value that represents an array of resource values.
+message Array {
+ // A single element of the array.
+ message Element {
+ // Where the element was defined.
+ Source source = 1;
+
+ // Any comments associated with the element.
+ string comment = 2;
+
+ // The value assigned to this element.
+ Item item = 3;
+ }
+
+ // The list of array elements.
+ repeated Element element = 1;
+}
+
+// A value that represents a string and its many variations based on plurality.
+message Plural {
+ // The arity of the plural.
+ enum Arity {
+ ZERO = 0;
+ ONE = 1;
+ TWO = 2;
+ FEW = 3;
+ MANY = 4;
+ OTHER = 5;
+ }
+
+ // The plural value for a given arity.
+ message Entry {
+ // Where the plural was defined.
+ Source source = 1;
+
+ // Any comments associated with the plural.
+ string comment = 2;
+
+ // The arity of the plural.
+ Arity arity = 3;
+
+ // The value assigned to this plural.
+ Item item = 4;
+ }
+
+ // The set of arity/plural mappings.
+ repeated Entry entry = 1;
+}
+
+// Defines an abstract XmlNode that must be either an XmlElement, or
+// a text node represented by a string.
+message XmlNode {
+ oneof node {
+ XmlElement element = 1;
+ string text = 2;
+ }
+
+ // Source line and column info.
+ SourcePosition source = 3;
+}
+
+// An <element> in an XML document.
+message XmlElement {
+ // Namespaces defined on this element.
+ repeated XmlNamespace namespace_declaration = 1;
+
+ // The namespace URI of this element.
+ string namespace_uri = 2;
+
+ // The name of this element.
+ string name = 3;
+
+ // The attributes of this element.
+ repeated XmlAttribute attribute = 4;
+
+ // The children of this element.
+ repeated XmlNode child = 5;
+}
+
+// A namespace declaration on an XmlElement (xmlns:android="http://...").
+message XmlNamespace {
+ string prefix = 1;
+ string uri = 2;
+
+ // Source line and column info.
+ SourcePosition source = 3;
+}
+
+// An attribute defined on an XmlElement (android:text="...").
+message XmlAttribute {
+ string namespace_uri = 1;
+ string name = 2;
+ string value = 3;
+
+ // Source line and column info.
+ SourcePosition source = 4;
+
+ // The optional resource ID (0xPPTTEEEE) of the attribute.
+ uint32 resource_id = 5;
+
+ // The optional interpreted/compiled version of the `value` string.
+ Item compiled_item = 6;
+}
+
+// A description of the requirements a device must have in order for a
+// resource to be matched and selected.
+message Configuration {
+ enum LayoutDirection {
+ LAYOUT_DIRECTION_UNSET = 0;
+ LAYOUT_DIRECTION_LTR = 1;
+ LAYOUT_DIRECTION_RTL = 2;
+ }
+
+ enum ScreenLayoutSize {
+ SCREEN_LAYOUT_SIZE_UNSET = 0;
+ SCREEN_LAYOUT_SIZE_SMALL = 1;
+ SCREEN_LAYOUT_SIZE_NORMAL = 2;
+ SCREEN_LAYOUT_SIZE_LARGE = 3;
+ SCREEN_LAYOUT_SIZE_XLARGE = 4;
+ }
+
+ enum ScreenLayoutLong {
+ SCREEN_LAYOUT_LONG_UNSET = 0;
+ SCREEN_LAYOUT_LONG_LONG = 1;
+ SCREEN_LAYOUT_LONG_NOTLONG = 2;
+ }
+
+ enum ScreenRound {
+ SCREEN_ROUND_UNSET = 0;
+ SCREEN_ROUND_ROUND = 1;
+ SCREEN_ROUND_NOTROUND = 2;
+ }
+
+ enum WideColorGamut {
+ WIDE_COLOR_GAMUT_UNSET = 0;
+ WIDE_COLOR_GAMUT_WIDECG = 1;
+ WIDE_COLOR_GAMUT_NOWIDECG = 2;
+ }
+
+ enum Hdr {
+ HDR_UNSET = 0;
+ HDR_HIGHDR = 1;
+ HDR_LOWDR = 2;
+ }
+
+ enum Orientation {
+ ORIENTATION_UNSET = 0;
+ ORIENTATION_PORT = 1;
+ ORIENTATION_LAND = 2;
+ ORIENTATION_SQUARE = 3;
+ }
+
+ enum UiModeType {
+ UI_MODE_TYPE_UNSET = 0;
+ UI_MODE_TYPE_NORMAL = 1;
+ UI_MODE_TYPE_DESK = 2;
+ UI_MODE_TYPE_CAR = 3;
+ UI_MODE_TYPE_TELEVISION = 4;
+ UI_MODE_TYPE_APPLIANCE = 5;
+ UI_MODE_TYPE_WATCH = 6;
+ UI_MODE_TYPE_VRHEADSET = 7;
+ }
+
+ enum UiModeNight {
+ UI_MODE_NIGHT_UNSET = 0;
+ UI_MODE_NIGHT_NIGHT = 1;
+ UI_MODE_NIGHT_NOTNIGHT = 2;
+ }
+
+ enum Touchscreen {
+ TOUCHSCREEN_UNSET = 0;
+ TOUCHSCREEN_NOTOUCH = 1;
+ TOUCHSCREEN_STYLUS = 2;
+ TOUCHSCREEN_FINGER = 3;
+ }
+
+ enum KeysHidden {
+ KEYS_HIDDEN_UNSET = 0;
+ KEYS_HIDDEN_KEYSEXPOSED = 1;
+ KEYS_HIDDEN_KEYSHIDDEN = 2;
+ KEYS_HIDDEN_KEYSSOFT = 3;
+ }
+
+ enum Keyboard {
+ KEYBOARD_UNSET = 0;
+ KEYBOARD_NOKEYS = 1;
+ KEYBOARD_QWERTY = 2;
+ KEYBOARD_TWELVEKEY = 3;
+ }
+
+ enum NavHidden {
+ NAV_HIDDEN_UNSET = 0;
+ NAV_HIDDEN_NAVEXPOSED = 1;
+ NAV_HIDDEN_NAVHIDDEN = 2;
+ }
+
+ enum Navigation {
+ NAVIGATION_UNSET = 0;
+ NAVIGATION_NONAV = 1;
+ NAVIGATION_DPAD = 2;
+ NAVIGATION_TRACKBALL = 3;
+ NAVIGATION_WHEEL = 4;
+ }
+
+ //
+ // Axis/dimensions that are understood by the runtime.
+ //
+
+ // Mobile country code.
+ uint32 mcc = 1;
+
+ // Mobile network code.
+ uint32 mnc = 2;
+
+ // BCP-47 locale tag.
+ string locale = 3;
+
+ // Left-to-right, right-to-left...
+ LayoutDirection layout_direction = 4;
+
+ // Screen width in pixels. Prefer screen_width_dp.
+ uint32 screen_width = 5;
+
+ // Screen height in pixels. Prefer screen_height_dp.
+ uint32 screen_height = 6;
+
+ // Screen width in density independent pixels (dp).
+ uint32 screen_width_dp = 7;
+
+ // Screen height in density independent pixels (dp).
+ uint32 screen_height_dp = 8;
+
+ // The smallest screen dimension, regardless of orientation, in dp.
+ uint32 smallest_screen_width_dp = 9;
+
+ // Whether the device screen is classified as small, normal, large, xlarge.
+ ScreenLayoutSize screen_layout_size = 10;
+
+ // Whether the device screen is long.
+ ScreenLayoutLong screen_layout_long = 11;
+
+ // Whether the screen is round (Android Wear).
+ ScreenRound screen_round = 12;
+
+ // Whether the screen supports wide color gamut.
+ WideColorGamut wide_color_gamut = 13;
+
+ // Whether the screen has high dynamic range.
+ Hdr hdr = 14;
+
+ // Which orientation the device is in (portrait, landscape).
+ Orientation orientation = 15;
+
+ // Which type of UI mode the device is in (television, car, etc.).
+ UiModeType ui_mode_type = 16;
+
+ // Whether the device is in night mode.
+ UiModeNight ui_mode_night = 17;
+
+ // The device's screen density in dots-per-inch (dpi).
+ uint32 density = 18;
+
+ // Whether a touchscreen exists, supports a stylus, or finger.
+ Touchscreen touchscreen = 19;
+
+ // Whether the keyboard hardware keys are currently hidden, exposed, or
+ // if the keyboard is a software keyboard.
+ KeysHidden keys_hidden = 20;
+
+ // The type of keyboard present (none, QWERTY, 12-key).
+ Keyboard keyboard = 21;
+
+ // Whether the navigation is exposed or hidden.
+ NavHidden nav_hidden = 22;
+
+ // The type of navigation present on the device
+ // (trackball, wheel, dpad, etc.).
+ Navigation navigation = 23;
+
+ // The minimum SDK version of the device.
+ uint32 sdk_version = 24;
+
+ //
+ // Build-time only dimensions.
+ //
+
+ string product = 25;
+}