我不确定我是否遇到了Android工具中的错误,或者这是否是设计错误。问题是这样的:我有一个导出小部件的Android库项目。作为该窗口小部件的一部分,可以使用R.styleable导出可样式属性:
图书馆项目(package = com.example.mylib):
<declare-styleable name="com.example.MyWidget">
<attr name="someAttr" format="integer" />
</declare-styleable>
App project(package = 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”来解决这个问题,但当然这不是我想要的!我错过了什么吗?
答案 0 :(得分:1)
这是一个已知错误#9656。我写过两篇关于此问题的帖子:here和here。我已经解释了为什么会发生这种情况以及如果你现在确实需要这个问题,如何修补问题以解决这个问题。
目前,如果您不想重建aapt,则需要将所有使用这些自定义属性的自定义属性和布局从库移动到应用程序。
答案 1 :(得分:0)
对于可能仍在寻找答案的任何人:从ADT 17开始,您必须使用 http://schemas.android.com/apk/res-auto 作为库中自定义属性的命名空间项目,作为一种魅力:
xmnls:mylib="http://schemas.android.com/apk/res-auto"