| /* |
| * Copyright (C) 2008 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| /* |
| * Access .dex (Dalvik Executable Format) files. The code here assumes that |
| * the DEX file has been rewritten (byte-swapped, word-aligned) and that |
| * the contents can be directly accessed as a collection of C arrays. Please |
| * see docs/dalvik/dex-format.html for a detailed description. |
| * |
| * The structure and field names were chosen to match those in the DEX spec. |
| * |
| * It's generally assumed that the DEX file will be stored in shared memory, |
| * obviating the need to copy code and constant pool entries into newly |
| * allocated storage. Maintaining local pointers to items in the shared area |
| * is valid and encouraged. |
| * |
| * All memory-mapped structures are 32-bit aligned unless otherwise noted. |
| */ |
| #ifndef LIBDEX_CMDUTILS_H_ |
| #define LIBDEX_CMDUTILS_H_ |
| |
| /* encode the result of unzipping to a file */ |
| enum UnzipToFileResult { |
| kUTFRSuccess = 0, |
| kUTFRGenericFailure, |
| kUTFRBadArgs, |
| kUTFRNotZip, |
| kUTFRNoClassesDex, |
| kUTFROutputFileProblem, |
| kUTFRBadZip, |
| }; |
| |
| /* |
| * Map the specified DEX file read-only (possibly after expanding it into a |
| * temp file from a Jar). Pass in a MemMapping struct to hold the info. |
| * If the file is an unoptimized DEX file, then byte-swapping and structural |
| * verification are performed on it before the memory is made read-only. |
| * |
| * The temp file is deleted after the map succeeds. |
| * |
| * This is intended for use by tools (e.g. dexdump) that need to get a |
| * read-only copy of a DEX file that could be in a number of different states. |
| * |
| * If "tempFileName" is NULL, a default value is used. The temp file is |
| * deleted after the map succeeds. |
| * |
| * If "quiet" is set, don't report common errors. |
| * |
| * Returns 0 (kUTFRSuccess) on success. |
| */ |
| UnzipToFileResult dexOpenAndMap(const char* fileName, const char* tempFileName, |
| MemMapping* pMap, bool quiet); |
| |
| /* |
| * Utility function to open a Zip archive, find "classes.dex", and extract |
| * it to a file. |
| */ |
| UnzipToFileResult dexUnzipToFile(const char* zipFileName, |
| const char* outFileName, bool quiet); |
| |
| #endif // LIBDEX_CMDUTILS_H_ |