在 XML 中无法从 AAR 中找到资源标识符
Can't find resource identifiers from AAR in XML
我为应用程序开发了自定义首选项。它有两个自定义属性。我正在尝试将首选项移至库项目以在其他项目中重用。我移动了 Java 文件以及相应的布局和属性 XML 文件。这是库项目中的 attr 文件:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="NumberPickerPreference" >
<attr name="minValue" format="integer" />
<attr name="maxValue" format="integer" />
</declare-styleable>
</resources>
这是清单:
<manifest package="com.mydomain.androiduilibrary">
</manifest>
肯定是一张看起来很奇怪的清单。当我生成库项目时,Android Studio 放在清单中的唯一东西是 SDK 信息,然后它生成了一个警告,说明它已经在 build.gradle 文件中指定,所以我删除了清单。
我使用 bundleRelease 任务生成 AAR 文件并获得一个名为 androiduilibrary-release.aar 的文件。然后我转到需要使用此 Preference 和 select "New Module | Import .JAR or .AAR Package" 的项目,导航到 AAR,它现在作为一个名为 androiduilibrary-release 的模块出现在我的项目中。我在“项目结构”对话框中建立了模块依赖关系,现在可以在 Java 代码中引用首选项。到目前为止,还不错。
但是,当我尝试引用 XML 中的首选项时,我的自定义属性出现以下错误:"Error:(9) No resource identifier found for attribute 'minValue' in package 'com.mydomain.androiduilibrary'"。这是 XML:
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android"
android:title="@string/location_service_settings_preference_header_title"
xmlns:custom="http://schemas.android.com/apk/res/com.mydomain.androiduilibrary">
<com.mydomain.androiduilibrary.NumberPickerPreference
android:title="@string/update_interval_preference_title"
android:key="@string/update_interval_preference_key"
android:defaultValue="@integer/update_interval_preference_default"
android:summary="@string/update_interval_preference_summary"
custom:minValue="@integer/update_interval_preference_min"
custom:maxValue="@integer/update_interval_preference_max"
android:dialogMessage="@string/update_interval_preference_dialog_message"
android:dialogTitle="@string/update_interval_preference_title" />
我可以查看 AAR 内部并看到值正在填充 R.txt:
int attr maxValue 0x7f010001
int attr minValue 0x7f010000
并且其清单正在正确创建:
<?xml version="1.0" encoding="UTF-8"?>
<manifest android:versionName="1.0" android:versionCode="1"
xmlns:android="http://schemas.android.com/apk/res/android" package="com.mydomain.androiduilibrary">
<uses-sdk android:targetSdkVersion="21" android:minSdkVersion="11"/>
</manifest>
我在调出自定义首选项时也收到警告:"Element com.mydomain.androiduilibrary.NumberPickerPreference is not allowed here" 所以我猜这也是一个问题。
是否缺少允许我在 XML 中引用 AAR 中的元素的步骤?我正在使用 Android Studio 1.0.2。提前致谢。
从 this post 解决了它,在底部谈论外部库的地方。本质上,在代码中引用 AAR 元素时,您使用 AAR 清单中指定的包来执行此操作,但在 XML 中引用 AAR 元素时,您引用项目的命名空间(而不是 AAR)。
我为应用程序开发了自定义首选项。它有两个自定义属性。我正在尝试将首选项移至库项目以在其他项目中重用。我移动了 Java 文件以及相应的布局和属性 XML 文件。这是库项目中的 attr 文件:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="NumberPickerPreference" >
<attr name="minValue" format="integer" />
<attr name="maxValue" format="integer" />
</declare-styleable>
</resources>
这是清单:
<manifest package="com.mydomain.androiduilibrary">
</manifest>
肯定是一张看起来很奇怪的清单。当我生成库项目时,Android Studio 放在清单中的唯一东西是 SDK 信息,然后它生成了一个警告,说明它已经在 build.gradle 文件中指定,所以我删除了清单。
我使用 bundleRelease 任务生成 AAR 文件并获得一个名为 androiduilibrary-release.aar 的文件。然后我转到需要使用此 Preference 和 select "New Module | Import .JAR or .AAR Package" 的项目,导航到 AAR,它现在作为一个名为 androiduilibrary-release 的模块出现在我的项目中。我在“项目结构”对话框中建立了模块依赖关系,现在可以在 Java 代码中引用首选项。到目前为止,还不错。
但是,当我尝试引用 XML 中的首选项时,我的自定义属性出现以下错误:"Error:(9) No resource identifier found for attribute 'minValue' in package 'com.mydomain.androiduilibrary'"。这是 XML:
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android"
android:title="@string/location_service_settings_preference_header_title"
xmlns:custom="http://schemas.android.com/apk/res/com.mydomain.androiduilibrary">
<com.mydomain.androiduilibrary.NumberPickerPreference
android:title="@string/update_interval_preference_title"
android:key="@string/update_interval_preference_key"
android:defaultValue="@integer/update_interval_preference_default"
android:summary="@string/update_interval_preference_summary"
custom:minValue="@integer/update_interval_preference_min"
custom:maxValue="@integer/update_interval_preference_max"
android:dialogMessage="@string/update_interval_preference_dialog_message"
android:dialogTitle="@string/update_interval_preference_title" />
我可以查看 AAR 内部并看到值正在填充 R.txt:
int attr maxValue 0x7f010001
int attr minValue 0x7f010000
并且其清单正在正确创建:
<?xml version="1.0" encoding="UTF-8"?>
<manifest android:versionName="1.0" android:versionCode="1"
xmlns:android="http://schemas.android.com/apk/res/android" package="com.mydomain.androiduilibrary">
<uses-sdk android:targetSdkVersion="21" android:minSdkVersion="11"/>
</manifest>
我在调出自定义首选项时也收到警告:"Element com.mydomain.androiduilibrary.NumberPickerPreference is not allowed here" 所以我猜这也是一个问题。
是否缺少允许我在 XML 中引用 AAR 中的元素的步骤?我正在使用 Android Studio 1.0.2。提前致谢。
从 this post 解决了它,在底部谈论外部库的地方。本质上,在代码中引用 AAR 元素时,您使用 AAR 清单中指定的包来执行此操作,但在 XML 中引用 AAR 元素时,您引用项目的命名空间(而不是 AAR)。