У меня также была ошибка «невозможно найти переменную символа ...» для элемента R.id, определенного в проекте библиотеки. Примечательно, что только символы R.id не могли быть разрешены в основном проекте, хотя другие поля R (например, R.layout) были отчетливо видны.
К счастью, я смог наткнуться на решение. Оказалось, что в моем случае в моем основном проекте был определен ресурс (файл макета), имя которого было точно таким же, как и в проекте библиотеки.
Вот как это выглядело в файловой системе:
top_level_project
main_android_proj
src
main
res
layout
activity_main.xml
android_library_subproject
src
main
res
layout
activity_main.xml
Activity_main.xml моего подпроекта имел следующий идентификатор:
<RelativeLayout....>
<TextView android:id="@+id/special_text" ... />
</RelativeLayout>
И вот как я пытаюсь ссылаться на идентификатор в коде Java моего основного проекта:
MainActivity.java:
public void onCreate() {
setContentView(R.layout.activity_main);
TextView tv = (TextView) findViewById(R.id.special_text);
tv.setText("Hello Android");
}
Чтобы исправить эту проблему, я переименовал поврежденный файл в моем главном проекте на что-то другое.
Кажется, в ваших ресурсах не может быть повторяющихся имен макетов.
Действительно, sdk docs указывают на то, что при использовании библиотечных проектов следует соблюдать осторожность при конфликтах имен ресурсов:
Поскольку инструменты объединяют ресурсы библиотеки
проект с таковыми из проекта зависимого приложения, данного
Идентификатор ресурса может быть определен в обоих проектах. В этом случае инструменты
выберите ресурс из приложения или библиотеки с самым высоким
приоритет и отказаться от другого ресурса. По мере развития вашего
приложения, помните, что общие идентификаторы ресурсов могут быть
определены в более чем одном проекте и будут объединены с ресурсом
из приложения или библиотеки с наивысшим приоритетом, имеющей приоритет.