Экспорт ресурсов проекта библиотеки Android под другим именем пакета?
-
25-10-2019 - |
Вопрос
Я не уверен, столкнулся ли я с ошибкой в инструментах 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 завершается сбоем со следующей ошибкой:
Не найден идентификатор ресурса для атрибута someAttr в пакете com.example.mylib.
Как я уже сказал, я могу это исправить, изменив имя пакета приложения на «com.example.mylib», но, конечно, это не то, что я хочу!Я что-то пропустил?
Решение
Это известная ошибка #9656.Я написал два поста по этой проблеме: здесь и здесь.Я объяснил, почему это происходит и как исправить эту проблему, если вам действительно нужно это исправить прямо сейчас.
На данный момент, если вы не хотите пересобирать aapt, вам необходимо переместить все пользовательские атрибуты и макеты, которые используют эти пользовательские атрибуты, из библиотеки в приложение.
Другие советы
Для тех, кто, возможно, все еще ищет ответ:начиная с ADT 17 вам нужно использовать http://schemas.android.com/apk/res-auto в качестве пространства имен для пользовательских атрибутов в библиотечных проектах работает как прелесть:
xmnls:mylib="http://schemas.android.com/apk/res-auto"