Стиль Android-ресурсов Компилирует (aapt): неудачная таблица ресурсов: размер заголовка 0xc

Я просто провел несколько часов с ужасной задачей для Android-компиляции, связанной со стилями, и задавался вопросом, может ли кто-нибудь объяснить, что вызвало это. Я исправил его, но не знаю, в чем проблема. Не помогло Android сказать, что ошибка была в colors.xml, а не в другом xml.

Шаг 1 – для воссоздания ошибки

Given a style <style name="ActionBarTitleContainer"> <item name="android:id">@id/title_container</item> <item name="android:layout_width">fill_parent</item> <item name="android:layout_height">@dimen/title_height</item> <item name="android:orientation">horizontal</item> <item name="android:background">@color/title_color_light</item> </style> 

Я скопировал его, дал ему новый, android: id

  <item name="android:id">@id/info_container</item> <style name="ActionBarTitleContainer"> <item name="android:id">@id/title_container</item> <item name="android:layout_width">fill_parent</item> <item name="android:layout_height">@dimen/title_height</item> <item name="android:orientation">horizontal</item> <item name="android:background">@color/title_color_light</item> </style> <style name="ActionBarInfoContainer"> <item name="android:id">@id/info_container</item> <item name="android:layout_width">fill_parent</item> <item name="android:layout_height">@dimen/info_height1</item> <item name="android:orientation">horizontal</item> <item name="android:background">@color/title_color_light</item> </style> 

Сохранено и компилировано указанная ошибка в идентификаторе

 <style name="ActionBarInfoContainer"> <item name="android:id">@id/info_container</item> Description Resource Path Location Type error: Error: No resource found that matches the given name (at 'android:id' with value '@id/info_container'). styles.xml /MyApp/res/values line 68 Android AAPT Problem 

Поэтому я ошибочно добавил a + перед идентификатором

 <style name="ActionBarInfoContainer"> <item name="android:id">@+id/info_container</item> 

Затем появилась ошибка

 W/ResourceType( 2202): Bad resource table: header size 0xc or total size 0x4aba is not on an integer boundary W/ResourceType( 2202): Bad resource table: header size 0xc or total size 0x4aba is not on an integer boundary ERROR: Unable to parse generated resources, aborting. 'aapt' error. Pre Compiler Build aborted. 

К сожалению, я добавил много стиля и т. Д., А не только этот, так что потратил отслеживание времени, чтобы найти ошибку. Не помогло Android сказать, что ошибка происходит в цветах.xml, когда он не был.

Исправлено

Удаление + из styles.xml

Размещение нового идентификатора в файле ids.xml

  <style name="ActionBarTitleContainer"> <item name="android:id">@id/title_container</item> .... </style> <style name="ActionBarInfoContainer"> <item name="android:id">@id/info_container</item> .... </style> 

Изменен @ + id / info_container на @ id / info_container

И добавление id в ids.xml

 <resources> <item type="id" name="title_container" /> <item type="id" name="info_container" /> 

Любая идея, что означает ошибка, потому что мне потребовалось несколько часов боли, чтобы отследить ее.

Не удалось компилятору Android aapt сказать, что ошибка была вызвана вокруг colors.xml.

Является ли эта ошибка результатом компиляции с 2.1U1?

У меня есть последняя версия SDK, но в каждой папке есть файл, но дата против него – APR 2011.


И для будущей справки, когда я нашел очень мало информации о компиляции ресурсов aapt. Вот несколько советов для людей с ошибками компиляции ресурсов, поэтому вы не теряете часы на плохой отчетности об ошибках Google:

СОВЕТ 1 – ВКЛЮЧИТЕ ВЕРБИСУ ИСТОРИЧЕСКОЕ СОЕДИНЕНИЕ

 Open Eclipse Preferences Open in the list on the left Android Build Set Build output to Verbose Hit OK Open Console View Window > View > Console Do clean build or type a space in and file and hit save if you dont want to do full build Resources compiler aapt will run first and throw error 

Два вопроса

Проблема 1 – ошибка красного цвета может появиться на выходе в запутанном месте

Вероятно, вызвано тем, что Exception выбрасывает поток, но другие файлы все еще компилируются в порядке до полного завершения процесса сборки.

Обратите внимание, как возникает ошибка после ближайшего_bus_stops_layout.xml.

 [2011-05-15 16:22:25 - MyApp] (new resource id filechooser_file_view from /Users/user1/Documents/workspace/MyApp/res/layout/filechooser_file_view.xml) [2011-05-15 16:22:25 - MyApp] (new resource id listbusmapsactivity_layout from /Users/user1/Documents/workspace/MyApp/res/layout/listbusmapsactivity_layout.xml) [2011-05-15 16:22:25 - MyApp] (new resource id nearest_bus_maps_layout from /Users/user1/Documents/workspace/MyApp/res/layout/nearest_bus_maps_layout.xml) [2011-05-15 16:22:25 - MyApp] (new resource id nearest_bus_stops_layout from /Users/user1/Documents/workspace/MyApp/res/layout/nearest_bus_stops_layout.xml) [2011-05-15 16:22:25 - MyApp] W/ResourceType( 2247): Bad resource table: header size 0xc or total size 0x4aba is not on an integer boundary [2011-05-15 16:22:25 - MyApp] W/ResourceType( 2247): Bad resource table: header size 0xc or total size 0x4aba is not on an integer boundary [2011-05-15 16:22:25 - MyApp] ERROR: Unable to parse generated resources, aborting. [2011-05-15 16:22:25 - MyApp] (new resource id open_web_page_activity from /Users/user1/Documents/workspace/MyApp/res/layout/open_web_page_activity.xml) [2011-05-15 16:22:25 - MyApp] (new resource id send_email_activity from /Users/user1/Documents/workspace/MyApp/res/layout/send_email_activity.xml) [2011-05-15 16:22:25 - MyApp] 'aapt' error. Pre Compiler Build aborted. 

ЭТО НЕ ФАЙЛ, ГДЕ ОШИБКА.

СОВЕТ: Как узнать, какой файл в точности вызывает проблему

Найдите последний файл, упомянутый перед сообщением об ошибке:

 'aapt' error. Pre Compiler Build aborted. 

Это

 /send_email_activity.xml 

ПРОБЛЕМА: send_email_activity.xml не является файлом с ошибкой.

Send_email_activity.xml скомпилирован ok и был выведен.

ЕГО ОДИН ПОСЛЕ /send_email_activity.xml, который мы хотим

Проблема: имя файла, в котором ошибка отсутствует.

Как найти файл AFTER /send_email_activity.xml, который вызвал ошибку

Прокрутите UP до конца на

 Files: 

Компилятор aapt перечисляет все найденные файлы и собирается скомпилировать.

К счастью, порядок в файлах: тот же, что и при ошибке ниже

Найдите последний файл для компиляции (send_email_activity.xml) в разделе Files:

 TIP In the Console window find the last file that compiled ok before the error 'send_email_activity.xml' And do CTRL/CMD(Mac) + F for previous occurrences under the Files: section 

Мы можем видеть здесь, что за /send_email_activity.xml следует color.xml

 Files: drawable/alphabet_bar_bg.xml Src: /Users/clearbrian/Documents/workspace/LondonBusStopMaps/res/drawable/alphabet_bar_bg.xml drawable/alphabet_separator_bg.xml Src: /Users/clearbrian/Documents/workspace/LondonBusStopMaps/res/drawable/alphabet_separator_bg.xml ....... layout/send_email_activity.xml Src: /Users/clearbrian/Documents/workspace/LondonBusStopMaps/res/layout/send_email_activity.xml values/colors.xml Src: /Users/clearbrian/Documents/workspace/LondonBusStopMaps/res/values/colors.xml ....... values/themes.xml Src: /Users/clearbrian/Documents/workspace/LondonBusStopMaps/res/values/themes.xml AndroidManifest.xml Src: /Users/clearbrian/Documents/workspace/LondonBusStopMaps/AndroidManifest.xml 

ANSWER: colors.xml – ФАЙЛ, КОТОРЫЙ ВЫЗЫВАЕТ ошибку 'aapt'. Предварительная сборка компилятора прервана.

А также ошибка:

 [2011-05-15 16:22:25 - MyApp] W/ResourceType( 2247): Bad resource table: header size 0xc or total size 0x4aba is not on an integer boundary [2011-05-15 16:22:25 - MyApp] W/ResourceType( 2247): Bad resource table: header size 0xc or total size 0x4aba is not on an integer boundary [2011-05-15 16:22:25 - MyApp] ERROR: Unable to parse generated resources, aborting. 

Проблема 2: ошибка ISNT в colors.xml.

Я изменил значение цвета в colors.xml

Но это было указано в styles.xml

styles.xml

  <style name="ActionBarInfoContainer"> <item name="android:id">@id/info_container</item> ... <item name="android:background">@color/title_color_light</item> </style> 

Поэтому в процессе компиляции он, вероятно, пытался скомпилировать styles.xml, а затем увидел @color, а затем скомпилировал colors.xml. Или наоборот (спросите Google). Таким образом, она сообщила об ошибке как о том, что она была в colors.xml, когда в fast это были styles.xml / ids.xml

И возможная ошибка была замечена только тогда, когда я увидел разницу в id между

 <style name="ActionBarTitleContainer"> <item name="android:id">@id/title_container</item> ... </style> <style name="ActionBarInfoContainer"> <item name="android:id">@+id/info_container</item> ... </style> 

Линия

  <item name="android:id">@+id/info_container</item> 

Должно быть (нет +)

  <item name="android:id">@id/info_container</item> 

И идентификатор должен быть в файле ids.xml

 <resources> <item type="id" name="title_container" /> <item type="id" name="info_container" /> 

XML .. пуансоны нового тысячелетия!

Я столкнулся с этой проблемой при импорте проекта библиотеки (GreenDroid), и он оказался для меня проблемой @ + id.

Похоже, что до тех пор, пока у вас нет файла ids.xml, SDK для Android позволит вам объявлять новые идентификаторы в styles.xml , но в тот момент, когда этот файл существует, он перестает допускать такое поведение. К сожалению, это не говорит вам, что это проблема, и просто сбой с ошибкой, отмеченной в исходном сообщении:

  W / ResourceType (2247): таблица плохих ресурсов: размер заголовка 0xc или общий размер 0x4aba не находится на целочисленной границе

На этой странице вы найдете документацию по значению + . Макеты XML-документов страниц, но то же самое относится к стилям (да, они должны помещать эту информацию в лучшее место).

Для вашего удобства, вот соответствующая документация:

Для значения ID обычно следует использовать эту синтаксическую форму: «@ + id / name». Символ плюса + указывает, что это новый идентификатор ресурса, и инструмент aapt создаст новое целочисленное значение ресурса в классе R.java, если оно еще не существует.

Однако, если вы уже определили ресурс идентификатора (и он еще не используется), вы можете применить этот идентификатор к элементу View, исключив символ плюса в значение android: id.