У меня есть проект библиотеки Android (A), который используется несколькими проектами приложений для Android. Библиотека jar, размещенная внутри папки libs
проекта библиотеки, ссылается на com.lib.R
файлы ресурсов (например, изображения) внутри этого проекта.Обратитесь к ресурсам android из библиотеки jar
Когда прикладной проект (B) использует эту библиотеку, он может вызывать некоторый код, который запускает файл jar в папке libs, чтобы ссылаться на ресурсы, на которые ссылаются com.lib.R
. К сожалению, любая попытка доступа к этим ресурсам приводит к следующей ошибке.
java.lang.NoClassDefFoundError: com.lib.R$layout
Если доступ к этим ресурсам из src/
папки Lib A
или src/
папку Project B
, они правильно разрешаться в int
значения и может быть использован, но я бы предпочел не делать этого и сохранить код внутри папки libs
.
Мой вопрос - Почему это происходит и как его решить? Одна работа заключается в том, чтобы получить идентификатор ресурса программным путем, используя resource.getIdentifier()
, но это может стать очень быстрым. Есть ли способ, которым я все еще могу использовать com.lib.R
из библиотеки jar под libs
без необходимости ее решения вручную с помощью вспомогательных методов?
Вот иллюстрация, которая поможет вам. Доступ
ресурсов из библиотеки
«Библиотека, размещенная внутри папки libs проекта библиотеки, ссылается на com.lib.R ресурсов (скажем, изображений) внутри этого проекта », которые никогда не должны компилироваться, поскольку по определению этот JAR не является« com.lib »и не имел доступа к' com.lib.R', когда он был скомпилирован. не знаю, как вы получили этот JAR, и я понятия не имею, почему вы ожидаете, что вы делаете, чтобы быть надежным. – CommonsWare
@CommonsWare Хороший улов. Я получил банку, сначала определяя ресурсы, а затем ссылаясь на них из другого проекта. Затем java-файлы были скомпилированы и помещены в папку 'libs' библиотеки как банку. Причина этого заключалась в том, чтобы не подвергать java-файлы конечным пользователям. Я открыт для ваших соображений о том, почему это ненадежно и как я могу улучшить его. –