У меня настроен проект Library
и проект, который зависит от этого проекта библиотеки. Все компилируется нормально, и у меня, однако, проект Dependent
работает нормально;
Однако у меня периодически возникают проблемы при использовании Activity из проекта Library
.
Мой проект Library
может быть "снят с проверки" как библиотечный проект, а действие "сборщик" может выполняться изолированно. Запуск проекта Library
сам по себе работает без проблем.
Когда я использую проект Library
(и действие «сборщик») из зависимого проекта, он выдает мне ошибки NullPointerExceptions
(или исторически DexOp), говорящие о том, что действие «сборщик» не может найти свои ресурсы.
Кто-нибудь может сказать мне, испытывали ли они это раньше?
ИЗМЕНИТЬ
При ручном копировании layout.xml
, используемого проектной активностью Library
, в зависимый проект проект правильно открывает действие "сборщик". Это обязательно?! Конечно нет? Это еще больше заставляет меня задаться вопросом, есть ли проблема со слиянием/ссылкой на целочисленные идентификаторы из R.java
в проекте Library
.
ИЗМЕНИТЬ
Я не уверен, имеет ли это какие-либо последствия, но один из моих Library
проектов представляет собой оболочку для набора пользовательских представлений, используемых в различных проектах внешнего интерфейса.
Каждое из этих настраиваемых представлений имеет действие, поэтому их можно тестировать изолированно.
Одно из этих представлений имеет настраиваемые атрибуты, которые при изолированной работе работают очень хорошо. Однако не похоже, что зависимый проект правильно извлекает атрибуты и сохраняет их в исходном пространстве имен, в результате чего импортированный макет вызывает ошибки компиляции:
[2012-05-16 12:07:28 - Project] D:\opt\workspace\CustomGlowList\res\layout\main.xml:14: error: No resource identifier found for attribute 'listId' in package 'com.company.library.glowlist'
[2012-05-16 12:07:28 - Project] D:\opt\workspace\CustomGlowList\res\layout\main.xml:14: error: No resource identifier found for attribute 'type' in package 'com.company.library.glowlist
ИЗМЕНИТЬ
Ошибки DexOp были устранены путем удаления повторяющегося имени файла, которое присутствовало в проекте Dependent
. Не уверен, что проблема была в имени файла или в содержании файла.
ИЗМЕНИТЬ
Мне пока не удалось найти решение этой проблемы (хотя ответ @yorkw, безусловно, помогает с атрибутами xml! Спасибо).
Однако мне удалось сделать эту проблему прерывистой:
Я просмотрел каждый из проектов библиотек и убедился, что все они имеют собственное пространство имен (например, com.company.library.component1
, com.company.library.component2
и т. д.). После пары чисток (каждый проект заказан с правильным приоритетом) эта проблема решается сама собой, однако в конечном итоге возвращается при переключении между библиотекой/не библиотекой для тестирования компонентов.
NullPointerException
, вызванная доступом к представлению, которое не было найдено, поскольку указанный ресурс макета не был найден (вfindViewById(R.id.whatever)
). Поскольку на данный момент проблема не очевидна, я не могу дать вам копипасту, но я добавлю их в следующий раз, когда она возникнет. - person Graeme   schedule 22.05.2012import com.example.libb.R;
в каком-то классе в libA, это не работает. В качестве хорошей практики не рекомендуется явно использоватьimport com.example.libb.R
в вашем коде, так как в этом нет необходимости, и все ресурсы всегда включаются в собственный файл R основного проекта при очистке/сборке основного проекта. - person yorkw   schedule 24.05.2012