Экспорт ресурсов проекта библиотеки Android под другим именем пакета? - PullRequest
2 голосов
/ 24 июля 2011

Я не уверен, сталкиваюсь ли я с ошибкой в ​​инструментах Android здесь, или это из-за замысла. Проблема заключается в следующем: у меня есть проект библиотеки Android, который экспортирует виджет. Как часть этого виджета, настраиваемые атрибуты экспортируются в R.styleable:

Проект библиотеки (package = com.example.mylib):

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

Проект приложения (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 завершается с ошибкой:

Не найден идентификатор ресурса для атрибута 'someAttr' в пакете 'com.example.mylib'

Как я уже сказал, я могу это исправить, изменив имя пакета приложения на «com.example.mylib», но, конечно, это не то, что я хочу! Я что-то упустил?

Ответы [ 2 ]

1 голос
/ 24 июля 2011

Это известная ошибка # 9656 . Я написал два сообщения об этой проблеме: здесь и здесь . Я объяснил, почему это происходит, и как исправить aapt, чтобы исправить эту проблему, если вам действительно нужно это исправить прямо сейчас.

А пока, если вы не хотите перестраивать aapt, вам нужно переместить все свои пользовательские атрибуты и макеты, которые используют эти пользовательские атрибуты, из библиотеки в приложение.

0 голосов
/ 26 сентября 2012

Для тех, кто все еще ищет ответ: начиная с ADT 17, вы должны использовать http://schemas.android.com/apk/res-auto в качестве пространства имен для пользовательских атрибутов в проектах библиотеки, работает как очарование:

xmnls:mylib="http://schemas.android.com/apk/res-auto"
...