Комбинация файлов в стиле 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>
Сохранено и скомпилировать указанную ошибку в id
<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 + перед id
<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>
Изменено @+ Идентификатор /info _container
в @Идентификатор/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 - ВКЛЮЧЕНИЕ ВЕРБИСА ANDROID BUILD OUTPUT
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 следует colors.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
ОТВЕТ: 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 в цветах .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.. пуансоны нового тысячелетия!
Ответы
Ответ 1
Я столкнулся с этой проблемой при импорте проекта библиотеки (GreenDroid), и он оказался для меня проблемой @+ id.
Что, кажется, происходит, так как до тех пор, пока у вас нет файла ids.xml, SDK для Android позволит вам объявлять новые идентификаторы в styles.xml, но в тот момент, когда этот файл существует, он перестает допускать такое поведение. К сожалению, это не говорит вам о том, что это проблема, и просто падает с ошибкой, отмеченной в исходном сообщении:
W/ResourceType( 2247): Bad resource table: header size 0xc or total size 0x4aba is not on an integer boundary
Ответ 2
В на этой странице вы найдете документацию по значению +
. Макеты XML-документов страниц, но то же самое относится к стилям (да, они должны помещать эту информацию в более выгодное место).
Для вашего удобства здесь соответствующая документация:
Для значения идентификатора вы обычно должны использовать эту синтаксическую форму: "@+ id/name". Символ плюса + указывает, что это новый идентификатор ресурса, а инструмент aapt создаст новое целочисленное значение ресурса в классе R.java, если оно еще не существует.
...
Однако, если вы уже определили ресурс ID (и он еще не используется), вы можете применить этот идентификатор к элементу View, исключив символ плюса в значение android: id.