Сбой компиляции ресурсов в стиле Android (aapt): неверная таблица ресурсов: размер заголовка 0xc - PullRequest
14 голосов
/ 15 мая 2011

Я просто провел несколько часов с ужасной проблемой предварительной компиляции 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 .. перфокарты нового тысячелетия!

Ответы [ 2 ]

7 голосов
/ 20 января 2012

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

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

 W/ResourceType( 2247): Bad resource table: header size 0xc or total size 0x4aba is not on an integer boundary
1 голос
/ 02 ноября 2011

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

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

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

...

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

...