我不确定我是否在此处的Android工具中遇到错误,或者是通过设计遇到的。问题是:我有一个导出小部件的Android库项目。作为该窗口小部件的一部分,可延长的属性在R.Stylable中导出:

图书馆项目(软件包= com.example.mylib):

<declare-styleable name="com.example.MyWidget">
    <attr name="someAttr" format="integer" />
</declare-styleable>

应用程序(软件包= com.example.myapp):

<LinearLayout xmnls:mylib="http://schemas.android.com/apk/res/com.example.mylib">
  <com.example.MyWidget android:id="..." mylib:someAttr="1" />
</LinearLayout>

问题是, someAttr 每当库和应用程序使用相同的软件包标识符时,Android/ADT似乎只能看到属性!在这种情况下,它们不会,并且ADT失败了以下错误:

在软件包'com.example.mylib'中找不到属性“ someAttr”的资源标识符

就像我说的那样,我可以通过将应用程序的软件包名称更改为“ com.example.mylib”来解决此问题,但是当然,这不是我想要的!我想念什么吗?

有帮助吗?

解决方案

这是一个已知的错误 #9656. 。我写了两个有关此问题的文章: 这里这里. 。我解释了为什么会发生这种情况以及如何修补APT以解决此问题的原因,如果您现在真的需要解决此问题。

目前,如果您不想重建AAPT,则需要移动所有自定义属性和使用这些自定义属性从库到应用程序的布局。

其他提示

对于可能仍在寻找答案的任何人:自ADT 17以来,您必须使用 http://schemas.android.com/apk/res-auto 作为图书馆项目中自定义属性的名称空间,可作为魅力:

xmnls:mylib="http://schemas.android.com/apk/res-auto"
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top