Main.cpp revision ef05e076ced1a32c5c0aaee28403779834adb2ba
19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// Copyright 2006 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// Android Asset Packaging Tool main entry point. 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include "Main.h" 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include "Bundle.h" 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 93b4062eeb01be33951ba214e027da523cf09f8b1Mathias Agopian#include <utils/Log.h> 103b4062eeb01be33951ba214e027da523cf09f8b1Mathias Agopian#include <utils/threads.h> 113b4062eeb01be33951ba214e027da523cf09f8b1Mathias Agopian#include <utils/List.h> 123b4062eeb01be33951ba214e027da523cf09f8b1Mathias Agopian#include <utils/Errors.h> 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <stdlib.h> 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <getopt.h> 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <assert.h> 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectusing namespace android; 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic const char* gProgName = "aapt"; 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * When running under Cygwin on Windows, this will convert slash-based 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * paths into back-slash-based ones. Otherwise the ApptAssets file comparisons 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * fail later as they use back-slash separators under Windows. 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This operates in-place on the path string. 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid convertPath(char *path) { 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (path != NULL && OS_PATH_SEPARATOR != '/') { 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (; *path; path++) { 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (*path == '/') { 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *path = OS_PATH_SEPARATOR; 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Print usage info. 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid usage(void) 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project fprintf(stderr, "Android Asset Packaging Tool\n\n"); 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project fprintf(stderr, "Usage:\n"); 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project fprintf(stderr, 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project " %s l[ist] [-v] [-a] file.{zip,jar,apk}\n" 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project " List contents of Zip-compatible archive.\n\n", gProgName); 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project fprintf(stderr, 50e17086ba346009a26cc2299b133a0fe602acb6ecDianne Hackborn " %s d[ump] [--values] WHAT file.{apk} [asset [asset ...]]\n" 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project " badging Print the label and icon for the app declared in APK.\n" 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project " permissions Print the permissions from the APK.\n" 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project " resources Print the resource table from the APK.\n" 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project " configurations Print the configurations in the APK.\n" 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project " xmltree Print the compiled xmls in the given assets.\n" 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project " xmlstrings Print the strings of the given compiled xml assets.\n\n", gProgName); 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project fprintf(stderr, 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project " %s p[ackage] [-d][-f][-m][-u][-v][-x][-z][-M AndroidManifest.xml] \\\n" 5962da8461ed5317fe78ae5e3793662694e7fc99a3Dianne Hackborn " [-0 extension [-0 extension ...]] [-g tolerance] [-j jarfile] \\\n" 6062da8461ed5317fe78ae5e3793662694e7fc99a3Dianne Hackborn " [--min-sdk-version VAL] [--target-sdk-version VAL] \\\n" 61ef05e076ced1a32c5c0aaee28403779834adb2baDianne Hackborn " [--app-version VAL] [--app-version-name TEXT] [--custom-package VAL] \\\n" 62ef05e076ced1a32c5c0aaee28403779834adb2baDianne Hackborn " [--rename-manifest-package PACKAGE] \\\n" 63ef05e076ced1a32c5c0aaee28403779834adb2baDianne Hackborn " [--rename-instrumentation-target-package PACKAGE] \\\n" 64ef05e076ced1a32c5c0aaee28403779834adb2baDianne Hackborn " [--utf16] [--auto-add-overlay] \\\n" 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project " [-I base-package [-I base-package ...]] \\\n" 661553c82e084ac5763fb393857224145506771b99Joe Onorato " [-A asset-source-dir] [-G class-list-file] [-P public-definitions-file] \\\n" 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project " [-S resource-sources [-S resource-sources ...]] " 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project " [-F apk-file] [-J R-file-dir] \\\n" 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project " [raw-files-dir [raw-files-dir] ...]\n" 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "\n" 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project " Package the android resources. It will read assets and resources that are\n" 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project " supplied with the -M -A -S or raw-files-dir arguments. The -J -P -F and -R\n" 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project " options control which files are output.\n\n" 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project , gProgName); 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project fprintf(stderr, 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project " %s r[emove] [-v] file.{zip,jar,apk} file1 [file2 ...]\n" 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project " Delete specified files from Zip-compatible archive.\n\n", 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project gProgName); 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project fprintf(stderr, 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project " %s a[dd] [-v] file.{zip,jar,apk} file1 [file2 ...]\n" 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project " Add specified files to Zip-compatible archive.\n\n", gProgName); 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project fprintf(stderr, 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project " %s v[ersion]\n" 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project " Print program version.\n\n", gProgName); 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project fprintf(stderr, 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project " Modifiers:\n" 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project " -a print Android-specific data (resources, manifest) when listing\n" 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project " -c specify which configurations to include. The default is all\n" 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project " configurations. The value of the parameter should be a comma\n" 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project " separated list of configuration values. Locales should be specified\n" 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project " as either a language or language-region pair. Some examples:\n" 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project " en\n" 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project " port,en\n" 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project " port,land,en_US\n" 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project " If you put the special locale, zz_ZZ on the list, it will perform\n" 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project " pseudolocalization on the default locale, modifying all of the\n" 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project " strings so you can look for strings that missed the\n" 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project " internationalization process. For example:\n" 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project " port,land,zz_ZZ\n" 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project " -d one or more device assets to include, separated by commas\n" 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project " -f force overwrite of existing files\n" 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project " -g specify a pixel tolerance to force images to grayscale, default 0\n" 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project " -j specify a jar or zip file containing classes to include\n" 104dbe7a68cc13ae135b33769918932838d2d447169Doug Zongker " -k junk path of file(s) added\n" 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project " -m make package directories under location specified by -J\n" 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#if 0 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project " -p pseudolocalize the default configuration\n" 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#endif 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project " -u update existing packages (add new, replace older, remove deleted files)\n" 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project " -v verbose output\n" 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project " -x create extending (non-application) resource IDs\n" 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project " -z require localization of resource attributes marked with\n" 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project " localization=\"suggested\"\n" 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project " -A additional directory in which to find raw asset files\n" 1151553c82e084ac5763fb393857224145506771b99Joe Onorato " -G A file to output proguard options into.\n" 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project " -F specify the apk file to output\n" 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project " -I add an existing package to base include set\n" 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project " -J specify where to output R.java resource constant definitions\n" 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project " -M specify full path to AndroidManifest.xml to include in zip\n" 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project " -P specify where to output public resource definitions\n" 12163459ad555c10de1f316d6de01fc3cd0c0aaa457Xavier Ducrohet " -S directory in which to find resources. Multiple directories will be scanned\n" 12263459ad555c10de1f316d6de01fc3cd0c0aaa457Xavier Ducrohet " and the first match found (left to right) will take precedence.\n" 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project " -0 specifies an additional extension for which such files will not\n" 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project " be stored compressed in the .apk. An empty string means to not\n" 12562da8461ed5317fe78ae5e3793662694e7fc99a3Dianne Hackborn " compress any files at all.\n" 12662da8461ed5317fe78ae5e3793662694e7fc99a3Dianne Hackborn " --min-sdk-version\n" 127745e17a07c77aa6b347d9e75c99eb3fcb381bc5dKenny Root " inserts android:minSdkVersion in to manifest. If the version is 7 or\n" 128745e17a07c77aa6b347d9e75c99eb3fcb381bc5dKenny Root " higher, the default encoding for resources will be in UTF-8.\n" 12962da8461ed5317fe78ae5e3793662694e7fc99a3Dianne Hackborn " --target-sdk-version\n" 13062da8461ed5317fe78ae5e3793662694e7fc99a3Dianne Hackborn " inserts android:targetSdkVersion in to manifest.\n" 131e17086ba346009a26cc2299b133a0fe602acb6ecDianne Hackborn " --values\n" 132e17086ba346009a26cc2299b133a0fe602acb6ecDianne Hackborn " when used with \"dump resources\" also includes resource values.\n" 13362da8461ed5317fe78ae5e3793662694e7fc99a3Dianne Hackborn " --version-code\n" 13462da8461ed5317fe78ae5e3793662694e7fc99a3Dianne Hackborn " inserts android:versionCode in to manifest.\n" 13562da8461ed5317fe78ae5e3793662694e7fc99a3Dianne Hackborn " --version-name\n" 13663459ad555c10de1f316d6de01fc3cd0c0aaa457Xavier Ducrohet " inserts android:versionName in to manifest.\n" 13763459ad555c10de1f316d6de01fc3cd0c0aaa457Xavier Ducrohet " --custom-package\n" 138745e17a07c77aa6b347d9e75c99eb3fcb381bc5dKenny Root " generates R.java into a different package.\n" 13999080c7d9ad9e5ccfec70dd10e4c24468a960c45Xavier Ducrohet " --auto-add-overlay\n" 14099080c7d9ad9e5ccfec70dd10e4c24468a960c45Xavier Ducrohet " Automatically add resources that are only in overlays.\n" 141ef05e076ced1a32c5c0aaee28403779834adb2baDianne Hackborn " --rename-manifest-package\n" 142ef05e076ced1a32c5c0aaee28403779834adb2baDianne Hackborn " Rewrite the manifest so that its package name is the package name\n" 143ef05e076ced1a32c5c0aaee28403779834adb2baDianne Hackborn " given here. Relative class names (for example .Foo) will be\n" 144ef05e076ced1a32c5c0aaee28403779834adb2baDianne Hackborn " changed to absolute names with the old package so that the code\n" 145ef05e076ced1a32c5c0aaee28403779834adb2baDianne Hackborn " does not need to change.\n" 146ef05e076ced1a32c5c0aaee28403779834adb2baDianne Hackborn " --rename-instrumentation-target-package\n" 147ef05e076ced1a32c5c0aaee28403779834adb2baDianne Hackborn " Rewrite the manifest so that all of its instrumentation\n" 148ef05e076ced1a32c5c0aaee28403779834adb2baDianne Hackborn " components target the given package. Useful when used in\n" 149ef05e076ced1a32c5c0aaee28403779834adb2baDianne Hackborn " conjunction with --rename-manifest-package to fix tests against\n" 150ef05e076ced1a32c5c0aaee28403779834adb2baDianne Hackborn " a package that has been renamed.\n" 151745e17a07c77aa6b347d9e75c99eb3fcb381bc5dKenny Root " --utf16\n" 152745e17a07c77aa6b347d9e75c99eb3fcb381bc5dKenny Root " changes default encoding for resources to UTF-16. Only useful when API\n" 153745e17a07c77aa6b347d9e75c99eb3fcb381bc5dKenny Root " level is set to 7 or higher where the default encoding is UTF-8.\n"); 1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Dispatch the command. 1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectint handleCommand(Bundle* bundle) 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project //printf("--- command %d (verbose=%d force=%d):\n", 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // bundle->getCommand(), bundle->getVerbose(), bundle->getForce()); 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project //for (int i = 0; i < bundle->getFileSpecCount(); i++) 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // printf(" %d: '%s'\n", i, bundle->getFileSpecEntry(i)); 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project switch (bundle->getCommand()) { 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case kCommandVersion: return doVersion(bundle); 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case kCommandList: return doList(bundle); 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case kCommandDump: return doDump(bundle); 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case kCommandAdd: return doAdd(bundle); 1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case kCommandRemove: return doRemove(bundle); 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case kCommandPackage: return doPackage(bundle); 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project default: 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project fprintf(stderr, "%s: requested command not yet supported\n", gProgName); 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return 1; 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Parse args. 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectint main(int argc, char* const argv[]) 1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project char *prog = argv[0]; 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Bundle bundle; 1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool wantUsage = false; 1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int result = 1; // pessimistically assume an error. 1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int tolerance = 0; 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* default to compression */ 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bundle.setCompressionMethod(ZipEntry::kCompressDeflated); 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (argc < 2) { 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project wantUsage = true; 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project goto bail; 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (argv[1][0] == 'v') 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bundle.setCommand(kCommandVersion); 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project else if (argv[1][0] == 'd') 2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bundle.setCommand(kCommandDump); 2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project else if (argv[1][0] == 'l') 2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bundle.setCommand(kCommandList); 2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project else if (argv[1][0] == 'a') 2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bundle.setCommand(kCommandAdd); 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project else if (argv[1][0] == 'r') 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bundle.setCommand(kCommandRemove); 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project else if (argv[1][0] == 'p') 2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bundle.setCommand(kCommandPackage); 2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project else { 2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project fprintf(stderr, "ERROR: Unknown command '%s'\n", argv[1]); 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project wantUsage = true; 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project goto bail; 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project argc -= 2; 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project argv += 2; 2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* 2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Pull out flags. We support "-fv" and "-f -v". 2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project while (argc && argv[0][0] == '-') { 2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* flag(s) found */ 2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const char* cp = argv[0] +1; 2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project while (*cp != '\0') { 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project switch (*cp) { 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case 'v': 2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bundle.setVerbose(true); 2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case 'a': 2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bundle.setAndroidList(true); 2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case 'c': 2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project argc--; 2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project argv++; 2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!argc) { 2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project fprintf(stderr, "ERROR: No argument supplied for '-c' option\n"); 2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project wantUsage = true; 2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project goto bail; 2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bundle.addConfigurations(argv[0]); 2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case 'f': 2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bundle.setForce(true); 2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case 'g': 2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project argc--; 2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project argv++; 2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!argc) { 2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project fprintf(stderr, "ERROR: No argument supplied for '-g' option\n"); 2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project wantUsage = true; 2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project goto bail; 2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project tolerance = atoi(argv[0]); 2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bundle.setGrayscaleTolerance(tolerance); 2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project printf("%s: Images with deviation <= %d will be forced to grayscale.\n", prog, tolerance); 2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 258dbe7a68cc13ae135b33769918932838d2d447169Doug Zongker case 'k': 259dbe7a68cc13ae135b33769918932838d2d447169Doug Zongker bundle.setJunkPath(true); 260dbe7a68cc13ae135b33769918932838d2d447169Doug Zongker break; 2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case 'm': 2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bundle.setMakePackageDirs(true); 2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#if 0 2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case 'p': 2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bundle.setPseudolocalize(true); 2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#endif 2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case 'u': 2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bundle.setUpdate(true); 2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case 'x': 2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bundle.setExtending(true); 2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case 'z': 2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bundle.setRequireLocalization(true); 2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case 'j': 2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project argc--; 2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project argv++; 2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!argc) { 2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project fprintf(stderr, "ERROR: No argument supplied for '-j' option\n"); 2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project wantUsage = true; 2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project goto bail; 2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project convertPath(argv[0]); 2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bundle.addJarFile(argv[0]); 2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case 'A': 2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project argc--; 2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project argv++; 2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!argc) { 2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project fprintf(stderr, "ERROR: No argument supplied for '-A' option\n"); 2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project wantUsage = true; 2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project goto bail; 2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project convertPath(argv[0]); 2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bundle.setAssetSourceDir(argv[0]); 2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 3001553c82e084ac5763fb393857224145506771b99Joe Onorato case 'G': 3011553c82e084ac5763fb393857224145506771b99Joe Onorato argc--; 3021553c82e084ac5763fb393857224145506771b99Joe Onorato argv++; 3031553c82e084ac5763fb393857224145506771b99Joe Onorato if (!argc) { 3041553c82e084ac5763fb393857224145506771b99Joe Onorato fprintf(stderr, "ERROR: No argument supplied for '-G' option\n"); 3051553c82e084ac5763fb393857224145506771b99Joe Onorato wantUsage = true; 3061553c82e084ac5763fb393857224145506771b99Joe Onorato goto bail; 3071553c82e084ac5763fb393857224145506771b99Joe Onorato } 3081553c82e084ac5763fb393857224145506771b99Joe Onorato convertPath(argv[0]); 3091553c82e084ac5763fb393857224145506771b99Joe Onorato bundle.setProguardFile(argv[0]); 3101553c82e084ac5763fb393857224145506771b99Joe Onorato break; 3119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case 'I': 3129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project argc--; 3139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project argv++; 3149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!argc) { 3159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project fprintf(stderr, "ERROR: No argument supplied for '-I' option\n"); 3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project wantUsage = true; 3179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project goto bail; 3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project convertPath(argv[0]); 3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bundle.addPackageInclude(argv[0]); 3219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 3229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case 'F': 3239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project argc--; 3249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project argv++; 3259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!argc) { 3269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project fprintf(stderr, "ERROR: No argument supplied for '-F' option\n"); 3279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project wantUsage = true; 3289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project goto bail; 3299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project convertPath(argv[0]); 3319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bundle.setOutputAPKFile(argv[0]); 3329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 3339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case 'J': 3349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project argc--; 3359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project argv++; 3369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!argc) { 3379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project fprintf(stderr, "ERROR: No argument supplied for '-J' option\n"); 3389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project wantUsage = true; 3399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project goto bail; 3409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project convertPath(argv[0]); 3429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bundle.setRClassDir(argv[0]); 3439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 3449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case 'M': 3459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project argc--; 3469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project argv++; 3479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!argc) { 3489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project fprintf(stderr, "ERROR: No argument supplied for '-M' option\n"); 3499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project wantUsage = true; 3509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project goto bail; 3519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project convertPath(argv[0]); 3539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bundle.setAndroidManifestFile(argv[0]); 3549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 3559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case 'P': 3569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project argc--; 3579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project argv++; 3589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!argc) { 3599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project fprintf(stderr, "ERROR: No argument supplied for '-P' option\n"); 3609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project wantUsage = true; 3619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project goto bail; 3629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project convertPath(argv[0]); 3649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bundle.setPublicOutputFile(argv[0]); 3659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 3669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case 'S': 3679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project argc--; 3689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project argv++; 3699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!argc) { 3709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project fprintf(stderr, "ERROR: No argument supplied for '-S' option\n"); 3719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project wantUsage = true; 3729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project goto bail; 3739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project convertPath(argv[0]); 3759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bundle.addResourceSourceDir(argv[0]); 3769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 3779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case '0': 3789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project argc--; 3799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project argv++; 3809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!argc) { 3819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project fprintf(stderr, "ERROR: No argument supplied for '-e' option\n"); 3829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project wantUsage = true; 3839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project goto bail; 3849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (argv[0][0] != 0) { 3869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bundle.addNoCompressExtension(argv[0]); 3879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 3889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bundle.setCompressionMethod(ZipEntry::kCompressStored); 3899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 39162da8461ed5317fe78ae5e3793662694e7fc99a3Dianne Hackborn case '-': 39262da8461ed5317fe78ae5e3793662694e7fc99a3Dianne Hackborn if (strcmp(cp, "-min-sdk-version") == 0) { 39362da8461ed5317fe78ae5e3793662694e7fc99a3Dianne Hackborn argc--; 39462da8461ed5317fe78ae5e3793662694e7fc99a3Dianne Hackborn argv++; 39562da8461ed5317fe78ae5e3793662694e7fc99a3Dianne Hackborn if (!argc) { 39662da8461ed5317fe78ae5e3793662694e7fc99a3Dianne Hackborn fprintf(stderr, "ERROR: No argument supplied for '--min-sdk-version' option\n"); 39762da8461ed5317fe78ae5e3793662694e7fc99a3Dianne Hackborn wantUsage = true; 39862da8461ed5317fe78ae5e3793662694e7fc99a3Dianne Hackborn goto bail; 39962da8461ed5317fe78ae5e3793662694e7fc99a3Dianne Hackborn } 40062da8461ed5317fe78ae5e3793662694e7fc99a3Dianne Hackborn bundle.setMinSdkVersion(argv[0]); 40162da8461ed5317fe78ae5e3793662694e7fc99a3Dianne Hackborn } else if (strcmp(cp, "-target-sdk-version") == 0) { 40262da8461ed5317fe78ae5e3793662694e7fc99a3Dianne Hackborn argc--; 40362da8461ed5317fe78ae5e3793662694e7fc99a3Dianne Hackborn argv++; 40462da8461ed5317fe78ae5e3793662694e7fc99a3Dianne Hackborn if (!argc) { 40562da8461ed5317fe78ae5e3793662694e7fc99a3Dianne Hackborn fprintf(stderr, "ERROR: No argument supplied for '--target-sdk-version' option\n"); 40662da8461ed5317fe78ae5e3793662694e7fc99a3Dianne Hackborn wantUsage = true; 40762da8461ed5317fe78ae5e3793662694e7fc99a3Dianne Hackborn goto bail; 40862da8461ed5317fe78ae5e3793662694e7fc99a3Dianne Hackborn } 40962da8461ed5317fe78ae5e3793662694e7fc99a3Dianne Hackborn bundle.setTargetSdkVersion(argv[0]); 41062da8461ed5317fe78ae5e3793662694e7fc99a3Dianne Hackborn } else if (strcmp(cp, "-max-sdk-version") == 0) { 41162da8461ed5317fe78ae5e3793662694e7fc99a3Dianne Hackborn argc--; 41262da8461ed5317fe78ae5e3793662694e7fc99a3Dianne Hackborn argv++; 41362da8461ed5317fe78ae5e3793662694e7fc99a3Dianne Hackborn if (!argc) { 41462da8461ed5317fe78ae5e3793662694e7fc99a3Dianne Hackborn fprintf(stderr, "ERROR: No argument supplied for '--max-sdk-version' option\n"); 41562da8461ed5317fe78ae5e3793662694e7fc99a3Dianne Hackborn wantUsage = true; 41662da8461ed5317fe78ae5e3793662694e7fc99a3Dianne Hackborn goto bail; 41762da8461ed5317fe78ae5e3793662694e7fc99a3Dianne Hackborn } 41862da8461ed5317fe78ae5e3793662694e7fc99a3Dianne Hackborn bundle.setMaxSdkVersion(argv[0]); 41962da8461ed5317fe78ae5e3793662694e7fc99a3Dianne Hackborn } else if (strcmp(cp, "-version-code") == 0) { 42062da8461ed5317fe78ae5e3793662694e7fc99a3Dianne Hackborn argc--; 42162da8461ed5317fe78ae5e3793662694e7fc99a3Dianne Hackborn argv++; 42262da8461ed5317fe78ae5e3793662694e7fc99a3Dianne Hackborn if (!argc) { 42362da8461ed5317fe78ae5e3793662694e7fc99a3Dianne Hackborn fprintf(stderr, "ERROR: No argument supplied for '--version-code' option\n"); 42462da8461ed5317fe78ae5e3793662694e7fc99a3Dianne Hackborn wantUsage = true; 42562da8461ed5317fe78ae5e3793662694e7fc99a3Dianne Hackborn goto bail; 42662da8461ed5317fe78ae5e3793662694e7fc99a3Dianne Hackborn } 42762da8461ed5317fe78ae5e3793662694e7fc99a3Dianne Hackborn bundle.setVersionCode(argv[0]); 42862da8461ed5317fe78ae5e3793662694e7fc99a3Dianne Hackborn } else if (strcmp(cp, "-version-name") == 0) { 42962da8461ed5317fe78ae5e3793662694e7fc99a3Dianne Hackborn argc--; 43062da8461ed5317fe78ae5e3793662694e7fc99a3Dianne Hackborn argv++; 43162da8461ed5317fe78ae5e3793662694e7fc99a3Dianne Hackborn if (!argc) { 43262da8461ed5317fe78ae5e3793662694e7fc99a3Dianne Hackborn fprintf(stderr, "ERROR: No argument supplied for '--version-name' option\n"); 43362da8461ed5317fe78ae5e3793662694e7fc99a3Dianne Hackborn wantUsage = true; 43462da8461ed5317fe78ae5e3793662694e7fc99a3Dianne Hackborn goto bail; 43562da8461ed5317fe78ae5e3793662694e7fc99a3Dianne Hackborn } 43662da8461ed5317fe78ae5e3793662694e7fc99a3Dianne Hackborn bundle.setVersionName(argv[0]); 437e17086ba346009a26cc2299b133a0fe602acb6ecDianne Hackborn } else if (strcmp(cp, "-values") == 0) { 438e17086ba346009a26cc2299b133a0fe602acb6ecDianne Hackborn bundle.setValues(true); 43963459ad555c10de1f316d6de01fc3cd0c0aaa457Xavier Ducrohet } else if (strcmp(cp, "-custom-package") == 0) { 44063459ad555c10de1f316d6de01fc3cd0c0aaa457Xavier Ducrohet argc--; 44163459ad555c10de1f316d6de01fc3cd0c0aaa457Xavier Ducrohet argv++; 44263459ad555c10de1f316d6de01fc3cd0c0aaa457Xavier Ducrohet if (!argc) { 44363459ad555c10de1f316d6de01fc3cd0c0aaa457Xavier Ducrohet fprintf(stderr, "ERROR: No argument supplied for '--custom-package' option\n"); 44463459ad555c10de1f316d6de01fc3cd0c0aaa457Xavier Ducrohet wantUsage = true; 44563459ad555c10de1f316d6de01fc3cd0c0aaa457Xavier Ducrohet goto bail; 44663459ad555c10de1f316d6de01fc3cd0c0aaa457Xavier Ducrohet } 44763459ad555c10de1f316d6de01fc3cd0c0aaa457Xavier Ducrohet bundle.setCustomPackage(argv[0]); 448745e17a07c77aa6b347d9e75c99eb3fcb381bc5dKenny Root } else if (strcmp(cp, "-utf16") == 0) { 449745e17a07c77aa6b347d9e75c99eb3fcb381bc5dKenny Root bundle.setEncodingSpecified(true); 450745e17a07c77aa6b347d9e75c99eb3fcb381bc5dKenny Root bundle.setUTF8(false); 4512fee0ed6eb99b211efa06f095a41268a2021214aJeff Hamilton } else if (strcmp(cp, "-rename-manifest-package") == 0) { 4522fee0ed6eb99b211efa06f095a41268a2021214aJeff Hamilton argc--; 4532fee0ed6eb99b211efa06f095a41268a2021214aJeff Hamilton argv++; 4542fee0ed6eb99b211efa06f095a41268a2021214aJeff Hamilton if (!argc) { 4552fee0ed6eb99b211efa06f095a41268a2021214aJeff Hamilton fprintf(stderr, "ERROR: No argument supplied for '--rename-manifest-package' option\n"); 4562fee0ed6eb99b211efa06f095a41268a2021214aJeff Hamilton wantUsage = true; 4572fee0ed6eb99b211efa06f095a41268a2021214aJeff Hamilton goto bail; 4582fee0ed6eb99b211efa06f095a41268a2021214aJeff Hamilton } 4592fee0ed6eb99b211efa06f095a41268a2021214aJeff Hamilton bundle.setManifestPackageNameOverride(argv[0]); 460ef05e076ced1a32c5c0aaee28403779834adb2baDianne Hackborn } else if (strcmp(cp, "-rename-instrumentation-target-package") == 0) { 461ef05e076ced1a32c5c0aaee28403779834adb2baDianne Hackborn argc--; 462ef05e076ced1a32c5c0aaee28403779834adb2baDianne Hackborn argv++; 463ef05e076ced1a32c5c0aaee28403779834adb2baDianne Hackborn if (!argc) { 464ef05e076ced1a32c5c0aaee28403779834adb2baDianne Hackborn fprintf(stderr, "ERROR: No argument supplied for '--rename-instrumentation-target-package' option\n"); 465ef05e076ced1a32c5c0aaee28403779834adb2baDianne Hackborn wantUsage = true; 466ef05e076ced1a32c5c0aaee28403779834adb2baDianne Hackborn goto bail; 467ef05e076ced1a32c5c0aaee28403779834adb2baDianne Hackborn } 468ef05e076ced1a32c5c0aaee28403779834adb2baDianne Hackborn bundle.setInstrumentationPackageNameOverride(argv[0]); 46999080c7d9ad9e5ccfec70dd10e4c24468a960c45Xavier Ducrohet } else if (strcmp(cp, "-auto-add-overlay") == 0) { 47099080c7d9ad9e5ccfec70dd10e4c24468a960c45Xavier Ducrohet bundle.setAutoAddOverlay(true); 47162da8461ed5317fe78ae5e3793662694e7fc99a3Dianne Hackborn } else { 47262da8461ed5317fe78ae5e3793662694e7fc99a3Dianne Hackborn fprintf(stderr, "ERROR: Unknown option '-%s'\n", cp); 47362da8461ed5317fe78ae5e3793662694e7fc99a3Dianne Hackborn wantUsage = true; 47462da8461ed5317fe78ae5e3793662694e7fc99a3Dianne Hackborn goto bail; 47562da8461ed5317fe78ae5e3793662694e7fc99a3Dianne Hackborn } 47662da8461ed5317fe78ae5e3793662694e7fc99a3Dianne Hackborn cp += strlen(cp) - 1; 47762da8461ed5317fe78ae5e3793662694e7fc99a3Dianne Hackborn break; 4789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project default: 4799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project fprintf(stderr, "ERROR: Unknown flag '-%c'\n", *cp); 4809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project wantUsage = true; 4819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project goto bail; 4829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project cp++; 4859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project argc--; 4879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project argv++; 4889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* 4919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * We're past the flags. The rest all goes straight in. 4929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bundle.setFileSpec(argv, argc); 4949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project result = handleCommand(&bundle); 4969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectbail: 4989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (wantUsage) { 4999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project usage(); 5009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project result = 2; 5019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project //printf("--> returning %d\n", result); 5049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return result; 5059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 506