2014-12-15 5 views
1

Я создал проект библиотеки, выполнив следующие действия:R.String хватает для Android Studio Library Project

  1. Создать нормальный проект Android без деятельности
  2. Изменение apply plugin: 'com.android.application' к apply plugin: 'com.android.library' из build.gradle
  3. Удалить строку applicationId "..." от build.gradle

Затем я включил проект библиотеки в моем приложении:

  1. Обновленный мой settings.gradle к include ':app', '..:NotifierLib:library'
  2. Добавлен модуль библиотеки в File -> Project Structure ... -> app -> Dependencies -> Add -> Module dependency

Все отлично работает, я могу построить приложение и запустить его на моем устройстве, но он сработает, когда компонент, указанный в библиотеке, пытается получить доступ к ресурсу библиотеки. В моем случае я реализовал BroadcastReceiver и PreferenceItem. Если BroadcastReceiver называется, он обновляет элемент и поэтому обращается к некоторым строковые ресурсы:

String key = context.getResources().getString(R.string.myKey); 

Однако, когда BroadcastReceiver вызывается, приложение вылетает со следующей ошибкой:

java.lang.NoClassDefFoundError: goe.math.uni.notifierlib.R$string 

Как вы видите, приложение пытается получить доступ к R.string в библиотеке, что не удается, хотя ресурсы существуют в библиотеке. Что я делаю не так?

+0

Вы используете minifyEnabled true для сборки? –

+0

Нет Я использую minifyEnabled false. – Phidelux

+0

Вы сделали пошаговую отладку и перерыв там, где она должна читать строку? И, не видя больше кода, будет сложно определить проблему. –

ответ

2

Итак, ответьте тогда. Ресурсы вызывают конфликт. Существует не один способ избежать конфликтов. Но когда я делал проекты, где у меня есть библиотека, которую я создал, лучший способ избежать конфликтов - создать мою библиотеку с самого начала. Попытка вытащить материал для создания библиотеки из существующего кода может быть неприятной.

+0

Спасибо. Если нет возможности обрабатывать конфликты, есть ли возможность переопределить ресурсы библиотеки, если они присутствуют в модуле приложения? – Phidelux

+1

Предполагается, что Android Studio автоматически переопределит ресурсы библиотеки, если они являются локальными в главном приложении. Кажется, что это не работает каждый раз. –

Смежные вопросы