16f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski/* 26f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * Copyright (C) 2015 The Android Open Source Project 36f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * 46f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * Licensed under the Apache License, Version 2.0 (the "License"); 56f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * you may not use this file except in compliance with the License. 66f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * You may obtain a copy of the License at 76f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * 86f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * http://www.apache.org/licenses/LICENSE-2.0 96f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * 106f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * Unless required by applicable law or agreed to in writing, software 116f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * distributed under the License is distributed on an "AS IS" BASIS, 126f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 136f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * See the License for the specific language governing permissions and 146f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * limitations under the License. 156f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski */ 166f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 176f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski#ifndef AAPT_RESOURCE_TYPE_EXTENSIONS_H 186f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski#define AAPT_RESOURCE_TYPE_EXTENSIONS_H 196f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 206f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski#include <androidfw/ResourceTypes.h> 216f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 226f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinskinamespace aapt { 236f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 246f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski/** 256f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * New android::ResChunk_header types defined 266f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * for AAPT to use. 276f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * 286f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * TODO(adamlesinski): Consider reserving these 296f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * enums in androidfw/ResourceTypes.h to avoid 306f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * future collisions. 316f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski */ 326f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinskienum { 336ff19664f9279023c96e5a65c3059e1ef4beac0fAdam Lesinski RES_TABLE_PUBLIC_TYPE = 0x000d, 346ff19664f9279023c96e5a65c3059e1ef4beac0fAdam Lesinski 356f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski /** 366f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * A chunk that holds the string pool 376f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * for source entries (path/to/source:line). 386f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski */ 396f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski RES_TABLE_SOURCE_POOL_TYPE = 0x000e, 406f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 416f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski /** 426f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * A chunk holding names of externally 436f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * defined symbols and offsets to where 446f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * they are referenced in the table. 456f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski */ 466f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski RES_TABLE_SYMBOL_TABLE_TYPE = 0x000f, 476f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski}; 486f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 496f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski/** 506f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * New resource types that are meant to only be used 516f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * by AAPT and will not end up on the device. 526f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski */ 536f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinskistruct ExtendedTypes { 546f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski enum { 556f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski /** 566f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * A raw string value that hasn't had its escape sequences 576f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * processed nor whitespace removed. 586f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski */ 596f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski TYPE_RAW_STRING = 0xfe 606f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski }; 616f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski}; 626f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 636ff19664f9279023c96e5a65c3059e1ef4beac0fAdam Lesinskistruct Public_header { 646ff19664f9279023c96e5a65c3059e1ef4beac0fAdam Lesinski android::ResChunk_header header; 656ff19664f9279023c96e5a65c3059e1ef4beac0fAdam Lesinski 666ff19664f9279023c96e5a65c3059e1ef4beac0fAdam Lesinski /** 676ff19664f9279023c96e5a65c3059e1ef4beac0fAdam Lesinski * The ID of the type this structure refers to. 686ff19664f9279023c96e5a65c3059e1ef4beac0fAdam Lesinski */ 696ff19664f9279023c96e5a65c3059e1ef4beac0fAdam Lesinski uint8_t typeId; 706ff19664f9279023c96e5a65c3059e1ef4beac0fAdam Lesinski 716ff19664f9279023c96e5a65c3059e1ef4beac0fAdam Lesinski /** 726ff19664f9279023c96e5a65c3059e1ef4beac0fAdam Lesinski * Reserved. Must be 0. 736ff19664f9279023c96e5a65c3059e1ef4beac0fAdam Lesinski */ 746ff19664f9279023c96e5a65c3059e1ef4beac0fAdam Lesinski uint8_t res0; 756ff19664f9279023c96e5a65c3059e1ef4beac0fAdam Lesinski 766ff19664f9279023c96e5a65c3059e1ef4beac0fAdam Lesinski /** 776ff19664f9279023c96e5a65c3059e1ef4beac0fAdam Lesinski * Reserved. Must be 0. 786ff19664f9279023c96e5a65c3059e1ef4beac0fAdam Lesinski */ 796ff19664f9279023c96e5a65c3059e1ef4beac0fAdam Lesinski uint16_t res1; 806ff19664f9279023c96e5a65c3059e1ef4beac0fAdam Lesinski 816ff19664f9279023c96e5a65c3059e1ef4beac0fAdam Lesinski /** 826ff19664f9279023c96e5a65c3059e1ef4beac0fAdam Lesinski * Number of public entries. 836ff19664f9279023c96e5a65c3059e1ef4beac0fAdam Lesinski */ 846ff19664f9279023c96e5a65c3059e1ef4beac0fAdam Lesinski uint32_t count; 856ff19664f9279023c96e5a65c3059e1ef4beac0fAdam Lesinski}; 866ff19664f9279023c96e5a65c3059e1ef4beac0fAdam Lesinski 876ff19664f9279023c96e5a65c3059e1ef4beac0fAdam Lesinskistruct Public_entry { 886ff19664f9279023c96e5a65c3059e1ef4beac0fAdam Lesinski uint16_t entryId; 896ff19664f9279023c96e5a65c3059e1ef4beac0fAdam Lesinski uint16_t res0; 906ff19664f9279023c96e5a65c3059e1ef4beac0fAdam Lesinski android::ResStringPool_ref key; 916ff19664f9279023c96e5a65c3059e1ef4beac0fAdam Lesinski android::ResStringPool_ref source; 926ff19664f9279023c96e5a65c3059e1ef4beac0fAdam Lesinski uint32_t sourceLine; 936ff19664f9279023c96e5a65c3059e1ef4beac0fAdam Lesinski}; 946ff19664f9279023c96e5a65c3059e1ef4beac0fAdam Lesinski 956f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski/** 966f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * A chunk with type RES_TABLE_SYMBOL_TABLE_TYPE. 976f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * Following the header are count number of SymbolTable_entry 986f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * structures, followed by an android::ResStringPool_header. 996f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski */ 1006f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinskistruct SymbolTable_header { 1016f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski android::ResChunk_header header; 1026f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 1036f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski /** 1046f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * Number of SymbolTable_entry structures following 1056f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * this header. 1066f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski */ 1076f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski uint32_t count; 1086f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski}; 1096f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 1106f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinskistruct SymbolTable_entry { 1116f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski /** 1126f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * Offset from the beginning of the resource table 1136f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * where the symbol entry is referenced. 1146f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski */ 1156f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski uint32_t offset; 1166f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 1176f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski /** 1186f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * The index into the string pool where the name of this 1196f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * symbol exists. 1206f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski */ 1216f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski uint32_t stringIndex; 1226f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski}; 1236f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 1246f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski/** 1256f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * A structure representing the source of a resourc entry. 1266f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * Appears after an android::ResTable_entry or android::ResTable_map_entry. 1276f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * 1286f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * TODO(adamlesinski): This causes some issues when runtime code checks 1296f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * the size of an android::ResTable_entry. It assumes it is an 1306f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * android::ResTable_map_entry if the size is bigger than an android::ResTable_entry 1316f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * which may not be true if this structure is present. 1326f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski */ 1336f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinskistruct ResTable_entry_source { 1346f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski /** 1356f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * Index into the source string pool. 1366f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski */ 1376f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski uint32_t pathIndex; 1386f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 1396f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski /** 1406f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * Line number this resource was defined on. 1416f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski */ 1426f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski uint32_t line; 1436f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski}; 1446f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 1456f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski} // namespace aapt 1466f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 1476f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski#endif // AAPT_RESOURCE_TYPE_EXTENSIONS_H 148