Я просто провел несколько часов с ужасной проблемой предварительной компиляции 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
Так по ошибке я добавил + перед идентификатором
<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, говоря, что ошибка произошла в colors.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
И добавление идентификатора в 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 генерируется в потоке, но другие файлы по-прежнему компилируются нормально, прежде чем процесс сборки полностью останавливается.
Обратите внимание на то, как ошибка возникает после файла near_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 скомпилирован нормально и был выведен.
ЕГО ОДИН ПОСЛЕ /send_email_activity.xml, который мы хотим
Проблема: имя файла, из-за которого произошла ошибка.
Как найти файл ПОСЛЕ /send_email_activity.xml, вызвавший ошибку
Прокрутить UP на выходе консоли до
Files:
Компилятор aapt перечисляет все найденные файлы и собирается их скомпилировать.
К счастью, порядок в файлах: такой же, как и при появлении ошибки ниже
Найдите последний файл для компиляции (send_email_activity.xml) в разделе Файлы:
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 в 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, когда быстро это было 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 .. перфокарты нового тысячелетия!