在以前的版本中,只能使用
getResourceID()
API 访问 Android 本机扩展中的本机 Android 资源,而不能对 ANE 使用 R.* 机制。从 AIR 4.0 开始,将可以使用 R.* 机制访问资源。使用 R.* 机制时,应确保使用平台描述符 platform.xml,其中已定义所有依赖项:
<?xml version="1.0"?>
<xs:schema
xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://ns.adobe.com/air/extension/4.0"
xmlns="http://ns.adobe.com/air/extension/4.0"
elementFormDefault="qualified">
<xs:element name="platform">
<xs:complexType>
<xs:all>
<xs:element name="description" type="LocalizableType" minOccurs="0"/>
<xs:element name="copyright" type="xs:string" minOccurs="0"/>
<xs:element name="packagedDependencies" minOccurs="0">
<xs:complexType>
<xs:all>
<xs:element name="packagedDependency" type="name" minOccurs="0" maxOccurs="unbounded"/>
</xs:all>
</xs:complexType>
</xs:element>
<xs:element name="packagedResources" minOccurs="0">
<xs:complexType>
<xs:all>
<xs:element name="packagedResource" minOccurs="0" maxOccurs="unbounded"/>
<xs:complexType>
<xs:all>
<xs:element name="packageName" type="name" minOccurs="0"/>
<xs:element name="folderName" type="name" minOccurs="0"/>
</xs:all>
</xs:complexType>
</xs:all>
</xs:element>
</xs:complexType>
</xs:element>
</xs:all>
</xs:complexType>
</xs:element>
<xs:simpleType name="name">
<xs:restriction base="xs:string">
<xs:pattern value="[A-Za-z0-9\-\.]{1,255}"/>
</xs:restriction>
</xs:simpleType>
<xs:complexType name="LocalizableType" mixed="true">
<xs:sequence>
<xs:element name="text" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="lang" type="xs:language" use="required"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:schema>
以下是
platform.xml
中依赖项的一个示例:
<packagedDependencies>
<packagedDependency>android-support-v4.jar</packagedDependency>
<packagedDependency>google-play-services.jar</packagedDependency>
</packagedDependencies>
<packagedResources>
<packagedResource>
<packageName>com.myane.sampleasextension</packageName>
<folderName>ane-res</folderName>
</packagedResource>
<packagedResource>
<packageName>com.google.android.gms</packageName>
<folderName>google-play-services-res</folderName>
</packagedResource>
</packagedResources>
其中:
-
packagedDependencies
用于提供 ANE 所依赖的所有 JAR 文件的名称。
-
packagedResources
定义 ANE 或任何其他 JAR 文件使用的资源。
-
folderName
定义资源文件夹的名称。
-
packageName
定义使用这些资源的 JAR 文件的包名称。
-
packagedDependencies
和
packagedResources
将从扩展命名空间 4.0 开始提供。
Android-ARM 文件夹包含所有 ANE JAR 文件和资源以及第三方 JAR 文件。以下是一个 ANE 打包命令示例:
bin/adt -package -target ane sample.ane extension.xml -swc sampleane.swc -platform Android-ARM -platformoptions platform.xml -C Android-ARM .
使用 R.* 资源访问机制时,您不需要将第三方 JAR 文件和资源与 ANE JAR 文件和资源进行合并。ADT 会在内部合并这些 JAR 文件和资源。所有依赖项和资源仍需要打包在 ANE 中。
注意:
-
ANE 项目应是一个库项目,R.* 资源访问机制才会有效。
-
对资源文件夹的名称没有限制,可以“res”或任何其他有效字符串开头。
-
如果打包 ANE 时未使用
-platformoptions
开关,则只能通过
getResourceId()
机制进行资源访问。