2

我不确定我是否在这里遇到了 Android 工具中的错误,或者这是否是设计使然。问题是这样的:我有一个导出小部件的 Android 库项目。作为该小部件的一部分,可样式化属性在 R.styleable 中导出:

库项目(包 = 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”来解决这个问题,但这当然不是我想要的!我错过了什么吗?

4

2 回答 2

1

这是一个已知的错误#9656。我写了两篇关于这个问题的帖子:这里这里。我已经解释了为什么会发生这种情况,以及如果你现在真的需要修复这个问题,如何修补 aapt 来解决这个问题。

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

于 2011-07-24T12:10:25.620 回答
0

对于可能仍在寻找答案的任何人:从 ADT 17 开始,您必须使用http://schemas.android.com/apk/res-auto作为库项目中自定义属性的命名空间,这很有魅力:

xmnls:mylib="http://schemas.android.com/apk/res-auto"
于 2012-09-26T08:27:42.737 回答