Shane Farmer 11cdc1cf7a AAPT2: Add order attribute to groups
Require explicit ordering of groups in the configuration file to ensure
that the correct version code is set. Ordering based on a single ABI is
straight forward to ensure Play Store delivers the correct APK, but when
an APK needs more than one ABI things get messy quickly. This also goes
for screen density etc. The only thing that is easily sorted without
this attribute is android-sdk since an artifact can only reference a
single SDK.

Test: unit tests
Test: manually split an APK with update config.xml
Change-Id: I37a2b8b8a8409d6d6ff27c7142d4c8c8065a7a51
2018-02-02 12:11:18 -08:00

175 lines
6.3 KiB
XML

<?xml version="1.0" encoding="utf-8" ?>
<xsd:schema
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified"
xmlns="http://schemas.android.com/tools/aapt2"
targetNamespace="http://schemas.android.com/tools/aapt2">
<xsd:element name="post-process">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="artifacts" type="artifacts"/>
<xsd:element name="android-sdks" type="android-sdks"/>
<xsd:element name="abi-groups" type="abi-groups"/>
<xsd:element name="screen-density-groups" type="screen-density-groups"/>
<xsd:element name="locale-groups" type="locale-groups"/>
<xsd:element name="gl-texture-groups" type="gl-texture-groups"/>
<xsd:element name="device-feature-groups" type="device-feature-groups"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:complexType name="android-sdks">
<xsd:sequence>
<xsd:element name="android-sdk" type="android-sdk" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="abi-groups">
<xsd:sequence>
<xsd:element name="abi-group" type="abi-group" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="screen-density-groups">
<xsd:sequence>
<xsd:element name="screen-density-group" type="screen-density-group" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="locale-groups">
<xsd:sequence>
<xsd:element name="locale-group" type="locale-group" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="gl-texture-groups">
<xsd:sequence>
<xsd:element
name="gl-texture-group"
type="gl-texture-group"
maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="device-feature-groups">
<xsd:sequence>
<xsd:element name="device-feature-group" type="device-feature-group" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="artifacts">
<xsd:sequence>
<xsd:element name="artifact-format" type="xsd:string"/>
<xsd:element name="artifact" type="artifact" maxOccurs="unbounded"/>
</xsd:sequence>
<xsd:attribute name="generate-all" type="xsd:boolean"/>
</xsd:complexType>
<!-- Groups output artifacts together by dimension labels. -->
<xsd:complexType name="artifact">
<xsd:attribute name="abi-group" type="xsd:string"/>
<xsd:attribute name="android-sdk-group" type="xsd:string"/>
<xsd:attribute name="device-feature-group" type="xsd:string"/>
<xsd:attribute name="gl-texture-group" type="xsd:string"/>
<xsd:attribute name="screen-density-group" type="xsd:string"/>
<xsd:attribute name="locale-group" type="xsd:string"/>
</xsd:complexType>
<xsd:complexType name="gl-texture-group">
<xsd:sequence>
<xsd:element name="gl-texture" type="gl-texture" maxOccurs="unbounded"/>
</xsd:sequence>
<xsd:attribute name="label" type="xsd:string"/>
<xsd:attribute name="version-code-order" type="xsd:unsignedInt" use="required"/>
</xsd:complexType>
<xsd:complexType name="gl-texture">
<xsd:sequence>
<xsd:element name="texture-path" type="xsd:string" maxOccurs="unbounded"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/>
</xsd:complexType>
<xsd:complexType name="device-feature-group">
<xsd:sequence>
<xsd:element name="supports-feature" type="xsd:string" maxOccurs="unbounded"/>
</xsd:sequence>
<xsd:attribute name="label" type="xsd:string"/>
<xsd:attribute name="version-code-order" type="xsd:unsignedInt" use="required"/>
</xsd:complexType>
<xsd:complexType name="abi-group">
<xsd:sequence>
<xsd:element name="abi" type="abi-name" maxOccurs="unbounded"/>
</xsd:sequence>
<xsd:attribute name="label" type="xsd:string"/>
<xsd:attribute name="version-code-order" type="xsd:unsignedInt" use="required"/>
</xsd:complexType>
<xsd:simpleType name="abi-name">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="armeabi"/>
<xsd:enumeration value="armeabi-v7a"/>
<xsd:enumeration value="arm64-v8a"/>
<xsd:enumeration value="x86"/>
<xsd:enumeration value="x86_64"/>
<xsd:enumeration value="mips"/>
<xsd:enumeration value="mips64"/>
<xsd:enumeration value="fat"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:complexType name="screen-density-group">
<xsd:sequence>
<xsd:element name="screen-density" type="screen-density" maxOccurs="unbounded"/>
</xsd:sequence>
<xsd:attribute name="label" type="xsd:string"/>
<xsd:attribute name="version-code-order" type="xsd:unsignedInt" use="required"/>
</xsd:complexType>
<xsd:simpleType name="screen-density">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="alldpi"/>
<xsd:enumeration value="ldpi"/>
<xsd:enumeration value="mdpi"/>
<xsd:enumeration value="hdpi"/>
<xsd:enumeration value="xhdpi"/>
<xsd:enumeration value="xxhdpi"/>
<xsd:enumeration value="xxxhdpi"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:complexType name="android-sdk">
<!-- TODO(safarmer): Add permissions to add/remove. -->
<!-- TODO(safarmer): Add option for uncompressed native libs. -->
<xsd:sequence>
<xsd:element name="manifest" type="manifest"/>
</xsd:sequence>
<xsd:attribute name="label" type="xsd:string" use="required"/>
<xsd:attribute name="minSdkVersion" type="xsd:integer" use="required"/>
<xsd:attribute name="targetSdkVersion" type="xsd:integer"/>
<xsd:attribute name="maxSdkVersion" type="xsd:integer"/>
</xsd:complexType>
<!-- TODO(safarmer): Figure out the best way to handle manifest updates. -->
<xsd:simpleType name="manifest">
<xsd:restriction base="xsd:string"/>
</xsd:simpleType>
<xsd:complexType name="locale-group">
<xsd:sequence>
<xsd:element name="locale" type="locale" maxOccurs="unbounded"/>
</xsd:sequence>
<xsd:attribute name="label" type="xsd:string"/>
<xsd:attribute name="version-code-order" type="xsd:unsignedInt" use="required"/>
</xsd:complexType>
<xsd:complexType name="locale">
<xsd:attribute name="lang" type="xsd:string"/>
<xsd:attribute name="region" type="xsd:string"/>
<xsd:attribute name="compressed" type="xsd:boolean"/>
</xsd:complexType>
</xsd:schema>