2012-01-19 3 views
4

В моем приложении для Android я создал 2 проекта. Основной проект и библиотека одна, так как она будет использоваться и в будущих проектах. Поскольку я хотел бы ссылаться на некоторые представления в коде, я попытался создать файл типа ресурса, чтобы объявить некоторые уникальные идентификаторы, как указано здесь http://developer.android.com/guide/topics/resources/more-resources.html#Id.Невозможно добавить файл типа ресурса id в проект библиотеки андроида

Проблема заключается в том, что когда я добавляю этот файл в res/values ​​(называемый ids.xml), R-файл больше не генерируется. Когда я удаляю его, все работает нормально.

Я знаю, что я могу добавить файл типа ресурса id в проекте android. Есть ли ограничение сделать то же самое в проекте библиотеки?

Спасибо, Билл

+0

Скопируйте файл ids.xml, вырежьте все, кроме одного идентификатора, если это не скомпилировать, вставьте файл здесь, чтобы мы могли его увидеть. –

+0

Имя файла - ids.xml и помещается под res/values. Когда я очищаю проект, R никогда не генерируется снова. – oceanfeeling

+0

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

ответ

5

Через 2 дня исследований я наконец нашел решение.

Сообщение [здесь] [1]

[1]: Android style Resources compile (aapt) failing : Bad resource table: header size 0xc помог мне.

Не имеет значения, является ли это проектом Android или библиотечным, но когда вы объявили новый идентификатор в одном из своих стилей, вы не можете добавить файл ids.xml для объявления уникальных идентификаторов.

В моем случае, я объявил стиль в моем Рез/значений/styles.xml

<style name="ActionBar"> 
     <item name="android:id">**@+id/actionbar_container**</item> 
     <item name="android:layout_width">fill_parent</item> 
     <item name="android:layout_height">@dimen/actionbar_height</item> 
     <item name="android:orientation">horizontal</item> 
     <item name="android:background">@drawable/actionbar_gradient</item> 
    </style> 

, а затем добавил Рез/значения/ids.xml где я объявленную некоторые уникальные идентификаторы. Например,

<resources> 
<item type="id" name="menu_refresh" /> 
</resources> 

После добавления этого файла R остановил генерацию. Project Clean не выполнял эту работу.

Когда я изменил объявление в styles.xml на @ id/actionbar_container, R снова начал генерировать. Разница в том, что я объявил id в моем файле ids.xml, в то время как я ссылаюсь в стиле выше, используя @id, а не @ + id.

Заключение: Если вы хотите объявить уникальные идентификаторы в файле ресурсов (например, ids.xml), проверьте, что вы не объявили новые идентификаторы (используя синтаксис @ + id) в своих стилях.

Надеюсь, что это поможет любому, у кого есть такая же проблема.

Счастливое кодирование !!!

+0

Вы не представляете, как трудно было даже устранить проблему до такой степени, что я смог найти эту проблему. – James

0

Только в случае, как это случилось со мной ... Я потратил минуты, пытаясь понять, почему мой «R.id.myid» не может быть найден в Java-файл после его создания в качестве элемента идентификатора ресурса:

<resources> 
<item type="id" name="myid" /> 
</resources> 

=> Проблема в том, что мой java-файл импортировал «android.R» вместо моего собственного «R» (сгенерированный файл ресурсов).

import android.R; 

Звучит глупо, но это может случиться.

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