Экспорт ресурсов проекта библиотеки Android под другим именем пакета?

StackOverflow https://stackoverflow.com/questions/6806694

  •  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"
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top