无法在XML中找到AAR中的资源标识符

时间:2015-02-16 00:52:44

标签: android android-studio android-library aar

我为应用程序开发了自定义首选项。它有两个自定义属性。我试图将Preference移动到库项目以在其他项目中重用。我将Java文件与相应的布局和attr 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的项目并选择&#34; New Module |导入.JAR或.AAR包&#34;,导航到AAR,它现在作为名为androiduilibrary-release的模块在我的项目中。我在Project Structure对话框中创建了一个模块依赖项,现在可以在Java代码中引用Preference。到目前为止,非常好。

但是,当我尝试在XML中引用Preference时,我的自定义属性出现以下错误:&#34;错误:(9)找不到属性&#39; minValue&#39;在包装&#39; com.mydomain.androiduilibrary&#39;&#34;。这是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>

在调出自定义偏好时我也会收到警告:&#34;此处不允许使用元素com.mydomain.androiduilibrary.NumberPickerPreference&#34;所以我猜这也是一个问题。

我是否缺少一个允许我在XML中引用AAR元素的步骤?我使用的是Android Studio 1.0.2。提前谢谢。

1 个答案:

答案 0 :(得分:6)

this帖子解决它,在它讨论外部库的底部。本质上,当在代码中引用AAR元素时,您可以使用AAR的清单中指定的包来实现,但在引用XML中的AAR元素时,您引用项目的命名空间(而不是AAR)。