Home | History | Annotate | Download | only in manual
      1 <!doctype html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
      2 <html>
      3 <head>
      4 <meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
      5 <meta http-equiv="content-style-type" content="text/css">
      6 <link rel="stylesheet" type="text/css" href="style.css">
      7 <title>ProGuard Troubleshooting</title>
      8 </head>
      9 <body>
     10 
     11 <script type="text/javascript" language="JavaScript">
     12 <!--
     13 if (window.self==window.top)
     14   document.write('<a class="largebutton" target="_top" href="../index.html#manual/troubleshooting.html">ProGuard index</a> <a class="largebutton" target="_top" href="http://www.saikoa.com/dexguard">DexGuard</a> <a class="largebutton" target="_top" href="http://www.saikoa.com/">Saikoa</a> <a class="largebutton" target="other" href="http://sourceforge.net/projects/proguard/">Sourceforge</a>')
     15 //-->
     16 </script>
     17 <noscript>
     18 <a class="largebutton" target="_top"  href="../index.html#manual/troubleshooting.html">ProGuard index</a>
     19 <a class="largebutton" target="_top"  href="http://www.saikoa.com/dexguard">DexGuard</a>
     20 <a class="largebutton" target="_top"  href="http://www.saikoa.com/">Saikoa</a>
     21 <a class="largebutton" target="other" href="http://sourceforge.net/projects/proguard/">Sourceforge</a>
     22 </noscript>
     23 
     24 <h2>Troubleshooting</h2>
     25 
     26 While preparing a configuration for processing your code, you may bump into a
     27 few problems. The following sections discuss some common issues and solutions:
     28 
     29 <h3><a href="#processing">Problems while processing</a></h3>
     30 <ul>
     31 <li><a href="#dynamicalclass">Note: can't find dynamically referenced class ...</a></li>
     32 <li><a href="#dynamicalclasscast">Note: ... calls '(...)Class.forName(variable).newInstance()'</a></li>
     33 <li><a href="#dynamicalclassmember">Note: ... accesses a field/method '...' dynamically</a></li>
     34 <li><a href="#attributes">Note: ... calls 'Class.get...', 'Field.get...', or 'Method.get...'</a></li>
     35 <li><a href="#unknownclass">Note: the configuration refers to the unknown class  '...'</a></li>
     36 <li><a href="#descriptorclass">Note: the configuration keeps the entry point '...', but not the descriptor class '...'</a></li>
     37 <li><a href="#libraryclass">Note: the configuration explicitly specifies '...' to keep library class '...'</a></li>
     38 <li><a href="#classmembers">Note: the configuration doesn't specify which class members to keep for class '...'</a></li>
     39 <li><a href="#nosideeffects">Note: the configuration specifies that none of the methods of class '...' have any side effects</a></li>
     40 <li><a href="#duplicateclass">Note: duplicate definition of program/library class</a></li>
     41 <li><a href="#duplicatezipentry">Warning: can't write resource ... Duplicate zip entry</a></li>
     42 <li><a href="#unresolvedclass">Warning: can't find superclass or interface</a></li>
     43 <li><a href="#unresolvedclass">Warning: can't find referenced class</a></li>
     44 <li><a href="#superclass">Error: Can't find any super classes of ... (not even immediate super class ...)</a></li>
     45 <li><a href="#superclass">Error: Can't find common super class of ... and ...</a></li>
     46 <li><a href="#unresolvedprogramclassmember">Warning: can't find referenced field/method '...' in program class ...</a></li>
     47 <li><a href="#unresolvedlibraryclassmember">Warning: can't find referenced field/method '...' in library class ...</a></li>
     48 <li><a href="#unresolvedenclosingmethod">Warning: can't find enclosing class/method</a></li>
     49 <li><a href="#dependency">Warning: library class ... depends on program class ...</a></li>
     50 <li><a href="#unexpectedclass">Warning: class file ... unexpectedly contains class ...</a></li>
     51 <li><a href="#mappingconflict1">Warning: ... is not being kept as ..., but remapped to ...</a></li>
     52 <li><a href="#mappingconflict2">Warning: field/method ... can't be mapped to ...</a></li>
     53 <li><a href="#unsupportedclassversion">Error: Unsupported class version number</a></li>
     54 <li><a href="#keep">Error: You have to specify '-keep' options</a></li>
     55 <li><a href="#filename">Error: Expecting class path separator ';' before 'Files\Java\...' (in Windows)</a></li>
     56 <li><a href="#macosx">Error: Can't read [.../lib/rt.jar] (No such file or directory) (in MacOS X)</a></li>
     57 <li><a href="#cantread">Error: Can't read ...</a></li>
     58 <li><a href="#cantwrite">Error: Can't write ...</a></li>
     59 <li><a href="#startinggui">Internal problem starting the ProGuard GUI (Cannot write XdndAware property) (in Linux)</a></li>
     60 <li><a href="#outofmemoryerror">OutOfMemoryError</a></li>
     61 <li><a href="#stackoverflowerror">StackOverflowError</a></li>
     62 <li><a href="#unexpectederror">Unexpected error</a></li>
     63 <li><a href="#otherwise">Otherwise...</a></li>
     64 </ul>
     65 
     66 <h3><a href="#afterprocessing">Unexpected observations after processing</a></h3>
     67 <ul>
     68 <li><a href="#disappearingclasses">Disappearing classes</a></li>
     69 <li><a href="#notkept">Classes or class members not being kept</a></li>
     70 <li><a href="#notobfuscated">Variable names not being obfuscated</a></li>
     71 </ul>
     72 
     73 <h3><a href="#dalvik">Problems while converting to Android Dalvik bytecode</a></h3>
     74 
     75 <ul>
     76 <li><a href="#simexception">SimException: local variable type mismatch</a></li>
     77 <li><a href="#conversionerror">Conversion to Dalvik format failed with error 1</a></li>
     78 </ul>
     79 
     80 <h3><a href="#preverifying">Problems while preverifying for Java Micro Edition</a></h3>
     81 
     82 <ul>
     83 <li><a href="#invalidclassexception1">InvalidClassException, class loading error, or verification error</a></li>
     84 </ul>
     85 
     86 <h3><a href="#runtime">Problems at run-time</a></h3>
     87 <ul>
     88 <li><a href="#stacktraces">Stack traces without class names or line numbers</a></li>
     89 <li><a href="#noclassdeffounderror">NoClassDefFoundError</a></li>
     90 <li><a href="#classnotfoundexception">ClassNotFoundException</a></li>
     91 <li><a href="#nosuchfieldexception">NoSuchFieldException</a></li>
     92 <li><a href="#nosuchmethodexception">NoSuchMethodException</a></li>
     93 <li><a href="#missingresourceexception">MissingResourceException or NullPointerException</a></li>
     94 <li><a href="#disappearingannotations">Disappearing annotations</a></li>
     95 <li><a href="#invalidjarfile">Invalid or corrupt jarfile</a></li>
     96 <li><a href="#invalidjarindexexception">InvalidJarIndexException: Invalid index</a></li>
     97 <li><a href="#invalidclassexception2">InvalidClassException, class loading error, or verification error (in Java Micro Edition)</a></li>
     98 <li><a href="#nosuchfieldormethod">Error: No Such Field or Method, Error verifying method (in a Java Micro Edition emulator)</a></li>
     99 <li><a href="#failingmidlets">Failing midlets (on a Java Micro Edition device)</a></li>
    100 <li><a href="#disappearingloops">Disappearing loops</a></li>
    101 <li><a href="#securityexception">SecurityException: SHA1 digest error</a></li>
    102 <li><a href="#classcastexception">ClassCastException: class not an enum</a></li><li><a href="#classcastexception">IllegalArgumentException: class not an enum type</a></li>
    103 <li><a href="#arraystoreexception">ArrayStoreException: sun.reflect.annotation.EnumConstantNotPresentExceptionProxy</a></li>
    104 <li><a href="#illegalargumentexception">IllegalArgumentException: methods with same signature but incompatible return types</a></li>
    105 <li><a href="#compilererror">CompilerError: duplicate addition</a></li>
    106 <li><a href="#classformaterror1">ClassFormatError: repetitive field name/signature</a></li>
    107 <li><a href="#classformaterror2">ClassFormatError: Invalid index in LocalVariableTable in class file</a></li>
    108 <li><a href="#nosuchmethoderror">NoSuchMethodError or AbstractMethodError</a></li>
    109 <li><a href="#verifyerror">VerifyError</a></li>
    110 </ul>
    111 
    112 
    113 <h2><a name="processing">Problems while processing</a></h2>
    114 
    115 ProGuard may print out some notes and non-fatal warnings:
    116 
    117 <dl>
    118 <dt><a name="dynamicalclass"><b>Note: can't find dynamically referenced class ...</b></a></dt>
    119 
    120 <dd>ProGuard can't find a class or interface that your code is accessing by
    121     means of introspection. You should consider adding the jar that contains
    122     this class.</dd>
    123 
    124 <dt><a name="dynamicalclasscast"><b>Note: ... calls '(...)Class.forName(variable).newInstance()'</b></a></dt>
    125 
    126 <dd>Your code uses reflection to dynamically create class instances, with a
    127     construct like
    128     "<code>(MyClass)Class.forName(variable).newInstance()</code>". Depending
    129     on your application, you may need to keep the mentioned classes with an
    130     option like "<code>-keep class MyClass</code>", or their implementations
    131     with an option like "<code>-keep class * implements MyClass</code>". You
    132     can switch off these notes by specifying the
    133     <a href="usage.html#dontnote"><code>-dontnote</code></a> option.</dd>
    134 
    135 <dt><a name="dynamicalclassmember"><b>Note: ... accesses a field/method '...' dynamically</b></a></dt>
    136 
    137 <dd>Your code uses reflection to find a fields or a method, with a construct
    138     like "<code>.getField("myField")</code>". Depending on your application,
    139     you may need to figure out where the mentioned class members are defined
    140     and keep them with an option like "<code>-keep class MyClass { MyFieldType
    141     myField; }</code>". Otherwise, ProGuard might remove or obfuscate the
    142     class members, since it can't know which ones they are exactly. It does
    143     list possible candidates, for your information. You can switch off these
    144     notes by specifying
    145     the <a href="usage.html#dontnote"><code>-dontnote</code></a> option.</dd>
    146 
    147 <dt><a name="attributes"><b>Note: ... calls 'Class.get...'</b>, <b>'Field.get...'</b>, or <b>'Method.get...'</b></a></dt>
    148 <dd>Your code uses reflection to access metadata from the code, with an
    149     invocation like "<code>class.getAnnotations()</code>". You then generally
    150     need to preserve optional <a href="attributes.html">class file
    151     attributes</a>, which ProGuard removes by default. The attributes contain
    152     information about annotations, enclosing classes, enclosing methods, etc.
    153     In a summary in the log, ProGuard provides a suggested configuration,
    154     like <a href="usage.html#keepattributes"><code>-keepattributes
    155     *Annotation*</code></a>. If you're sure the attributes are not necessary,
    156     you can switch off these notes by specifying
    157     the <a href="usage.html#dontnote"><code>-dontnote</code></a> option.</dd>
    158 
    159 <dt><a name="unknownclass"><b>Note: the configuration refers to the unknown class  '...'</b></a></dt>
    160 
    161 <dd>Your configuration refers to the name of a class that is not present in
    162     the program jars or library jars. You should check whether the name is
    163     correct. Notably, you should make sure that you always specify
    164     fully-qualified names, not forgetting the package names.</dd>
    165 
    166 <dt><a name="descriptorclass"><b>Note: the configuration keeps the entry point '...', but not the descriptor class '...'</b></a></dt>
    167 
    168 <dd>Your configuration contains a <code>-keep</code> option to preserve the
    169     given method (or field), but no <code>-keep</code> option for the given
    170     class that is an argument type or return type in the method's descriptor.
    171     You may then want to keep the class too. Otherwise, ProGuard will
    172     obfuscate its name, thus changing the method's signature. The method might
    173     then become unfindable as an entry point, e.g. if it is part of a public
    174     API. You can automatically keep such descriptor classes with
    175     the <code>-keep</code> option modifier
    176     <a href="usage.html#includedescriptorclasses"><code>includedescriptorclasses</code></a>
    177     (<code>-keep,includedescriptorclasses</code> ...). You can switch off
    178     these notes by specifying
    179     the <a href="usage.html#dontnote"><code>-dontnote</code></a> option.</dd>
    180 
    181 <dt><a name="libraryclass"><b>Note: the configuration explicitly specifies '...' to keep library class '...'</b></a></dt>
    182 
    183 <dd>Your configuration contains a <code>-keep</code> option to preserve the
    184     given library class. However, you don't need to keep any library classes.
    185     ProGuard always leaves underlying libraries unchanged. You can switch off
    186     these notes by specifying the
    187     <a href="usage.html#dontnote"><code>-dontnote</code></a> option.</dd>
    188 
    189 <dt><a name="classmembers"><b>Note: the configuration doesn't specify which class members to keep for class '...'</b></a></dt>
    190 
    191 <dd>Your configuration contains a
    192     <a href="usage.html#keepclassmembers"><code>-keepclassmembers</code></a>/<a href="usage.html#keepclasseswithmembers"><code>-keepclasseswithmembers</code></a>
    193     option to preserve fields or methods in the given class, but it doesn't
    194     specify which fields or methods. This way, the option simply won't have
    195     any effect. You probably want to specify one or more fields or methods, as
    196     usual between curly braces. You can specify all fields or methods with a
    197     wildcard "<code>*;</code>". You should also consider if you just need the
    198     more common <a href="usage.html#keep"><code>-keep</code></a> option, which
    199     preserves all specified classes <i>and</i> class members.
    200     The <a href="usage.html#keepoverview">overview of all <code>keep</code>
    201     options</a> can help. You can switch off these notes by specifying
    202     the <a href="usage.html#dontnote"><code>-dontnote</code></a> option.</dd>
    203 
    204 <dt><a name="nosideeffects"><b>Note: the configuration specifies that none of the methods of class '...' have any side effects</b></a></dt>
    205 
    206 <dd>Your configuration contains an option
    207     <a href="usage.html#assumenosideeffects"><code>-assumenosideeffects</code></a>
    208     to indicate that the specified methods don't have any side effects.
    209     However, the configuration tries to match <i>all</i> methods, by using a
    210     wildcard like "<code>*;</code>". This includes methods
    211     from <code>java.lang.Object</code>, such as <code>wait()</code> and
    212     <code>notify()</code>. Removing invocations of those methods will most
    213     likely break your application. You should list the methods without side
    214     effects more conservatively. You can switch off these notes by specifying
    215     the <a href="usage.html#dontnote"><code>-dontnote</code></a> option.</dd>
    216 
    217 <dt><a name="duplicateclass"><b>Note: duplicate definition of program/library class</b></a></dt>
    218 
    219 <dd>Your program jars or library jars contain multiple definitions of the
    220     listed classes. ProGuard continues processing as usual, only considering
    221     the first definitions. The warning may be an indication of some problem
    222     though, so it's advisable to remove the duplicates. A convenient way to do
    223     so is by specifying filters on the input jars or library jars. You can
    224     switch off these notes by specifying the <a
    225     href="usage.html#dontnote"><code>-dontnote</code></a> option.
    226     <p>
    227     <img class="float" src="android_small.png" width="32" height="32"
    228     alt="android" /> The standard Android build process automatically
    229     specifies the input jars for you. There may not be an easy way to filter
    230     them to remove these notes. You could remove the duplicate classes
    231     manually from your libraries. You should never explicitly specify the
    232     input jars yourself (with <code>-injars</code> or
    233     <code>-libraryjars</code>), since you'll then get duplicate definitions.
    234     You should also not add libraries to your application that are already
    235     part of the Android run-time (notably <code>org.w3c.dom</code>,
    236     <code>org.xml.sax</code>, <code>org.xmlpull.v1</code>,
    237     <code>org.apache.commons.logging.Log</code>, <code>org.apache.http</code>,
    238     and <code>org.json</code>). They are possibly inconsistent, and the
    239     run-time libraries would get precedence anyway.</dd>
    240 
    241 <dt><a name="duplicatezipentry"><b>Warning: can't write resource ... Duplicate zip entry</b></a></dt>
    242 
    243 <dd>Your input jars contain multiple resource files with the same name.
    244     ProGuard continues copying the resource files as usual, skipping any files
    245     with previously used names. Once more, the warning may be an indication of
    246     some problem though, so it's advisable to remove the duplicates. A
    247     convenient way to do so is by specifying filters on the input jars. There
    248     is no option to switch off these warnings.
    249     <p>
    250     <img class="float" src="android_small.png" width="32" height="32"
    251     alt="android" /> The standard Android build process automatically
    252     specifies the input jars for you. There may not be an easy way to filter
    253     them to remove these warnings. You could remove the duplicate resource files
    254     manually from the input and the libraries.</dd>
    255 
    256 </dl>
    257 <p>
    258 
    259 ProGuard may terminate when it encounters parsing errors or I/O errors, or
    260 some more serious warnings:
    261 
    262 <dl>
    263 <dt><a name="unresolvedclass"><b>Warning: can't find superclass or interface</b><br/><b>Warning: can't find referenced class</b></a></dt>
    264 
    265 <dd>A class in one of your program jars or library jars is referring to a
    266     class or interface that is missing from the input. The warning lists both
    267     the referencing class(es) and the missing referenced class(es). There can
    268     be a few reasons, with their own solutions:
    269     <p>
    270     <ol>
    271     <li>If the missing class is referenced from your own code, you may have
    272         forgotten to specify an essential library. Just like when compiling
    273         all code from scratch, you must specify all libraries that the code is
    274         referencing, directly or indirectly. If the library should be
    275         processed and included in the output, you should specify it with
    276         <a href="usage.html#injars"><code>-injars</code></a>, otherwise you
    277         should specify it with
    278         <a href="usage.html#libraryjars"><code>-libraryjars</code></a>.
    279         <p>
    280         For example, if ProGuard complains that it can't find a
    281         <code>java.lang</code> class, you have to make sure that you are
    282         specifying the run-time library of your platform. For JSE, these are
    283         typically packaged in <code>lib/rt.jar</code> (<code>vm.jar</code> for
    284         IBM's JVM, and <code>classes.jar</code> in MacOS X). Other platforms
    285         like JME and Android have their own run-time libraries.
    286         The <a href="examples.html">examples section</a> provides more details
    287         for the various platforms.
    288         <p>
    289         If ProGuard still complains that it can't find a
    290         <code>javax.crypto</code> class, you probably still have to specify
    291         <code>jce.jar</code>, next to the more common <code>rt.jar</code>.</li>
    292     <li>If the missing class is referenced from a pre-compiled third-party
    293         library, and your original code runs fine without it, then the missing
    294         dependency doesn't seem to hurt. The cleanest solution is to
    295         <a href="usage.html#filters">filter out</a> the <i>referencing</i>
    296         class or classes from the input, with a filter like "<code>-libraryjars
    297         mylibrary.jar(!somepackage/SomeUnusedReferencingClass.class)</code>".
    298         ProGuard will then skip this class entirely in the input, and it will
    299         not bump into the problem of its missing reference. However, you may
    300         then have to filter out other classes that are in turn referencing the
    301         removed class. In practice, this works best if you can filter out
    302         entire unused packages at once, with a wildcard filter like
    303         "<code>-libraryjars
    304         mylibrary.jar(!someunusedpackage/**)</code>".<p></li>
    305     <li>If you don't feel like filtering out the problematic classes, you can
    306         try your luck with the <a
    307         href="usage.html#ignorewarnings"><code>-ignorewarnings</code></a>
    308         option, or even
    309         the <a href="usage.html#dontwarn"><code>-dontwarn</code></a> option.
    310         Only use these options if you really know what you're doing though.</li>
    311     </ol>
    312     <p>
    313     <img class="float" src="android_small.png" width="32" height="32"
    314     alt="android" /> The standard Android build process automatically
    315     specifies the input jars for you. Unfortunately, many pre-compiled
    316     third-party libraries refer to other libraries that are not actually used
    317     and therefore not present. This works fine in debug builds, but in release
    318     builds, ProGuard expects all libraries, so it can perform a proper static
    319     analysis. For example, if ProGuard complains that it can't find
    320     a <code>java.awt</code> class, then some library that you are using is
    321     referring to <code>java.awt</code>. This is a bit shady, since Android
    322     doesn't have this package at all, but if your application works anyway,
    323     you can let ProGuard accept it with "<code>-dontwarn java.awt.**</code>",
    324     for instance.
    325     <p>
    326     If the missing class is an Android run-time class, you should make sure
    327     that you are building against an Android run-time that is sufficiently
    328     recent. You may need to change the build target in your
    329     <code>project.properties</code> file or <code>build.gradle</code> file to
    330     that recent version. You can still specify a different
    331     <code>minSdkVersion</code> and a different <code>targetSdkVersion</code>
    332     in your <code>AndroidManifest.xml</code> file.</dd>
    333 
    334 <dt><a name="superclass"><b>Error: Can't find any super classes of ... (not even immediate super class ...)</b><br/><b>Error: Can't find common super class of ... and ...</b></a></dt>
    335 
    336 <dd>It seems like you tried to avoid the warnings from the previous paragraph
    337     by specifying
    338     <a href="usage.html#ignorewarnings"><code>-ignorewarnings</code></a>
    339     or <a href="usage.html#dontwarn"><code>-dontwarn</code></a>, but it didn't
    340     work out. ProGuard's optimization step and preverification step really
    341     need the missing classes to make sense of the code. Preferably, you would
    342     solve the problem by adding the missing library, as discussed. If you're
    343     sure the class that references the missing class isn't used either, you
    344     could also try filtering it out from the input, by adding a filter to the
    345     corresponding <a href="usage.html#injars"><code>-injars</code></a> option:
    346     "<code>-injars
    347     myapplication.jar(!somepackage/SomeUnusedClass.class)</code>". As a final
    348     solution, you could switch off optimization
    349     (<a href="usage.html#dontoptimize"><code>-dontoptimize</code></a>) and
    350     preverification
    351     (<a href="usage.html#dontpreverify"><code>-dontpreverify</code></a>).</dd>
    352 
    353 <dt><a name="unresolvedprogramclassmember"><b>Warning: can't find referenced field/method '...' in program class ...</b></a></dt>
    354 
    355 <dd>A program class is referring to a field or a method that is missing from
    356     another program class. The warning lists both the referencing class and
    357     the missing referenced class member. Your compiled class files are most
    358     likely inconsistent. Possibly, some class file didn't get recompiled
    359     properly, or some class file was left behind after its source file was
    360     removed. Try removing all compiled class files and rebuilding your
    361     project.</dd>
    362 
    363 <dt><a name="unresolvedlibraryclassmember"><b>Warning: can't find referenced field/method '...' in library class ...</b></a></dt>
    364 
    365 <dd>A program class is referring to a field or a method that is missing from a
    366     library class. The warning lists both the referencing class and the
    367     missing referenced class member. Your compiled class files are
    368     inconsistent with the libraries. You may need to recompile the class
    369     files, or otherwise upgrade the libraries to consistent versions.
    370     <p>
    371     <img class="float" src="android_small.png" width="32" height="32"
    372     alt="android" /> If you're developing for Android and ProGuard complains
    373     that it can't find a method that is only available in a recent version of
    374     the Android run-time, you should change the build target in your
    375     <code>project.properties</code> file or <code>build.gradle</code> file to
    376     that recent version. You can still specify a different
    377     <code>minSdkVersion</code> and a different <code>targetSdkVersion</code>
    378     in your <code>AndroidManifest.xml</code> file.
    379     <p>
    380     Alternatively, you may get away with ignoring the inconsistency with the
    381     options
    382     <a href="usage.html#ignorewarnings"><code>-ignorewarnings</code></a> or
    383     even
    384     <a href="usage.html#dontwarn"><code>-dontwarn</code></a>. For instance, you
    385     can specify "<code>-dontwarn mypackage.MyInconsistentClass</code>".
    386     <p>
    387     Finally, should your program classes reside in the same packages as
    388     library classes and should they refer to their package visible class
    389     members, then you should also specify the
    390     <a href="usage.html#dontskipnonpubliclibraryclassmembers"><code>-dontskipnonpubliclibraryclassmembers</code></a>
    391     option.</dd>
    392 
    393 <dt><a name="unresolvedenclosingmethod"><b>Warning: can't find enclosing class/method</b></a></dt>
    394 
    395 <dd>If there are unresolved references to classes that are defined inside
    396     methods in your input, once more, your compiled class files are most likely
    397     inconsistent. Possibly, some class file didn't get recompiled properly, or
    398     some class file was left behind after its source file was removed. Try
    399     removing all compiled class files and rebuilding your project.</dd>
    400 
    401 <dt><a name="dependency"><b>Warning: library class ... depends on program class ...</b></a></dt>
    402 
    403 <dd>If any of your library classes depend on your program classes, by
    404     extending, implementing or just referencing them, your processed code will
    405     generally be unusable. Program classes can depend on library classes, but
    406     not the other way around. Program classes are processed, while library
    407     classes always remain unchanged. It is therefore impossible to adapt
    408     references from library classes to program classes, for instance if the
    409     program classes are renamed. You should define a clean separation between
    410     program code (specified with <a
    411     href="usage.html#injars"><code>-injars</code></a>) and library code
    412     (specified with <a
    413     href="usage.html#libraryjars"><code>-libraryjars</code></a>), and try
    414     again.
    415     <p>
    416     <img class="float" src="android_small.png" width="32" height="32"
    417     alt="android" /> In Android development, sloppy libraries may contain
    418     duplicates of classes that are already present in the Android run-time
    419     (notably <code>org.w3c.dom</code>, <code>org.xml.sax</code>,
    420     <code>org.xmlpull.v1</code>, <code>org.apache.commons.logging.Log</code>,
    421     <code>org.apache.http</code>, and <code>org.json</code>). You must remove
    422     these classes from your libraries, since they are possibly inconsistent,
    423     and the run-time libraries would get precedence anyway.</dd>
    424 
    425 <dt><a name="unexpectedclass"><b>Warning: class file ... unexpectedly contains class ...</b></a></dt>
    426 
    427 <dd>The given class file contains a definition for the given class, but the
    428     directory name of the file doesn't correspond to the package name of the
    429     class. ProGuard will accept the class definition, but the current
    430     implementation will not write out the processed version. Please make sure
    431     your input classes are packaged correctly. Notably, class files that are
    432     in the <code>WEB-INF/classes</code> directory in a war should be packaged
    433     in a jar and put in the <code>WEB-INF/lib</code> directory. If you don't
    434     mind these classes not being written to the output, you can specify the <a
    435     href="usage.html#ignorewarnings"><code>-ignorewarnings</code></a> option,
    436     or even the <a href="usage.html#dontwarn"><code>-dontwarn</code></a>
    437     option.</dd>
    438 
    439 <dt><a name="mappingconflict1"><b>Warning: ... is not being kept as ..., but remapped to ...</b></a></dt>
    440 
    441 <dd>There is a conflict between a <code>-keep</code> option in the
    442     configuration, and the mapping file, in the obfuscation step. The given
    443     class name or class member name can't be kept by its original name, as
    444     specified in the configuration, but it has to be mapped to the other given
    445     name, as specified in the mapping file. You should adapt your
    446     configuration or your mapping file to remove the conflict. Alternatively,
    447     if you're sure the renaming won't hurt, you can specify the <a
    448     href="usage.html#ignorewarnings"><code>-ignorewarnings</code></a> option,
    449     or even the <a href="usage.html#dontwarn"><code>-dontwarn</code></a>
    450     option.</dd>
    451 
    452 <dt><a name="mappingconflict2"><b>Warning: field/method ... can't be mapped to ...</b></a></dt>
    453 
    454 <dd>There is a conflict between some new program code and the mapping file, in
    455     the obfuscation step. The given class member can't be mapped to the given
    456     name, because it would conflict with another class member that is already
    457     being mapped to the same name. This can happen if you are performing
    458     incremental obfuscation, applying an obfuscation mapping file from an
    459     initial obfuscation step. For instance, some new class may have been added
    460     that extends two existing classes, introducing a conflict in the name
    461     space of its class members. If you're sure the class member receiving
    462     another name than the one specified won't hurt, you can specify the <a
    463     href="usage.html#ignorewarnings"><code>-ignorewarnings</code></a> option,
    464     or even the <a href="usage.html#dontwarn"><code>-dontwarn</code></a>
    465     option. Note that you should always use the <a
    466     href="usage.html#useuniqueclassmembernames"><code>-useuniqueclassmembernames</code></a>
    467     option in the initial obfuscation step, in order to reduce the risk of
    468     conflicts.</dd>
    469 
    470 <dt><a name="unsupportedclassversion"><b>Error: Unsupported class version number</b></a></dt>
    471 
    472 <dd>You are trying to process class files compiled for a recent version of
    473     Java that your copy of ProGuard doesn't support yet. You
    474     should <a href="http://proguard.sourceforge.net/downloads.html">check
    475     on-line</a> if there is a more recent release.</dd>
    476 
    477 <dt><a name="keep"><b>Error: You have to specify '-keep' options</b></a></dt>
    478 
    479 <dd>You either forgot to specify <a
    480     href="usage.html#keep"><code>-keep</code></a> options, or you mistyped the
    481     class names. ProGuard has to know exactly what you want to keep: an
    482     application, an applet, a servlet, a midlet,..., or any combination of
    483     these. Without the proper seed specifications, ProGuard would shrink,
    484     optimize, or obfuscate all class files away.</dd>
    485 
    486 <dt><a name="filename"><b>Error: Expecting class path separator ';' before 'Files\Java\</b>...<b>'</b> (in Windows)</a></dt>
    487 
    488 <dd>If the path of your run-time jar contains spaces, like in "Program Files",
    489     you have to enclose it with single or double quotes, as explained in the
    490     section on <a href="usage.html#filename">file names</a>. This is actually
    491     true for all file names containing special characters, on all
    492     platforms.</dd>
    493 
    494 <dt><a name="macosx"><b>Error: Can't read [</b>...<b>/lib/rt.jar] (No such file or directory)</b> (in MacOS X)</a></dt>
    495 
    496 <dd>In MacOS X, the run-time classes may be in a different place than on most
    497     other platforms. You'll then have to adapt your configuration, replacing
    498     the path <code>&lt;java.home&gt;/lib/rt.jar</code> by
    499     <code>&lt;java.home&gt;/../Classes/classes.jar</code>.</dd>
    500 
    501 <dt><a name="cantread"><b>Error: Can't read ...</b></a></dt>
    502 
    503 <dd>ProGuard can't read the specified file or directory. Double-check that the
    504     name is correct in your configuration, that the file is readable, and that
    505     it is not corrupt. An additional message "Unexpected end of ZLIB input
    506     stream" suggests that the file is truncated. You should then make sure
    507     that the file is complete on disk when ProGuard starts (asynchronous
    508     copying? unflushed buffer or cache?), and that it is not somehow
    509     overwritten by ProGuard's own output.</dd>
    510 
    511 <dt><a name="cantwrite"><b>Error: Can't write ...</b></a></dt>
    512 
    513 <dd>ProGuard can't write the specified file or directory. Double-check that
    514     the name is correct in your configuration and that the file is
    515     writable.</dd>
    516 
    517 <dt><a name="startinggui"><b>Internal problem starting the ProGuard GUI (Cannot write XdndAware property)</b> (in Linux)</a></dt>
    518 
    519 <dd>In Linux, at least with Java 6, the GUI may not start properly, due to
    520     <a href="http://bugs.sun.com/view_bug.do?bug_id=7027598">Sun
    521     Bug #7027598</a>. The work-around at this time is to specify the JVM
    522    option <code>-DsuppressSwingDropSupport=true</code> when running the
    523    GUI.</dd>
    524 
    525 </dl>
    526 <p>
    527 
    528 Should ProGuard crash while processing your application:
    529 
    530 <dl>
    531 <dt><a name="outofmemoryerror"><b>OutOfMemoryError</b></a></dt>
    532 
    533 <dd>You can try increasing the heap size of the Java virtual machine, with the
    534     usual <code>-Xmx</code> option:
    535     <ul>
    536     <li>In Java, specify the option as an argument to the JVM: <code>java
    537         -Xmx1024m</code> ...
    538     <li>In Ant, set the environment variable <code>ANT_OPTS=-Xmx1024m</code>
    539     <li>In Gradle, set the environment variable
    540         <code>GRADLE_OPTS=-Xmx1024m</code>
    541     <li>In Maven, set the environment variable
    542         <code>MAVEN_OPTS=-Xmx1024m</code>
    543     <li>In Eclipse, add the line  <code>-Xmx1024m</code> to the file
    544         <code>eclipse.ini</code> inside your Eclipse install.
    545     </ul>
    546     You can also reduce the amount of memory that ProGuard needs by removing
    547     unnecessary library jars from your configuration, or by filtering out
    548     unused library packages and classes.</dd>
    549 
    550 <dt><a name="stackoverflowerror"><b>StackOverflowError</b></a></dt>
    551 
    552 <dd>This error might occur when processing a large code base on Windows
    553     (surprisingly, not so easily on Linux). In theory, increasing the stack
    554     size of the Java virtual machine (with the usual <code>-Xss</code> option)
    555     should help too. In practice however, the <code>-Xss</code> setting
    556     doesn't have any effect on the main thread, due to <a
    557     href="http://bugs.sun.com/view_bug.do?bug_id=4362291">Sun Bug
    558     #4362291</a>. As a result, this solution will only work when running
    559     ProGuard in a different thread, e.g. from its GUI.</dd>
    560 
    561 <dt><a name="unexpectederror"><b>Unexpected error</b></a></dt>
    562 
    563 <dd>ProGuard has encountered an unexpected condition, typically in the
    564     optimization step. It may or may not recover. You should be able to avoid
    565     it using the <a
    566     href="usage.html#dontoptimize"><code>-dontoptimize</code></a> option. In
    567     any case, please report the problem, preferably with the simplest example
    568     that causes ProGuard to crash.</dd>
    569 
    570 <dt><a name="otherwise"><b>Otherwise...</b></a></dt>
    571 
    572 <dd>Maybe your class files are corrupt. See if recompiling them and trying
    573     again helps. If not, please report the problem, preferably with the
    574     simplest example that causes ProGuard to crash.</dd>
    575 
    576 </dl>
    577 <p>
    578 
    579 <h2><a name="afterprocessing">Unexpected observations after processing</a></h2>
    580 
    581 If ProGuard seems to run fine, but your processed code doesn't look right,
    582 there might be a couple of reasons:
    583 
    584 <dl>
    585 <dt><a name="disappearingclasses"><b>Disappearing classes</b></a></dt>
    586 
    587 <dd>If you are working on Windows and it looks like some classes have
    588     disappeared from your output, you should make sure you're not writing your
    589     output class files to a directory (or unpacking the output jar). On
    590     platforms with case-insensitive file systems, such as Windows, unpacking
    591     tools often let class files with similar lower-case and upper-case names
    592     overwrite each other. If you really can't switch to a different operating
    593     system, you could consider using ProGuard's <a
    594     href="usage.html#dontusemixedcaseclassnames"><code>-dontusemixedcaseclassnames</code></a>
    595     option.
    596     <p>
    597     Also, you should make sure your class files are in directories that
    598     correspond to their package names. ProGuard will read misplaced class
    599     files, but it will currently not write their processed versions. Notably,
    600     class files that are in the <code>WEB-INF/classes</code> directory in a
    601     war should be packaged in a jar and put in the <code>WEB-INF/lib</code>
    602     directory.</dd>
    603 
    604 <dt><a name="notkept"><b>Classes or class members not being kept</b></a></dt>
    605 
    606 <dd>If ProGuard is not keeping the right classes or class members, make sure
    607     you are using fully qualified class names. If the package name of some
    608     class is missing, ProGuard won't match the elements that you might be
    609     expecting. It may help to double-check for typos too. You can use the <a
    610     href="usage.html#printseeds"><code>-printseeds</code></a> option to see
    611     which elements are being kept exactly.
    612     <p>
    613     If you are using marker interfaces to keep other classes, the marker
    614     interfaces themselves are probably being removed in the shrinking step.
    615     You should therefore always explicitly keep any marker interfaces, with
    616     an option like "<code>-keep interface MyMarkerInterface</code>".
    617     <p>
    618     Similarly, if you are keeping classes based on annotations, you may have
    619     to avoid that the annotation classes themselves are removed in the
    620     shrinking step. You should package the annotation classes as a library, or
    621     explicitly keep them in your program code with an option like "<code>-keep
    622     @interface *</code>".</dd>
    623 
    624 <dt><a name="notobfuscated"><b>Variable names not being obfuscated</b></a></dt>
    625 
    626 <dd>If the names of the local variables and parameters in your obfuscated code
    627     don't look obfuscated, because they suspiciously resemble the names of
    628     their types, it's probably because the decompiler that you are using is
    629     coming up with those names. ProGuard's obfuscation step does remove the
    630     original names entirely, unless you explicitly keep the
    631     <code>LocalVariableTable</code> or <code>LocalVariableTypeTable</code>
    632     attributes.</dd>
    633 
    634 </dl>
    635 
    636 <h2><a name="dalvik">Problems while converting to Android Dalvik bytecode</a></h2>
    637 
    638 If ProGuard seems to run fine, but the dx tool in the Android SDK subsequently
    639 fails with an error:
    640 
    641 <dl>
    642 <dt><a name="simexception"><b>SimException: local variable type mismatch</b></a></dt>
    643 
    644 <dd>This error indicates that ProGuard's optimization step has not been able
    645     to maintain the correct debug information about local variables. This can
    646     happen if some code is optimized radically. Possible work-arounds: let the
    647     java compiler not produce debug information (<code>-g:none</code>), or let
    648     ProGuard's obfuscation step remove the debug information again
    649     (by <i>not</i> keeping the attributes <code>LocalVariableTable</code>
    650     and <code>LocalVariableTypeTable</code>
    651     with <a href="usage.html#keepattributes"><code>-keepattributes</code></a>),
    652     or otherwise just disable optimization
    653     (<a href="usage.html#dontoptimize"><code>-dontoptimize</code></a>).</dd>
    654 
    655 <dt><a name="conversionerror"><b>Conversion to Dalvik format failed with error 1</b></a></dt>
    656 
    657 <dd>This error may have various causes, but if dx is tripping over some code
    658     processed by ProGuard, you should make sure that you are using the latest
    659     version of ProGuard. You can just copy the ProGuard jars
    660     to <code>android-sdk/tools/proguard/lib</code>. If that doesn't help,
    661     please report the problem, preferably with the simplest example that still
    662     brings out the error.</dd>
    663 
    664 </dl>
    665 
    666 <h2><a name="preverifying">Problems while preverifying for Java Micro Edition</a></h2>
    667 
    668 If ProGuard seems to run fine, but the external preverifier subsequently
    669 produces errors, it's usually for a single reason:
    670 
    671 <dl>
    672 <dt><a name="invalidclassexception1"><b>InvalidClassException</b>, <b>class loading error</b>, or <b>verification error</b></a></dt>
    673 
    674 <dd>If you get any such message from the preverifier, you are probably working
    675     on a platform with a case-insensitive file system, such as Windows. The
    676     <code>preverify</code> tool always unpacks the jars, so class files with
    677     similar lower-case and upper-case names overwrite each other. You can use
    678     ProGuard's <a
    679     href="usage.html#dontusemixedcaseclassnames"><code>-dontusemixedcaseclassnames</code></a>
    680     option to work around this problem.
    681     <p>
    682     If the above doesn't help, there is probably a bug in the optimization
    683     step of ProGuard. Make sure you are using the latest version. You should
    684     be able to work around the problem by using the <a
    685     href="usage.html#dontoptimize"><code>-dontoptimize</code></a> option. You
    686     can check the bug database to see if it is a known problem (often with a
    687     fix). Otherwise, please report it, preferably with the simplest example on
    688     which you can find ProGuard to fail.</dd>
    689 
    690 </dl>
    691 
    692 Note that it is no longer necessary to use an external preverifier. With the
    693 <a href="usage.html#microedition"><code>-microedition</code></a> option,
    694 ProGuard will preverify the class files for Java Micro Edition.
    695 <p>
    696 
    697 <h2><a name="runtime">Problems at run-time</a></h2>
    698 
    699 If ProGuard runs fine, but your processed application doesn't work, there
    700 might be several reasons:
    701 
    702 <dl>
    703 <dt><a name="stacktraces"><b>Stack traces without class names or line numbers</b></a></dt>
    704 
    705 <dd>If your stack traces don't contain any class names or lines numbers,
    706     even though you are keeping the proper attributes, make sure this debugging
    707     information is present in your compiled code to start with. Notably the Ant
    708     javac task has debugging information switched off by default.</dd>
    709 
    710 <dt><a name="noclassdeffounderror"><b>NoClassDefFoundError</b></a></dt>
    711 
    712 <dd>Your class path is probably incorrect. It should at least contain all
    713     library jars and, of course, your processed program jar.</dd>
    714 
    715 <dt><a name="classnotfoundexception"><b>ClassNotFoundException</b></a></dt>
    716 
    717 <dd>Your code is probably calling <code>Class.forName</code>, trying to create
    718     the missing class dynamically. ProGuard can only detect constant name
    719     arguments, like <code>Class.forName("mypackage.MyClass")</code>. For
    720     variable name arguments like <code>Class.forName(someClass)</code>, you
    721     have to keep all possible classes using the appropriate <a
    722     href="usage.html#keep"><code>-keep</code></a> option, e.g. "<code>-keep
    723     class mypackage.MyClass</code>" or "<code>-keep class * implements
    724     mypackage.MyInterface</code>".</dd>
    725 
    726 <dt><a name="nosuchfieldexception"><b>NoSuchFieldException</b></a></dt>
    727 
    728 <dd>Your code is probably calling something like
    729     <code>myClass.getField</code>, trying to find some field dynamically.
    730     Since ProGuard can't always detect this automatically, you have to keep
    731     the missing field in using the
    732     appropriate <a href="usage.html#keep"><code>-keep</code></a> option, e.g.
    733     "<code>-keepclassmembers class mypackage.MyClass { int myField;
    734     }</code>".</dd>
    735 
    736 <dt><a name="nosuchmethodexception"><b>NoSuchMethodException</b></a></dt>
    737 
    738 <dd>Your code is probably calling something like
    739     <code>myClass.getMethod</code>, trying to find some method dynamically.
    740     Since ProGuard can't always detect this automatically, you have to keep
    741     the missing method in using the
    742     appropriate <a href="usage.html#keep"><code>-keep</code></a> option, e.g.
    743     "<code>-keepclassmembers class mypackage.MyClass { void myMethod();
    744     }</code>".
    745     <p>
    746     More specifically, if the method reported as missing is
    747     <code>values</code> or <code>valueOf</code>, you probably have to keep
    748     some methods related to <a
    749     href="examples.html#enumerations">enumerations</a>.</dd>
    750 
    751 <dt><a name="missingresourceexception"><b>MissingResourceException</b> or <b>NullPointerException</b></a></dt>
    752 
    753 <dd>Your processed code may be unable to find some resource files. ProGuard
    754     simply copies resource files over from the input jars to the output jars.
    755     Their names and contents remain unchanged, unless you specify the options
    756     <a
    757     href="usage.html#adaptresourcefilenames"><code>-adaptresourcefilenames</code></a>
    758     and/or <a
    759     href="usage.html#adaptresourcefilecontents"><code>-adaptresourcefilecontents</code></a>.
    760     <p>
    761     Furthermore, directory entries in jar files aren't copied, unless you
    762     specify the option <a
    763     href="usage.html#keepdirectories"><code>-keepdirectories</code></a>.
    764     Note that Sun advises against calling <code>Class.getResource()</code> for
    765     directories (<a href="http://bugs.sun.com/view_bug.do?bug_id=4761949">Sun
    766     Bug #4761949</a>).</dd>
    767 
    768 <dt><a name="disappearingannotations"><b>Disappearing annotations</b></a></dt>
    769 
    770 <dd>By default, the obfuscation step removes all annotations. If your
    771     application relies on annotations to function properly, you should
    772     explicitly keep them with
    773     <code><a href="usage.html#keepattributes">-keepattributes</a>
    774     *Annotation*</code>.</dd>
    775 
    776 <dt><a name="invalidjarfile"><b>Invalid or corrupt jarfile</b></a></dt>
    777 
    778 <dd>You are probably starting your application with the java option
    779     <code>-jar</code> instead of the option <code>-classpath</code>. The java
    780     virtual machine returns with this error message if your jar doesn't
    781     contain a manifest file (<code>META-INF/MANIFEST.MF</code>), if the
    782     manifest file doesn't specify a main class (<code>Main-Class:</code> ...),
    783     or if the jar doesn't contain this main class. You should then make sure
    784     that the input jar contains a valid manifest file to start with, that this
    785     manifest file is the one that is copied (the first manifest file that is
    786     encountered), and that the main class is kept in your configuration,</dd>
    787 
    788 <dt><a name="invalidjarindexexception"><b>InvalidJarIndexException: Invalid index</b></a></dt>
    789 
    790 <dd>At least one of your processed jar files contains an index file
    791     <code>META-INF/INDEX.LIST</code>, listing all class files in the jar.
    792     ProGuard by default copies files like these unchanged. ProGuard may however
    793     remove or rename classes, thus invalidating the file. You should filter the
    794     index file out of the input
    795     (<code>-injars in.jar(!META-INF/INDEX.LIST)</code>) or update the file
    796     after having applied ProGuard (<code>jar -i out.jar</code>).
    797     </dd>
    798 
    799 <dt><a name="invalidclassexception2"><b>InvalidClassException</b>, <b>class loading error</b>, or <b>verification error</b> (in Java Micro Edition)</a></dt>
    800 
    801 <dd>If you get such an error in Java Micro Edition, you may have forgotten to
    802     specify the <a
    803     href="usage.html#microedition"><code>-microedition</code></a> option, so
    804     the processed class files are preverified properly.</dd>
    805 
    806 <dt><a name="nosuchfieldormethod"><b>Error: No Such Field or Method</b>, <b>Error verifying method</b> (in a Java Micro Edition emulator)</a></dt>
    807 
    808 <dd>If you get such a message in a Motorola or Sony Ericsson phone emulator,
    809     it's because these emulators don't like packageless classes and/or
    810     overloaded fields and methods. You can work around it by not using the
    811     options <code><a href="usage.html#repackageclasses">-repackageclasses</a>
    812     ''</code> and <a
    813     href="usage.html#overloadaggressively"><code>-overloadaggressively</code></a>.
    814     If you're using the JME WTK plugin, you can adapt the configuration
    815     <code>proguard/wtk/default.pro</code> that's inside the
    816     <code>proguard.jar</code>.</dd>
    817 
    818 <dt><a name="failingmidlets"><b>Failing midlets</b> (on a Java Micro Edition device)</a></dt>
    819 
    820 <dd>If your midlet runs in an emulator and on some devices, but not on some
    821     other devices, this is probably due to a bug in the latter devices. For
    822     some older Motorola and Nokia phones, you might try specifying the <a
    823     href="usage.html#useuniqueclassmembernames"><code>-useuniqueclassmembernames</code></a>
    824     option. It avoids overloading class member names, which triggers a bug in
    825     their java virtual machine.
    826     <p>
    827     You might also try using the <a
    828     href="usage.html#dontusemixedcaseclassnames"><code>-dontusemixedcaseclassnames</code></a>
    829     option. Even if the midlet has been properly processed and then
    830     preverified on a case-sensitive file system, the device itself might not
    831     like the mixed-case class names. Notably, the Nokia N-Gage emulator works
    832     fine, but the actual device seems to exhibit this problem.</dd>
    833 
    834 <dt><a name="disappearingloops"><b>Disappearing loops</b></a></dt>
    835 
    836 <dd>If your code contains empty busy-waiting loops, ProGuard's optimization
    837     step may remove them. More specifically, this happens if a loop
    838     continuously checks the value of a non-volatile field that is changed in a
    839     different thread. The specifications of the Java Virtual Machine require
    840     that you always mark fields that are accessed across different threads
    841     without further synchronization as <code>volatile</code>. If this is not
    842     possible for some reason, you'll have to switch off optimization using the
    843     <a href="usage.html#dontoptimize"><code>-dontoptimize</code></a>
    844     option.</dd>
    845 
    846 <dt><a name="securityexception"><b>SecurityException: SHA1 digest error</b></a></dt>
    847 
    848 <dd>You may have forgotten to sign your program jar <i>after</i> having
    849     processed it with ProGuard.</dd>
    850 
    851 <dt><a name="classcastexception"><b>ClassCastException: class not an enum</b>, or <br /><b>IllegalArgumentException: class not an enum type</b></a></dt>
    852 
    853 <dd>You should make sure you're preserving the special methods of enumeration
    854     types, which the run-time environment calls by introspection. The required
    855     options are shown in the <a
    856     href="examples.html#enumerations">examples</a>.</dd>
    857 
    858 <dt><a name="arraystoreexception"><b>ArrayStoreException: sun.reflect.annotation.EnumConstantNotPresentExceptionProxy</b></a></dt>
    859 
    860 <dd>You are probably processing annotations involving enumerations. Again, you
    861     should make sure you're preserving the special methods of the enumeration
    862     type, as shown in the examples.</dd>
    863 
    864 <dt><a name="illegalargumentexception"><b>IllegalArgumentException: methods with same signature but incompatible return types</b></a></dt>
    865 
    866 <dd>You are probably running some code that has been obfuscated
    867     with the <a
    868     href="usage.html#overloadaggressively"><code>-overloadaggressively</code></a>
    869     option. The class <code>java.lang.reflect.Proxy</code> can't handle
    870     classes that contain methods with the same names and signatures, but
    871     different return types. Its method <code>newProxyInstance</code> then
    872     throws this exception. You can avoid the problem by not using the
    873     option.</dd>
    874 
    875 <dt><a name="compilererror"><b>CompilerError: duplicate addition</b></a></dt>
    876 
    877 <dd>You are probably compiling or running some code that has been obfuscated
    878     with the <a
    879     href="usage.html#overloadaggressively"><code>-overloadaggressively</code></a>
    880     option. This option triggers a bug in
    881     <code>sun.tools.java.MethodSet.add</code> in Sun's JDK 1.2.2, which is
    882     used for (dynamic) compilation. You should then avoid this option.</dd>
    883 
    884 <dt><a name="classformaterror1"><b>ClassFormatError: repetitive field name/signature</b></a></dt>
    885 
    886 <dd>You are probably processing some code that has been obfuscated before with
    887     the <a
    888     href="usage.html#overloadaggressively"><code>-overloadaggressively</code></a>
    889     option. You should then use the same option again in the second processing
    890     round.</dd>
    891 
    892 <dt><a name="classformaterror2"><b>ClassFormatError: Invalid index in LocalVariableTable in class file</b></a></dt>
    893 
    894 <dd>If you are keeping the <code>LocalVariableTable</code> or
    895     <code>LocalVariableTypeTable</code> attributes, ProGuard's optimizing step
    896     is sometimes unable to update them consistently. You should then let the
    897     obfuscation step remove these attributes or disable the optimization
    898     step.</dd>
    899 
    900 <dt><a name="nosuchmethoderror"><b>NoSuchMethodError</b> or <b>AbstractMethodError</b></a></dt>
    901 
    902 <dd>You should make sure you're not writing your output class files to a
    903     directory on a platform with a case-insensitive file system, such as
    904     Windows. Please refer to the section about <a
    905     href="#disappearingclasses">disappearing classes</a> for details.
    906     <p>
    907     Furthermore, you should check whether you have specified your program jars
    908     and library jars properly. Program classes can refer to library classes,
    909     but not the other way around.
    910     <p>
    911     If all of this seems ok, perhaps there's a bug in ProGuard (gasp!). If so,
    912     please report it, preferably with the simplest example on which you can
    913     find ProGuard to fail.</dd>
    914 
    915 <dt><a name="verifyerror"><b>VerifyError</b></a></dt>
    916 
    917 <dd>Verification errors when executing a program are almost certainly the
    918     result of a bug in the optimization step of ProGuard. Make sure you are
    919     using the latest version. You should be able to work around the problem by
    920     using the <a href="usage.html#dontoptimize"><code>-dontoptimize</code></a>
    921     option. You can check the bug database to see if it is a known problem
    922     (often with a fix). Otherwise, please report it, preferably with the
    923     simplest example on which ProGuard fails.</dd>
    924 
    925 </dl>
    926 
    927 <hr />
    928 <address>
    929 Copyright &copy; 2002-2014
    930 <a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a> @ <a target="top" href="http://www.saikoa.com/">Saikoa</a>.
    931 </address>
    932 </body>
    933 </html>
    934