summaryrefslogtreecommitdiffstats
path: root/docs
diff options
context:
space:
mode:
authorBrian Carlstrom <bdc@google.com>2015-01-08 08:24:06 -0800
committerBrian Carlstrom <bdc@google.com>2015-01-08 09:27:15 -0800
commit2270795fbe0b277bfd49f40950ecaa78583175cc (patch)
tree9ac962825d41c4fb8ad1ec0fc2e8b441b42d3869 /docs
parent9961286c06c25cd03464d3e2b00bd9b9dedf96ba (diff)
downloadexternal_proguard-2270795fbe0b277bfd49f40950ecaa78583175cc.tar.gz
external_proguard-2270795fbe0b277bfd49f40950ecaa78583175cc.tar.bz2
external_proguard-2270795fbe0b277bfd49f40950ecaa78583175cc.zip
Upgrade Proguard to 5.1.
Downloaded from: http://sourceforge.net/projects/proguard/files/proguard/5.1/ Bug: 17550647 Change-Id: I2b4eab16eb7821fc232b294ab7f433aae08f71e1
Diffstat (limited to 'docs')
-rw-r--r--docs/FAQ.html40
-rw-r--r--docs/GPL_exception.html9
-rw-r--r--docs/acknowledgements.html33
-rw-r--r--docs/alternatives.html67
-rw-r--r--docs/downloads.html75
-rw-r--r--docs/feedback.html29
-rw-r--r--docs/index.html4
-rw-r--r--docs/license.html39
-rw-r--r--docs/main.html28
-rw-r--r--docs/manual/ant.html57
-rw-r--r--docs/manual/attributes.html217
-rw-r--r--docs/manual/examples.html91
-rw-r--r--docs/manual/gradle.html62
-rw-r--r--docs/manual/gui.html38
-rw-r--r--docs/manual/index.html15
-rw-r--r--docs/manual/introduction.html35
-rw-r--r--docs/manual/limitations.html23
-rw-r--r--docs/manual/optimizations.html26
-rw-r--r--docs/manual/refcard.html34
-rw-r--r--docs/manual/retrace/examples.html23
-rw-r--r--docs/manual/retrace/index.html15
-rw-r--r--docs/manual/retrace/introduction.html23
-rw-r--r--docs/manual/retrace/usage.html25
-rw-r--r--docs/manual/style.css10
-rw-r--r--docs/manual/troubleshooting.html140
-rw-r--r--docs/manual/usage.html205
-rw-r--r--docs/manual/wtk.html23
-rw-r--r--docs/proguard.appdata.xml32
-rw-r--r--docs/quality.html25
-rw-r--r--docs/results.html25
-rw-r--r--docs/screenshots.html23
-rw-r--r--docs/sections.html8
-rw-r--r--docs/style.css10
-rw-r--r--docs/testimonials.html23
-rw-r--r--docs/title.html2
35 files changed, 1006 insertions, 528 deletions
diff --git a/docs/FAQ.html b/docs/FAQ.html
index 7727289..62ebf7b 100644
--- a/docs/FAQ.html
+++ b/docs/FAQ.html
@@ -5,19 +5,21 @@
<meta http-equiv="content-style-type" content="text/css">
<link rel="stylesheet" type="text/css" href="style.css">
<title>ProGuard FAQ</title>
+</head>
+<body>
+
<script type="text/javascript" language="JavaScript">
<!--
if (window.self==window.top)
- window.top.location.replace("index.html#"+window.location.pathname+window.location.hash);
-else {
- var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), "");
- if (window.top.location.hash!=hash)
- window.top.location.hash=hash;
-}
+ document.write('<a class="largebutton" target="_top" href="index.html#FAQ.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>')
//-->
</script>
-</head>
-<body>
+<noscript>
+<a class="largebutton" target="_top" href="index.html#FAQ.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>
+</noscript>
<h2>Frequently Asked Questions</h2>
@@ -31,8 +33,7 @@ else {
support?</a></li>
<li><a href="#commercial">Can I use <b>ProGuard</b> to process my commercial
application?</a></li>
-<li><a href="#jdk1.4">Does <b>ProGuard</b> work with Java 2? Java 5? Java
- 6? Java 7?</a></li>
+<li><a href="#jdk1.4">Does <b>ProGuard</b> work with Java 2, 5, ..., 8?</a></li>
<li><a href="#jme">Does <b>ProGuard</b> work with Java Micro Edition?</a></li>
<li><a href="#android">Does <b>ProGuard</b> work for Google Android
code?</a></li>
@@ -137,14 +138,14 @@ Yes, you can. <b>ProGuard</b> itself is distributed under the GPL, but this
doesn't affect the programs that you process. Your code remains yours, and
its license can remain the same.
-<h3><a name="jdk1.4">Does <b>ProGuard</b> work with Java 2? Java 5? Java 6? Java 7?</a></h3>
+<h3><a name="jdk1.4">Does <b>ProGuard</b> work with Java 2, 5, ..., 8?</a></h3>
-Yes, <b>ProGuard</b> supports all JDKs from 1.1 up to and including 7.0. Java 2
-introduced some small differences in the class file format. Java 5 added
+Yes, <b>ProGuard</b> supports all JDKs from 1.1 up to and including 8.0. Java
+2 introduced some small differences in the class file format. Java 5 added
attributes for generics and for annotations. Java 6 introduced optional
preverification attributes. Java 7 made preverification obligatory and
-introduced support for dynamic languages. <b>ProGuard</b> handles all versions
-correctly.
+introduced support for dynamic languages. Java 8 added more attributes and
+default methods. <b>ProGuard</b> handles all versions correctly.
<h3><a name="jme">Does <b>ProGuard</b> work with Java Micro Edition?</a></h3>
@@ -270,12 +271,15 @@ out. If line numbers have been obfuscated away, a list of alternative method
names is presented for each obfuscated method name that has an ambiguous
reverse mapping. Please refer to the <a href="manual/index.html">ProGuard User
Manual</a> for more details.
+<p>
+Erik Andr&eacute; at Badoo has written a
+<a href="https://techblog.badoo.com/blog/2014/10/08/deobfuscating-hprof-memory-dumps/"
+target="other">tool to de-obfuscate HPROF memory dumps</a>.
<hr />
-<noscript><div><a target="_top" href="index.html" class="button">Show menu</a></div></noscript>
<address>
-Copyright &copy; 2002-2013
-<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>.
+Copyright &copy; 2002-2014
+<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a> @ <a target="top" href="http://www.saikoa.com/">Saikoa</a>.
</address>
</body>
</html>
diff --git a/docs/GPL_exception.html b/docs/GPL_exception.html
index d610af8..8cbe0cd 100644
--- a/docs/GPL_exception.html
+++ b/docs/GPL_exception.html
@@ -7,7 +7,7 @@
<H1>Special Exception to the GNU General Public License</H1>
<P>
-Copyright &copy; 2002-2013 Eric Lafortune
+Copyright &copy; 2002-2014 Eric Lafortune
</P>
<P>
@@ -40,11 +40,8 @@ the code of this program with the following stand-alone applications:
<li>the EclipseME JME IDE,</li>
<li>the Oracle NetBeans Java IDE,</li>
<li>the Oracle JME Wireless Toolkit,</li>
-<li>the Intel TXE SDK,</li>
-<li>the Simple Build Tool for Scala (and its scripts),</li>
-<li>the NeoMAD Tools by Neomades,</li>
-<li>the Javaground Tools, and</li>
-<li>the Sanaware Tools,</li>
+<li>the Simple Build Tool for Scala (and its scripts), and</li>
+<li>the Sanaware Tools.</li>
</ul>
and distribute linked combinations including the two. You must obey the GNU
General Public License in all respects for all of the code used other than
diff --git a/docs/acknowledgements.html b/docs/acknowledgements.html
index 14fdc74..9f7d3b8 100644
--- a/docs/acknowledgements.html
+++ b/docs/acknowledgements.html
@@ -5,19 +5,21 @@
<meta http-equiv="content-style-type" content="text/css">
<link rel="stylesheet" type="text/css" href="style.css">
<title>ProGuard Acknowledgements</title>
+</head>
+<body>
+
<script type="text/javascript" language="JavaScript">
<!--
if (window.self==window.top)
- window.top.location.replace("index.html#"+window.location.pathname+window.location.hash);
-else {
- var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), "");
- if (window.top.location.hash!=hash)
- window.top.location.hash=hash;
-}
+ document.write('<a class="largebutton" target="_top" href="index.html#acknowledgements.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>')
//-->
</script>
-</head>
-<body>
+<noscript>
+<a class="largebutton" target="_top" href="index.html#acknowledgements.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>
+</noscript>
<h2>Acknowledgements</h2>
@@ -49,7 +51,7 @@ Filipsky, Charles Smith, Gerrit Telkamp, Noel Grandin, Torbj&ouml;rn
S&ouml;derstedt, Clemens Eisserer, Clark Bassett, Eduard Welch, Dawid Weiss,
Andrew Wilson, Sean Owen, Niels Gron, Ishan Mehta, Steven Adams, Xavier Kral,
Stefan Martin, Toby Reyelts, Bernhard Eder, Manfred Moser, Marco Bl&uuml;mel,
-David Reiss,
+David Reiss, Roy Williams,
and many more. Thanks! Your feedback has been invaluable.
<p>
@@ -59,6 +61,10 @@ ProGuard's sibling for Android,
<a href="http://www.saikoa.com/dexguard" target="_top">DexGuard</a>.
<p>
+<a href="http://www.sky.com/" rel="nofollow" target="other">British Sky</a>
+has kindly sponsored the optimization of <i>enum</i> types.
+<p>
+
<a href="http://sourceforge.net/projects/proguard/"
target="other">SourceForge</a> is providing the resources for hosting this
project and many other projects.
@@ -72,16 +78,11 @@ target="other">Maven Central</a> repository are hosting the Maven artifacts.
The code and these web pages were written using Oracle/Sun's JDKs, Linux,
IntelliJ IDEA, GNU emacs, bash, sed, awk, and a whole host of other tools that
continue to make programming interesting.
-<p>
-
-And finally, I'm a great fan of Sanaware's <a
-href="http://www.javadocking.com/" target="other">Java Docking Library</a>.
<hr />
-<noscript><div><a target="_top" href="index.html" class="button">Show menu</a></div></noscript>
<address>
-Copyright &copy; 2002-2013
-<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>.
+Copyright &copy; 2002-2014
+<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a> @ <a target="top" href="http://www.saikoa.com/">Saikoa</a>.
</address>
</body>
diff --git a/docs/alternatives.html b/docs/alternatives.html
index 7aeffad..f4f78b6 100644
--- a/docs/alternatives.html
+++ b/docs/alternatives.html
@@ -5,19 +5,21 @@
<meta http-equiv="content-style-type" content="text/css">
<link rel="stylesheet" type="text/css" href="style.css">
<title>ProGuard Alternatives</title>
+</head>
+<body>
+
<script type="text/javascript" language="JavaScript">
<!--
if (window.self==window.top)
- window.top.location.replace("index.html#"+window.location.pathname+window.location.hash);
-else {
- var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), "");
- if (window.top.location.hash!=hash)
- window.top.location.hash=hash;
-}
+ document.write('<a class="largebutton" target="_top" href="index.html#alternatives.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>')
//-->
</script>
-</head>
-<body>
+<noscript>
+<a class="largebutton" target="_top" href="index.html#alternatives.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>
+</noscript>
<h2>Alternatives</h2>
@@ -185,16 +187,6 @@ below is incorrect.
</tr>
<tr>
-<td><a target="other" rel="nofollow" href="http://www.garret.ru/~knizhnik/">Konstantin Knizhnik</a></td>
-<td><a target="other" href="http://www.garret.ru/~knizhnik/javago/ReadMe.htm">JavaGO</a></td>
-<td align="center"><br /></td>
-<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
-<td align="center"><br /></td>
-<td align="center"><br /></td>
-<td>Free</td>
-</tr>
-
-<tr>
<td><a target="other" rel="nofollow" href="http://www.sable.mcgill.ca/">Sable</a></td>
<td><a target="other" href="http://www.sable.mcgill.ca/JBCO/">JBCO</a></td>
<td align="center"><br /></td>
@@ -315,16 +307,6 @@ below is incorrect.
</tr>
<tr>
-<td><a target="other" rel="nofollow" href="http://www.leesw.com/">LeeSoftware</a></td>
-<td><a target="other" href="http://www.leesw.com/">Smokescreen Obfuscator</a></td>
-<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
-<td align="center"><br /></td>
-<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
-<td align="center"><br /></td>
-<td>Commercial</td>
-</tr>
-
-<tr>
<td><a target="other" rel="nofollow" href="http://www.innaworks.com/">Innaworks</a></td>
<td><a target="other" href="http://www.innaworks.com/mBooster">mBooster</a></td>
<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
@@ -376,7 +358,7 @@ below is incorrect.
<tr>
<td><a target="other" rel="nofollow" href="http://www.bisguard.com/">BIS Guard &amp; Co.</a></td>
-<td><a target="other" href="http://www.bisguard.com/java.html">Java Antidecompiler</a></td>
+<td><a target="other" href="http://www.bisguard.com/">Java Antidecompiler</a></td>
<td align="center"><br /></td>
<td align="center"><br /></td>
<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
@@ -426,7 +408,7 @@ below is incorrect.
<tr>
<td><a target="other" rel="nofollow" href="http://www.arxan.com/">Arxan</a></td>
-<td><a target="other" href="http://www.arxan.com/products/guardit-for-java/">GuardIT</a></td>
+<td><a target="other" href="http://www.arxan.com/products/desktop/guardit-for-java/">GuardIT</a></td>
<td align="center"><br /></td>
<td align="center"><br /></td>
<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
@@ -505,6 +487,16 @@ below is incorrect.
</tr>
<tr class="disappeared">
+<td><a target="other" rel="nofollow" href="http://www.garret.ru/~knizhnik/">Konstantin Knizhnik</a></td>
+<td><a target="other" rel="nofollow" href="http://www.garret.ru/~knizhnik/javago/ReadMe.htm">JavaGO</a></td>
+<td align="center"><br /></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td align="center"><br /></td>
+<td align="center"><br /></td>
+<td>()disappeared?</td>
+</tr>
+
+<tr class="disappeared">
<td><a target="other" rel="nofollow" href="http://donquixote.cafebabe.jp/">Haruaki Tamada</a></td>
<td><a target="other" rel="nofollow" href="http://donquixote.cafebabe.jp/">DonQuixote</a></td>
<td align="center"><br /></td>
@@ -685,6 +677,16 @@ below is incorrect.
</tr>
<tr class="disappeared">
+<td><a target="other" rel="nofollow" href="http://www.leesw.com/">LeeSoftware</a></td>
+<td><a target="other" rel="nofollow" href="http://www.leesw.com/">Smokescreen Obfuscator</a></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td align="center"><br /></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td align="center"><br /></td>
+<td>Commercial (disappeared?)</td>
+</tr>
+
+<tr class="disappeared">
<td><a target="other" rel="nofollow" href="http://www.jproof.com/">JProof</a></td>
<td><a target="other" rel="nofollow" href="http://www.jproof.com/">JProof</a></td>
<td align="center"><br /></td>
@@ -749,10 +751,9 @@ below is incorrect.
All trademarks are property of their respective holders.
<hr />
-<noscript><div><a target="_top" href="index.html" class="button">Show menu</a></div></noscript>
<address>
-Copyright &copy; 2002-2013
-<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>.
+Copyright &copy; 2002-2014
+<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a> @ <a target="top" href="http://www.saikoa.com/">Saikoa</a>.
</address>
</body>
diff --git a/docs/downloads.html b/docs/downloads.html
index 2baa929..37e865a 100644
--- a/docs/downloads.html
+++ b/docs/downloads.html
@@ -6,19 +6,21 @@
<meta http-equiv="content-style-type" content="text/css">
<link rel="stylesheet" type="text/css" href="style.css">
<title>ProGuard Downloads</title>
+</head>
+<body>
+
<script type="text/javascript" language="JavaScript">
<!--
if (window.self==window.top)
- window.top.location.replace("index.html#"+window.location.pathname+window.location.hash);
-else {
- var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), "");
- if (window.top.location.hash!=hash)
- window.top.location.hash=hash;
-}
+ document.write('<a class="largebutton" target="_top" href="index.html#downloads.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>')
//-->
</script>
-</head>
-<body>
+<noscript>
+<a class="largebutton" target="_top" href="index.html#downloads.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>
+</noscript>
<h2>Downloads</h2>
@@ -72,6 +74,58 @@ target="other">proguard-wtk-plugin</a>, and
<a href="http://search.maven.org/#search|ga|1|a:%22proguard-retrace%22"
target="other">proguard-retrace</a>.
+<h3><div>Oct 2014</div> Version 5.1</h3>
+<ul>
+<li>Fixed processing of various kinds of closures in Java 8.
+<li>Fixed shrinking of generic signatures in classes and methods.
+<li>Fixed shrinking of debug information about generic local variable types.
+<li>Fixed optimization of default implementations in interfaces.
+<li>Fixed optimization of variable initializations.
+<li>Fixed obfuscation of internal class names in strings.
+<li>Updated documentation and examples.
+</ul>
+
+<h3><div>Aug 2014</div> Version 5.0</h3>
+<ul>
+<li>Added support for Java 8.
+<li>Added <code>-keep</code> modifier <code>includedescriptorclasses</code>.
+<li>Added automatic suggestions for keeping attributes.
+<li>Clearing preverification information when <code>-dontpreverify</code> is
+ specified.
+<li>Extended optimization support for conservative optimization with java
+ system property <code>optimize.conservatively</code>.
+<li>Fixed occasional preverification problem.
+<li>Fixed shrinking of generic class signatures.
+<li>Fixed shrinking of generic variable signatures.
+<li>Fixed analysis of unused parameters for bootstrap methods in library
+ classes.
+<li>Fixed inlining problem of non-returning subroutines.
+<li>Fixed possible IllegalArgumentException and ArrayIndexOutOfBoundsException
+ in enum simplification.
+<li>Fixed unnecessary notes about dynamic class instantiations with constant
+ class names.
+<li>Fixed preverification of unnecessary casts of null values.
+<li>Fixed lazy resolution of output jars in Gradle task.
+<li>Fixed processing of synthetic code with alternative initializer invocations.
+<li>Improved handling of symbolic links in shell scripts.
+<li>Improved default path in Windows bat files.
+<li>Updated documentation and examples.
+</ul>
+
+<h3><div>Dec 2013</div> Version 4.11</h3>
+<ul>
+<li>Added simplification of basic enum types.
+<li>Added reading and writing of apk and aar archives.
+<li>Fixed criteria for class merging.
+<li>Fixed simplification of variable initializations.
+<li>Fixed simplification of redundant boolean variables.
+<li>Fixed optimization of unused stack entries in exception handlers.
+<li>Fixed correction of access flags after class merging, method inlining, and
+ class repackaging.
+<li>Refined criterion for method inlining.
+<li>Updated documentation and examples.
+</ul>
+
<h3><div>Jul 2013</div> Version 4.10</h3>
<ul>
<li>Made Gradle task resolve files lazily.
@@ -691,10 +745,9 @@ Upgrade considerations:
</ul>
<hr />
-<noscript><div><a target="_top" href="index.html" class="button">Show menu</a></div></noscript>
<address>
-Copyright &copy; 2002-2013
-<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>.
+Copyright &copy; 2002-2014
+<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a> @ <a target="top" href="http://www.saikoa.com/">Saikoa</a>.
</address>
</body>
diff --git a/docs/feedback.html b/docs/feedback.html
index dd9c509..8a2fad4 100644
--- a/docs/feedback.html
+++ b/docs/feedback.html
@@ -6,19 +6,21 @@
<meta http-equiv="content-style-type" content="text/css">
<link rel="stylesheet" type="text/css" href="style.css">
<title>ProGuard Feedback</title>
+</head>
+<body>
+
<script type="text/javascript" language="JavaScript">
<!--
if (window.self==window.top)
- window.top.location.replace("index.html#"+window.location.pathname+window.location.hash);
-else {
- var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), "");
- if (window.top.location.hash!=hash)
- window.top.location.hash=hash;
-}
+ document.write('<a class="largebutton" target="_top" href="index.html#feedback.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>')
//-->
</script>
-</head>
-<body>
+<noscript>
+<a class="largebutton" target="_top" href="index.html#feedback.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>
+</noscript>
<h2>Feedback</h2>
@@ -77,8 +79,8 @@ document.write("users.sourceforge.net\">");
document.write("lafortune");
document.write("&#64;");
document.write("users.sourceforge.net");
-document.write("</a>");
-document.write(" <em>or</em> at ");
+document.write("<\/a>");
+document.write(" <em>or<\/em> at ");
document.write("<a href=\"ma");
document.write("ilto:");
document.write("eric");
@@ -87,7 +89,7 @@ document.write("graphics.cornell.edu\">");
document.write("eric");
document.write("&#64;");
document.write("graphics.cornell.edu");
-document.write("</a>");
+document.write("<\/a>");
//-->
</script>
<noscript>
@@ -108,10 +110,9 @@ do things my way, without the overhead and compromises associated with larger
projects.
<hr />
-<noscript><div><a target="_top" href="index.html" class="button">Show menu</a></div></noscript>
<address>
-Copyright &copy; 2002-2013
-<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>.
+Copyright &copy; 2002-2014
+<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a> @ <a target="top" href="http://www.saikoa.com/">Saikoa</a>.
</address>
</body>
diff --git a/docs/index.html b/docs/index.html
index ba40d16..40c85d7 100644
--- a/docs/index.html
+++ b/docs/index.html
@@ -88,8 +88,8 @@ You can go straight to the <a href="main.html">main page</a>.
<hr />
<address>
-Copyright &copy; 2002-2013
-<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>.
+Copyright &copy; 2002-2014
+<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a> @ <a target="top" href="http://www.saikoa.com/">Saikoa</a>.
</address>
</body>
</noframes>
diff --git a/docs/license.html b/docs/license.html
index d1077b8..81eb962 100644
--- a/docs/license.html
+++ b/docs/license.html
@@ -5,30 +5,32 @@
<meta http-equiv="content-style-type" content="text/css">
<link rel="stylesheet" type="text/css" href="style.css">
<title>ProGuard License</title>
+</head>
+<body>
+
<script type="text/javascript" language="JavaScript">
<!--
if (window.self==window.top)
- window.top.location.replace("index.html#"+window.location.pathname+window.location.hash);
-else {
- var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), "");
- if (window.top.location.hash!=hash)
- window.top.location.hash=hash;
-}
+ document.write('<a class="largebutton" target="_top" href="index.html#license.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>')
//-->
</script>
-</head>
-<body>
+<noscript>
+<a class="largebutton" target="_top" href="index.html#license.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>
+</noscript>
<h2>License</h2>
<b>ProGuard</b> is free. You can use it freely for processing your
applications, commercial or not. Your code obviously remains yours after
-having been processed, and its license can remain the same.
+having been processed, and its license can remain unchanged.
<p>
-<b>ProGuard</b> itself is copyrighted, but its distribution license provides
-you with some rights for modifying and redistributing its code and its
-documentation. More specifically, <b>ProGuard</b> is distributed under the
+The <b>ProGuard code</b> itself is copyrighted, but its distribution license
+provides you with some rights for modifying and redistributing its code and
+its documentation. More specifically, <b>ProGuard</b> is distributed under the
terms of the <a href="GPL.html">GNU General Public License</a> (GPL), version
2, as published by the <a href="http://www.fsf.org/" target="other">Free
Software Foundation</a> (FSF). In short, this means that you may freely
@@ -42,20 +44,17 @@ the <a href="http://www.gnu.org/copyleft/gpl-faq.html#GPLIncompatibleLibs"
target="other">FSF</a>), for combinations with the following stand-alone
applications: Apache Ant, Apache Maven, the Google Android SDK, the Eclipse
ProGuardDT GUI, the EclipseME JME IDE, the Oracle NetBeans Java IDE, the
-Oracle JME Wireless Toolkit, the Intel TXE SDK, the Simple Build Tool for
-Scala, the NeoMAD Tools by Neomades, the Javaground Tools, and the Sanaware
+Oracle JME Wireless Toolkit, the Simple Build Tool for Scala, and the Sanaware
Tools.
<p>
-The <b>ProGuard user documentation</b> represents an important part of this
-work. It may only be redistributed without changes, along with the unmodified
-version of the code.
+The <b>ProGuard user documentation</b> is copyrighted as well. It may only be
+redistributed without changes, along with the unmodified version of the code.
<hr />
-<noscript><div><a target="_top" href="index.html" class="button">Show menu</a></div></noscript>
<address>
-Copyright &copy; 2002-2013
-<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>.
+Copyright &copy; 2002-2014
+<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a> @ <a target="top" href="http://www.saikoa.com/">Saikoa</a>.
</address>
</body>
</html>
diff --git a/docs/main.html b/docs/main.html
index 988d87c..742c11b 100644
--- a/docs/main.html
+++ b/docs/main.html
@@ -8,18 +8,21 @@
<meta name="keywords" content="java obfuscator, optimizer, shrinker, preverfier">
<link rel="stylesheet" type="text/css" href="style.css">
<title>ProGuard Main</title>
+</head>
+<body>
+
<script type="text/javascript" language="JavaScript">
<!--
if (window.self==window.top)
- window.top.location.replace("index.html#"+window.location.pathname+window.location.hash);
-else {
- if (window.top.location.hash!="")
- window.top.location.hash="";
-}
+ document.write('<a class="largebutton" target="_top" href="index.html#main.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>')
//-->
</script>
-</head>
-<body>
+<noscript>
+<a class="largebutton" target="_top" href="index.html#main.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>
+</noscript>
<h2>Main</h2>
@@ -65,9 +68,9 @@ Wireless Toolkit.
<img align="left" src="android_shades.png" width="64" height="64" /></a>
<b>ProGuard</b> now has a sibling optimizer and obfuscator for Android:
<a href="http://www.saikoa.com/dexguard" target="_top"><b>DexGuard</b></a>. It
-focuses on code protection, with additional features like string encryption
-and class encryption. It directly targets Dalvik bytecode and streamlines the
-Android build process.
+focuses on code protection, with additional features like string encryption,
+class encryption, and dex splitting. It directly targets Dalvik bytecode and
+streamlines the Android build process.
</p>
The following sections provide more detailed information:
<ul>
@@ -95,10 +98,9 @@ The following sections provide more detailed information:
</ul>
<hr />
-<noscript><div><a target="_top" href="index.html" class="button">Show menu</a></div></noscript>
<address>
-Copyright &copy; 2002-2013
-<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>.
+Copyright &copy; 2002-2014
+<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a> @ <a target="top" href="http://www.saikoa.com/">Saikoa</a>.
</address>
</body>
</html>
diff --git a/docs/manual/ant.html b/docs/manual/ant.html
index 0837bbb..5db88df 100644
--- a/docs/manual/ant.html
+++ b/docs/manual/ant.html
@@ -5,24 +5,26 @@
<meta http-equiv="content-style-type" content="text/css">
<link rel="stylesheet" type="text/css" href="style.css">
<title>Ant Task</title>
+</head>
+<body>
+
<script type="text/javascript" language="JavaScript">
<!--
if (window.self==window.top)
- window.top.location.replace("../index.html#"+window.location.pathname+window.location.hash);
-else {
- var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), "");
- if (window.top.location.hash!=hash)
- window.top.location.hash=hash;
-}
+ document.write('<a class="largebutton" target="_top" href="../index.html#manual/ant.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>')
//-->
</script>
-</head>
-<body>
+<noscript>
+<a class="largebutton" target="_top" href="../index.html#manual/ant.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>
+</noscript>
<h2>Ant Task</h2>
<b>ProGuard</b> can be run as a task in the Java-based build tool Ant (version
-1.6.0 or higher).
+1.8 or higher).
<p>
Before you can use the <code>proguard</code> task, you have to tell Ant about
@@ -320,25 +322,27 @@ elements:
<dt><a href="usage.html#injars"><code><b>&lt;injar</b></code></a>
<a href="#classpath"><i>class_path</i></a>
<code><b>/&gt;</b></code></dt>
-<dd>Specifies the program jars (or wars, ears, zips, or directories).</dd>
+<dd>Specifies the program jars (or aars, wars, ears, zips, apks, or
+ directories).</dd>
<dt><a href="usage.html#outjars"><code><b>&lt;outjar</b></code></a>
<a href="#classpath"><i>class_path</i></a>
<code><b>/&gt;</b></code></dt>
-<dd>Specifies the names of the output jars (or wars, ears, zips, or
+<dd>Specifies the names of the output jars (or aars, wars, ears, zips, apks, or
directories).</dd>
<dt><a href="usage.html#libraryjars"><code><b>&lt;libraryjar</b></code></a>
<a href="#classpath"><i>class_path</i></a>
<code><b>/&gt;</b></code></dt>
-<dd>Specifies the library jars (or wars, ears, zips, or directories).</dd>
+<dd>Specifies the library jars (or aars, wars, ears, zips, apks, or
+ directories).</dd>
<dt><a href="usage.html#keepdirectories"><code><b>&lt;keepdirectory name = </b></code></a>"<i>directory_name</i>"
<code><b>/&gt;</b></code><br/>
<a href="usage.html#keepdirectories"><code><b>&lt;keepdirectories filter = </b></code></a>"<a href="usage.html#filefilters"><i>directory_filter</i></a>"
<code><b>/&gt;</b></code></dt>
-<dd>Keep the specified directories in the output jars (or wars, ears, zips, or
- directories).</dd>
+<dd>Keep the specified directories in the output jars (or aars, wars, ears,
+ zips, apks, or directories).</dd>
<dt><a href="usage.html#keep"><code><b>&lt;keep</b></code></a>
<a href="#keepmodifier"><i>modifiers</i></a>
@@ -481,13 +485,13 @@ attributes are:
<dl>
<dt><code><b>path</b></code> = "<i>path</i>"</dt>
-<dd>The names of the jars (or wars, ears, zips, or directories), separated by
- the path separator.</dd>
+<dd>The names of the jars (or aars, wars, ears, zips, apks, or directories),
+ separated by the path separator.</dd>
<dt><code><b>location</b></code> = "<i>name</i>" (or <code><b>file</b></code>
= "<i>name</i>", or <code><b>dir</b></code> = "<i>name</i>", or
<code><b>name</b></code> = "<i>name</i>")</dt>
-<dd>Alternatively, the name of a single jar (or war, ear, zip, or
+<dd>Alternatively, the name of a single jar (or aar, war, ear, zip, or
directory).</dd>
<dt><code><b>refid</b></code> = "<i>ref_id</i>"</dt>
@@ -505,10 +509,18 @@ In addition, the jar elements can have ProGuard-style filter attributes:
<dd>An optional filter for all class file names and resource file names that
are encountered.</dd>
+<dt><code><b>apkfilter</b></code> =
+ "<a href="usage.html#filefilters"><i>file_filter</i></a>"</dt>
+<dd>An optional filter for all apk names that are encountered.</dd>
+
<dt><code><b>jarfilter</b></code> =
"<a href="usage.html#filefilters"><i>file_filter</i></a>"</dt>
<dd>An optional filter for all jar names that are encountered.</dd>
+<dt><code><b>aarfilter</b></code> =
+ "<a href="usage.html#filefilters"><i>file_filter</i></a>"</dt>
+<dd>An optional filter for all aar names that are encountered.</dd>
+
<dt><code><b>warfilter</b></code> =
"<a href="usage.html#filefilters"><i>file_filter</i></a>"</dt>
<dd>An optional filter for all war names that are encountered.</dd>
@@ -529,6 +541,12 @@ The keep tags can have the following <i>modifier</i> attributes:
<dl>
+<dt><a href="usage.html#includedescriptorclasses"><code><b>includedescriptorclasses</b></code></a>
+ = "<i>boolean</i>"
+ (default = false)</dt>
+<dd>Specifies whether the classes of the fields and methods specified in the
+ keep tag must be kept as well.</dd>
+
<dt><a href="usage.html#allowshrinking"><code><b>allowshrinking</b></code></a>
= "<i>boolean</i>"
(default = false)</dt>
@@ -635,10 +653,9 @@ attributes:
</dl>
<hr />
-<noscript><div><a target="_top" href="../index.html" class="button">Show menu</a></div></noscript>
<address>
-Copyright &copy; 2002-2013
-<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>.
+Copyright &copy; 2002-2014
+<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a> @ <a target="top" href="http://www.saikoa.com/">Saikoa</a>.
</address>
</body>
</html>
diff --git a/docs/manual/attributes.html b/docs/manual/attributes.html
new file mode 100644
index 0000000..08265e7
--- /dev/null
+++ b/docs/manual/attributes.html
@@ -0,0 +1,217 @@
+<!doctype html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
+<meta http-equiv="content-style-type" content="text/css">
+<link rel="stylesheet" type="text/css" href="style.css">
+<title>Attributes</title>
+</head>
+<body>
+
+<script type="text/javascript" language="JavaScript">
+<!--
+if (window.self==window.top)
+ document.write('<a class="largebutton" target="_top" href="../index.html#manual/attributes.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>')
+//-->
+</script>
+<noscript>
+<a class="largebutton" target="_top" href="../index.html#manual/attributes.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>
+</noscript>
+
+<h2>Attributes</h2>
+
+Class files essentially define classes, their fields, and their methods. A lot
+of essential and non-essential data are attached to these classes, fields, and
+methods as <i>attributes</i>. For instance, attributes can contain bytecode,
+source file names, line number tables, etc.
+<p>
+
+ProGuard's obfuscation step removes attributes that are generally not
+necessary for executing the code. With
+the <a href="usage.html#keepattributes"><code>-keepattributes</code></a>
+option, you can specify a filter for attributes that you do want to keep, for
+instance, if your code accesses them through reflection or if you want to
+preserve some compilation or debugging information. The filter works like
+any <a href="usage.html#filters">filter</a> in ProGuard.
+<p>
+
+The following wildcards are supported:
+
+<table cellspacing="10">
+<tr><td valign="top"><code><b>?</b></code></td>
+ <td>matches any single character in an attribute name.</td></tr>
+<tr><td valign="top"><code><b>*</b></code></td>
+ <td>matches any part of an attribute name.</td></tr>
+</table>
+
+An attribute name that is preceded by an exclamation mark '<b>!</b>' is
+<i>excluded</i> from further attempts to match with <i>subsequent</i>
+attribute names in the filter. Make sure to specify filters correctly, since
+they are not checked for potential typos.
+<p>
+
+For example, the following setting preserves the optional attributes that are
+typically necessary when processing code that is intended to be used as a
+library:
+<pre>
+-keepattributes Exceptions,InnerClasses,Signature,Deprecated,
+ SourceFile,LineNumberTable,*Annotation*,EnclosingMethod
+</pre>
+<p>
+
+The Java bytecode specifications currently specify the following list of
+attributes.
+
+<h3>Optional attributes</h3>
+
+ProGuard's obfuscation step by default discards the following optional
+attributes. You can keep them with
+the <a href="usage.html#keepattributes"><code>-keepattributes</code></a>
+option.
+
+<dl>
+<dt><code><b>SourceFile</b></code></dt>
+<dd>Specifies the name of the source file from which the class file was
+ compiled. If present, this name is reported in stack traces.</dd>
+
+<dt><div>(J++ extension)</div>
+ <code><b>SourceDir</b></code></dt>
+<dd>Specifies the name of the source directory from which the class file was
+ compiled.</dd>
+
+<dt><code><b>InnerClasses</b></code></dt>
+<dd>Specifies the relationship between a class and its inner classes and outer
+ classes. Other than this and the naming convention with a '$' separator
+ between the names of inner classes and outer classes, inner classes are
+ just like ordinary classes. Compilers may need this information to find
+ classes referenced in a compiled library. Code may access this information
+ by reflection, for instance to derive the simple name of the class.</dd>
+
+<dt><div>(Java 5 or higher)</div>
+ <code><b>EnclosingMethod</b></code></dt>
+<dd>Specifies the method in which the class was defined. Compilers may need
+ this information to find classes referenced in a compiled library. Code
+ may access this information by reflection, for instance to derive the
+ simple name of the class.</dd>
+
+<dt><code><b>Deprecated</b></code></dt>
+<dd>Indicates that the class, field, or method is deprecated.</dd>
+
+<dt><code><b>Synthetic</b></code></dt>
+<dd>Indicates that the class, field, or method was generated by the
+ compiler.</dd>
+
+<dt><div>(Java 5 or higher)</div>
+ <code><b>Signature</b></code></dt>
+<dd>Specifies the generic signature of the class, field, or method. Compilers
+ may need this information to properly compile classes that use generic
+ types from compiled libraries. Code may access this signature by
+ reflection.</dd>
+
+<dt><div>(Java 8 or higher)</div>
+ <code><b>MethodParameters</b></code></dt>
+<dd>Specifies the names and access flags of the parameters of the method. Code
+ may access this information by reflection.</dd>
+
+<dt><code><b>Exceptions</b></code></dt>
+<dd>Specifies the exceptions that a method may throw. Compilers may use this
+ information to enforce catching them.</dd>
+
+<dt><code><b>LineNumberTable</b></code></dt>
+<dd>Specifies the line numbers of the method. If present, these line numbers
+ are reported in stack traces.</dd>
+
+<dt><code><b>LocalVariableTable</b></code></dt>
+<dd>Specifies the names and types of local variables of the method. If present,
+ some IDEs may use this information for helping with auto-completion.</dd>
+
+<dt><div>(Java 5 or higher)</div>
+ <code><b>LocalVariableTypeTable</b></code></dt>
+<dd>Specifies the names and generic types of local variables of the method. If
+ present, some IDEs may use this information for helping with
+ auto-completion.</dd>
+
+<dt><div>(Java 5 or higher)</div>
+ <code><b>RuntimeVisibleAnnotations</b></code></dt>
+<dd>Specifies the annotations that are visible at run-time, for classes,
+ fields, and methods. Compilers and annotation processors may use these
+ annotations. Code may access them by reflection.</dd>
+
+<dt><div>(Java 5 or higher)</div>
+ <code><b>RuntimeInvisibleAnnotations</b></code></dt>
+<dd>Specifies the annotations that are visible at compile-time, for classes,
+ fields, and methods. Compilers and annotation processors may use these
+ annotations.</dd>
+
+<dt><div>(Java 5 or higher)</div>
+ <code><b>RuntimeVisibleParameterAnnotations</b></code></dt>
+<dd>Specifies the annotations that are visible at run-time, for method
+ parameters. Compilers and annotation processors may use these
+ annotations. Code may access them by reflection.</dd>
+
+<dt><div>(Java 5 or higher)</div>
+ <code><b>RuntimeInvisibleParameterAnnotations</b></code></dt>
+<dd>Specifies the annotations that are visible at compile-time, for method
+ parameters. Compilers and annotation processors may use these
+ annotations.</dd>
+
+<dt><div>(Java 8 or higher)</div>
+ <code><b>RuntimeVisibleTypeAnnotations</b></code></dt>
+<dd>Specifies the annotations that are visible at run-time, for generic types,
+ instructions, etc. Compilers and annotation processors may use these
+ annotations. Code may access them by reflection.</dd>
+
+<dt><div>(Java 8 or higher)</div>
+ <code><b>RuntimeInvisibleTypeAnnotations</b></code></dt>
+<dd>Specifies the annotations that are visible at compile-time, for generic
+ types, instructions, etc. Compilers and annotation processors may use
+ these annotations.</dd>
+
+<dt><div>(Java 5 or higher)</div>
+ <code><b>AnnotationDefault</b></code></dt>
+<dd>Specifies a default value for an annotation.</dd>
+
+</dl>
+<p>
+
+<h3>Essential attributes</h3>
+
+ProGuard automatically keeps the following essential attributes, processing
+them as necessary. We're listing them for the sake of completeness.
+
+<dl>
+<dt><code><b>ConstantValue</b></code></dt>
+<dd>Specifies a constant integer, float, class, string, etc.</dd>
+
+<dt><code><b>Code</b></code></dt>
+<dd>Specifies the actual bytecode of a method.</dd>
+
+<dt><div>(Java Micro Edition)</div>
+ <code><b>StackMap</b></code></dt>
+<dd>Provides preverification information. The Java Virtual Machine can use
+ this information to speed up the verification step when loading a
+ class.</dd>
+
+<dt><div>(Java 6 or higher)</div>
+ <code><b>StackMapTable</b></code></dt>
+<dd>Provides preverification information. The Java Virtual Machine can use
+ this information to speed up the verification step when loading a
+ class.</dd>
+
+<dt><div>(Java 7 or higher)</div>
+ <code><b>BootstrapMethods</b></code></dt>
+<dd>Specifies the methods to bootstrap dynamic method invocations.</dd>
+
+</dl>
+<p>
+
+<hr />
+<address>
+Copyright &copy; 2002-2014
+<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a> @ <a target="top" href="http://www.saikoa.com/">Saikoa</a>.
+</address>
+</body>
+</html>
diff --git a/docs/manual/examples.html b/docs/manual/examples.html
index 804ae17..dec9613 100644
--- a/docs/manual/examples.html
+++ b/docs/manual/examples.html
@@ -5,19 +5,21 @@
<meta http-equiv="content-style-type" content="text/css">
<link rel="stylesheet" type="text/css" href="style.css">
<title>ProGuard Examples</title>
+</head>
+<body>
+
<script type="text/javascript" language="JavaScript">
<!--
if (window.self==window.top)
- window.top.location.replace("../index.html#"+window.location.pathname+window.location.hash);
-else {
- var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), "");
- if (window.top.location.hash!=hash)
- window.top.location.hash=hash;
-}
+ document.write('<a class="largebutton" target="_top" href="../index.html#manual/examples.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>')
//-->
</script>
-</head>
-<body>
+<noscript>
+<a class="largebutton" target="_top" href="../index.html#manual/examples.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>
+</noscript>
<h2>Examples</h2>
@@ -268,13 +270,16 @@ methods</a>, <a href="#callback">callback methods</a>,
<h3><a name="androidapplication">A complete Android application</a></h3>
-<img class="float" src="attention.gif" width="64" height="64" alt="attention" />
-The Ant and Eclipse build processes of the Android SDK already integrate
-ProGuard by default, with all the proper settings. You only need to enable
-ProGuard (for release builds), by uncommenting the line
-"<code>proguard.config=.....</code>" in the file
-<code>project.properties</code> (created or updated by Android SDK revision 17
-or higher). Notes:
+<img class="float" src="attention.gif" width="64" height="64" alt="attention"
+/> The standard build processes of the Android SDK (with Ant, Gradle, Android
+Studio, and Eclipse) already integrate ProGuard with all the proper settings.
+You only need to enable ProGuard by uncommenting the line
+"<code>proguard.config=.....</code>" in the
+file <code>project.properties</code> (created or updated by Android SDK
+revision 17 or higher) or by adapting your <code>build.gradle</code> file. You
+then <em>don't</em> need any of the configuration below.
+<p>
+Notes:
<ul>
<li>In case of problems, you may want to check if the configuration files that
are listed on this line (<code>proguard-project.txt</code>,...) contain
@@ -296,9 +301,10 @@ For more information, you can consult the official <a target="other"
href="http://developer.android.com/guide/developing/tools/proguard.html">Developer
Guide</a> in the Android SDK.
<p>
-If you're constructing a build process from scratch: these options shrink,
-optimize, and obfuscate all public activities, services, broadcast receivers,
-and content providers from the compiled classes and external libraries:
+If you're constructing a build process <em>from scratch</em>: these options
+shrink, optimize, and obfuscate all public activities, services, broadcast
+receivers, and content providers from the compiled classes and external
+libraries:
<pre>
-injars bin/classes
-injars libs
@@ -338,7 +344,7 @@ and content providers from the compiled classes and external libraries:
}
-keepclassmembers class * implements android.os.Parcelable {
- static android.os.Parcelable$Creator CREATOR;
+ static ** CREATOR;
}
-keepclassmembers class **.R$* {
@@ -434,11 +440,11 @@ used as such, for developing code based on its public API.
java.lang.Class class$(java.lang.String, boolean);
}
--keepclasseswithmembernames class * {
+-keepclasseswithmembernames,includedescriptorclasses class * {
native &lt;methods&gt;;
}
--keepclassmembers enum * {
+-keepclassmembers,allowoptimization enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
@@ -745,15 +751,19 @@ you'll want to preserve their names and their classes' names, so they can
still be linked to the native library. The following additional option will
ensure that:
<pre>
--keepclasseswithmembernames class * {
+-keepclasseswithmembernames,includedescriptorclasses class * {
native &lt;methods&gt;;
}
</pre>
<p>
-Note the use of <a
-href="usage.html#keepclasseswithmembernames"><code>-keepclasseswithmembernames</code></a>.
+Note the use of
+<a href="usage.html#keepclasseswithmembernames"><code>-keepclasseswithmembernames</code></a>.
We don't want to preserve all classes or all native methods; we just want to
-keep the relevant names from being obfuscated.
+keep the relevant names from being obfuscated. The modifier
+<a href="usage.html#includedescriptorclasses">includedescriptorclasses</a>
+additionally makes sure that the return types and parameter types aren't
+renamed either, so the entire signatures remain compatible with the native
+libraries.
<p>
ProGuard doesn't look at your native code, so it won't automatically preserve
the classes or class members that are invoked by the native code. These are
@@ -787,7 +797,7 @@ that just grand? Introspection is the self-modifying code of a new
generation). You have to specify these explicitly, to make sure they aren't
removed or obfuscated:
<pre>
--keepclassmembers enum * {
+-keepclassmembers,allowoptimization enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
@@ -857,9 +867,9 @@ may require special attention:
is then computed from a list of features the serializable class. Changing
the class ever so slightly may change the computed serial version UID. The
list of features is specified in the section on <a
- href="http://java.sun.com/javase/6/docs/platform/serialization/spec/class.html#4100">Stream
+ href="http://docs.oracle.com/javase/8/docs/platform/serialization/spec/class.html#a4100">Stream
Unique Identifiers</a> of Sun's <a
- href="http://java.sun.com/javase/6/docs/platform/serialization/spec/serialTOC.html">Java
+ href="http://docs.oracle.com/javase/8/docs/platform/serialization/spec/serialTOC.html">Java
Object Serialization Specification</a>. The following directives should at
least partially ensure compatibility with the original classes:
@@ -887,6 +897,26 @@ may require special attention:
computing the UID. A fast but sub-optimal alternative would be simply
keeping all interfaces with "<code>-keep interface *</code>".</li>
+<li>In the rare event that you are serializing lambda expressions in Java 8 or
+ higher, you need to preserve some methods and adapt the hard-coded names
+ of the classes in which they occur:
+
+<pre>
+-keepclassmembers class * {
+ private static synthetic java.lang.Object $deserializeLambda$(java.lang.invoke.SerializedLambda);
+}
+
+-keepclassmembernames class * {
+ private static synthetic *** lambda$*(...);
+}
+
+-adaptclassstrings com.example.Test
+</pre>
+<p>
+
+ This should satisfy the reflection in the deserialization code of the
+ Java run-time.
+
</ul>
<p>
@@ -1582,10 +1612,9 @@ The directory <code>examples/annotations</code> contains more examples that
illustrate some of the possibilities.
<hr />
-<noscript><div><a target="_top" href="../index.html" class="button">Show menu</a></div></noscript>
<address>
-Copyright &copy; 2002-2013
-<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>.
+Copyright &copy; 2002-2014
+<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a> @ <a target="top" href="http://www.saikoa.com/">Saikoa</a>.
</address>
</body>
</html>
diff --git a/docs/manual/gradle.html b/docs/manual/gradle.html
index 3e0e500..35ab845 100644
--- a/docs/manual/gradle.html
+++ b/docs/manual/gradle.html
@@ -5,25 +5,26 @@
<meta http-equiv="content-style-type" content="text/css">
<link rel="stylesheet" type="text/css" href="style.css">
<title>Gradle Task</title>
+</head>
+<body>
+
<script type="text/javascript" language="JavaScript">
<!--
-if (window.self==window.top) {
- history.go(-1);
- window.top.location.replace("../index.html#"+window.location.pathname+window.location.hash);
-} else {
- var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), "");
- if (window.top.location.hash!=hash)
- window.top.location.hash=hash;
-}
+if (window.self==window.top)
+ document.write('<a class="largebutton" target="_top" href="../index.html#manual/gradle.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>')
//-->
</script>
-</head>
-<body>
+<noscript>
+<a class="largebutton" target="_top" href="../index.html#manual/gradle.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>
+</noscript>
<h2>Gradle Task</h2>
<b>ProGuard</b> can be run as a task in the Java-based build tool Gradle
-(version 1.3 or higher).
+(version 2.1 or higher).
<p>
Before you can use the <code>proguard</code> task, you have to make sure
@@ -37,7 +38,7 @@ buildscript {
flatDir dirs: '/usr/local/java/proguard/lib'
}
dependencies {
- classpath ':proguard'
+ classpath ':proguard:'
}
}
</pre>
@@ -85,19 +86,21 @@ The ProGuard task supports the following settings in its closure:
<dt><a href="usage.html#injars"><code><b>injars</b></code></a>
<a href="#classpath"><i>class_path</i></a></dt>
-<dd>Specifies the program jars (or wars, ears, zips, or directories). The files
- are resolved and read lazily, during the execution phase.</dd>
+<dd>Specifies the program jars (or aars, wars, ears, zips, apks, or
+ directories). The files are resolved and read lazily, during the execution
+ phase.</dd>
<dt><a href="usage.html#outjars"><code><b>outjars</b></code></a>
<a href="#classpath"><i>class_path</i></a></dt>
-<dd>Specifies the names of the output jars (or wars, ears, zips, or
+<dd>Specifies the names of the output jars (or aars, wars, ears, zips, apks, or
directories). The files are resolved and written lazily, during the
execution phase.</dd>
<dt><a href="usage.html#libraryjars"><code><b>libraryjars</b></code></a>
<a href="#classpath"><i>class_path</i></a></dt>
-<dd>Specifies the library jars (or wars, ears, zips, or directories). The files
- are resolved and read lazily, during the execution phase.</dd>
+<dd>Specifies the library jars (or aars, wars, ears, zips, apks, or
+ directories). The files are resolved and read lazily, during the execution
+ phase.</dd>
<dt><a href="usage.html#skipnonpubliclibraryclasses"><code><b>skipnonpubliclibraryclasses</b></code></a></dt>
<dd>Ignore non-public library classes.</dd>
@@ -107,8 +110,8 @@ The ProGuard task supports the following settings in its closure:
<dt><a href="usage.html#keepdirectories"><code><b>keepdirectories</b></code></a>
['<a href="usage.html#filefilters"><i>directory_filter</i></a>']</dt>
-<dd>Keep the specified directories in the output jars (or wars, ears, zips,
- or directories).</dd>
+<dd>Keep the specified directories in the output jars (or aars, wars, ears,
+ zips, apks, or directories).</dd>
<dt><a href="usage.html#target"><code><b>target</b></code></a>
'<i>version</i>'</dt>
@@ -317,10 +320,18 @@ comma-separated named arguments after the file:
<dd>An optional filter for all class file names and resource file names that
are encountered.</dd>
+<dt><code><b>apkfilter:</b></code>
+ '<a href="usage.html#filefilters"><i>file_filter</i></a>'</dt>
+<dd>An optional filter for all apk names that are encountered.</dd>
+
<dt><code><b>jarfilter:</b></code>
'<a href="usage.html#filefilters"><i>file_filter</i></a>'</dt>
<dd>An optional filter for all jar names that are encountered.</dd>
+<dt><code><b>aarfilter:</b></code>
+ '<a href="usage.html#filefilters"><i>file_filter</i></a>'</dt>
+<dd>An optional filter for all aar names that are encountered.</dd>
+
<dt><code><b>warfilter:</b></code>
'<a href="usage.html#filefilters"><i>file_filter</i></a>'</dt>
<dd>An optional filter for all war names that are encountered.</dd>
@@ -357,6 +368,12 @@ behaviors:
<dl>
+<dt><a href="usage.html#includedescriptorclasses"><code><b>includedescriptorclasses:</b></code></a>
+ <i>boolean</i>
+ (default = false)</dt>
+<dd>Specifies whether the classes of the fields and methods specified in the
+ keep tag must be kept as well.</dd>
+
<dt><a href="usage.html#allowshrinking"><code><b>allowshrinking:</b></code></a>
<i>boolean</i>
(default = false)</dt>
@@ -448,7 +465,7 @@ The named arguments are optional. Without any arguments, there are no
constraints, so the settings match all classes.
<p>
-<h3><a name="cl">Gradle-style Class Member Specifications</h3>
+<h3><a name="classmemberspecification">Gradle-style Class Member Specifications</a></h3>
The closure of a Gradle-style class specification can specify class members
with these settings:
@@ -536,10 +553,9 @@ task proguard << {
<p>
<hr />
-<noscript><div><a target="_top" href="../index.html" class="button">Show menu</a></div></noscript>
<address>
-Copyright &copy; 2002-2013
-<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>.
+Copyright &copy; 2002-2014
+<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a> @ <a target="top" href="http://www.saikoa.com/">Saikoa</a>.
</address>
</body>
</html>
diff --git a/docs/manual/gui.html b/docs/manual/gui.html
index 6677aaf..176295e 100644
--- a/docs/manual/gui.html
+++ b/docs/manual/gui.html
@@ -5,19 +5,21 @@
<meta http-equiv="content-style-type" content="text/css">
<link rel="stylesheet" type="text/css" href="style.css">
<title>ProGuard GUI</title>
+</head>
+<body>
+
<script type="text/javascript" language="JavaScript">
<!--
if (window.self==window.top)
- window.top.location.replace("../index.html#"+window.location.pathname+window.location.hash);
-else {
- var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), "");
- if (window.top.location.hash!=hash)
- window.top.location.hash=hash;
-}
+ document.write('<a class="largebutton" target="_top" href="../index.html#manual/gui.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>')
//-->
</script>
-</head>
-<body>
+<noscript>
+<a class="largebutton" target="_top" href="../index.html#manual/gui.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>
+</noscript>
<h2>Graphical User Interface</h2>
@@ -90,8 +92,8 @@ creating a new configuration from scratch.
<h2><a name="inputoutput">The Input/Output Tab</a></h2>
The <i>Input/Output</i> tab contains two lists, respectively to specify the
-program jars (or wars, ears, zips, or directories), and the library jars (or
-wars, ears, zips, or directories).
+program jars (or aars, wars, ears, zips, apks, or directories), and the
+library jars (or aars, wars, ears, zips, apks, or directories).
<ul>
<li>The list of program jars contains input entries and output entries. Input
@@ -140,11 +142,12 @@ right-hand side:
</table>
<p>
-Filters allow to filter files based on their names. One can specify filters
-for class file names and resource file names, for jar file names, for war file
-names, for ear file names, and for zip file names. Multiple entries in the
-program list only make sense when combined with filters; each output file is
-written to the first entry with a matching filter.
+Filters allow to filter files based on their names. You can specify filters
+for class file names and resource file names, for jar file names, for aar file
+names, for war file names, for ear file names, for zip file names, and for
+apk file names. Multiple entries in the program list only make sense when
+combined with filters; each output file is written to the first entry with a
+matching filter.
<p>
Input entries that are currently not readable are colored red.
@@ -472,10 +475,9 @@ There are two buttons at the bottom:
</table>
<hr />
-<noscript><div><a target="_top" href="../index.html" class="button">Show menu</a></div></noscript>
<address>
-Copyright &copy; 2002-2013
-<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>.
+Copyright &copy; 2002-2014
+<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a> @ <a target="top" href="http://www.saikoa.com/">Saikoa</a>.
</address>
</body>
</html>
diff --git a/docs/manual/index.html b/docs/manual/index.html
index 643a216..da93361 100644
--- a/docs/manual/index.html
+++ b/docs/manual/index.html
@@ -5,17 +5,6 @@
<meta http-equiv="content-style-type" content="text/css">
<link rel="stylesheet" type="text/css" href="style.css">
<title>ProGuard Manual</title>
-<script type="text/javascript" language="JavaScript">
-<!--
-if (window.self==window.top)
- window.top.location.replace("../index.html#"+window.location.pathname+window.location.hash);
-else {
- var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), "");
- if (window.top.location.hash!=hash)
- window.top.location.hash=hash;
-}
-//-->
-</script>
</head>
<body>
@@ -45,8 +34,8 @@ else {
<hr />
<noscript><div><a target="_top" href="../index.html" class="button">Show menu</a></div></noscript>
<address>
-Copyright &copy; 2002-2013
-<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>.
+Copyright &copy; 2002-2014
+<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a> @ <a target="top" href="http://www.saikoa.com/">Saikoa</a>.
</address>
</body>
</html>
diff --git a/docs/manual/introduction.html b/docs/manual/introduction.html
index 3f18114..3b1fc29 100644
--- a/docs/manual/introduction.html
+++ b/docs/manual/introduction.html
@@ -5,19 +5,21 @@
<meta http-equiv="content-style-type" content="text/css">
<link rel="stylesheet" type="text/css" href="style.css">
<title>ProGuard Introduction</title>
+</head>
+<body>
+
<script type="text/javascript" language="JavaScript">
<!--
if (window.self==window.top)
- window.top.location.replace("../index.html#"+window.location.pathname+window.location.hash);
-else {
- var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), "");
- if (window.top.location.hash!=hash)
- window.top.location.hash=hash;
-}
+ document.write('<a class="largebutton" target="_top" href="../index.html#manual/introduction.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>')
//-->
</script>
-</head>
-<body>
+<noscript>
+<a class="largebutton" target="_top" href="../index.html#manual/introduction.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>
+</noscript>
<h2>Introduction</h2>
@@ -72,15 +74,15 @@ efficient use in Java 6.
</table>
<p>
-ProGuard first reads the <b>input jars</b> (or wars, ears, zips, or
-directories). It then subsequently shrinks, optimizes, obfuscates, and
+ProGuard first reads the <b>input jars</b> (or aars, wars, ears, zips, apks,
+or directories). It then subsequently shrinks, optimizes, obfuscates, and
preverifies them. You can optionally let ProGuard perform multiple
optimization passes. ProGuard writes the processed results to one or
-more <b>output jars</b> (or wars, ears, zips, or directories). The input may
-contain resource files, whose names and contents can optionally be updated to
-reflect the obfuscated class names.
+more <b>output jars</b> (or aars, wars, ears, zips, apks, or directories). The
+input may contain resource files, whose names and contents can optionally be
+updated to reflect the obfuscated class names.
<p>
-ProGuard requires the <b>library jars</b> (or wars, ears, zips, or
+ProGuard requires the <b>library jars</b> (or aars, wars, ears, zips, apks, or
directories) of the input jars to be specified. These are essentially the
libraries that you would need for compiling the code. ProGuard uses them to
reconstruct the class dependencies that are necessary for proper processing.
@@ -163,10 +165,9 @@ may require trial and error, especially without the necessary information
about the internals of the code.
<hr />
-<noscript><div><a target="_top" href="../index.html" class="button">Show menu</a></div></noscript>
<address>
-Copyright &copy; 2002-2013
-<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>.
+Copyright &copy; 2002-2014
+<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a> @ <a target="top" href="http://www.saikoa.com/">Saikoa</a>.
</address>
</body>
</html>
diff --git a/docs/manual/limitations.html b/docs/manual/limitations.html
index 6b69410..883d6e6 100644
--- a/docs/manual/limitations.html
+++ b/docs/manual/limitations.html
@@ -5,19 +5,21 @@
<meta http-equiv="content-style-type" content="text/css">
<link rel="stylesheet" type="text/css" href="style.css">
<title>ProGuard Limitations</title>
+</head>
+<body>
+
<script type="text/javascript" language="JavaScript">
<!--
if (window.self==window.top)
- window.top.location.replace("../index.html#"+window.location.pathname+window.location.hash);
-else {
- var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), "");
- if (window.top.location.hash!=hash)
- window.top.location.hash=hash;
-}
+ document.write('<a class="largebutton" target="_top" href="../index.html#manual/limitations.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>')
//-->
</script>
-</head>
-<body>
+<noscript>
+<a class="largebutton" target="_top" href="../index.html#manual/limitations.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>
+</noscript>
<h2>Limitations</h2>
@@ -60,10 +62,9 @@ which are easily avoided or resolved:
</ul>
<hr />
-<noscript><div><a target="_top" href="../index.html" class="button">Show menu</a></div></noscript>
<address>
-Copyright &copy; 2002-2013
-<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>.
+Copyright &copy; 2002-2014
+<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a> @ <a target="top" href="http://www.saikoa.com/">Saikoa</a>.
</address>
</body>
</html>
diff --git a/docs/manual/optimizations.html b/docs/manual/optimizations.html
index e4c96b6..4bb18c3 100644
--- a/docs/manual/optimizations.html
+++ b/docs/manual/optimizations.html
@@ -5,19 +5,21 @@
<meta http-equiv="content-style-type" content="text/css">
<link rel="stylesheet" type="text/css" href="style.css">
<title>Optimizations</title>
+</head>
+<body>
+
<script type="text/javascript" language="JavaScript">
<!--
if (window.self==window.top)
- window.top.location.replace("../index.html#"+window.location.pathname+window.location.hash);
-else {
- var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), "");
- if (window.top.location.hash!=hash)
- window.top.location.hash=hash;
-}
+ document.write('<a class="largebutton" target="_top" href="../index.html#manual/optimizations.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>')
//-->
</script>
-</head>
-<body>
+<noscript>
+<a class="largebutton" target="_top" href="../index.html#manual/optimizations.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>
+</noscript>
<h2>Optimizations</h2>
@@ -66,6 +68,9 @@ are added and reorganized.
<dt><code><b>class/marking/final</b></code></dt>
<dd>Marks classes as final, whenever possible.</dd>
+<dt><code><b>class/unboxing/enum</b></code></dt>
+<dd>Simplifies enum types to integer constants, whenever possible.</dd>
+
<dt><code><b>class/merging/vertical</b></code></dt>
<dd>Merges classes vertically in the class hierarchy, whenever possible.</dd>
@@ -189,10 +194,9 @@ can be set as JVM arguments (with <code>-D.....)</code>:
</dl>
<hr />
-<noscript><div><a target="_top" href="../index.html" class="button">Show menu</a></div></noscript>
<address>
-Copyright &copy; 2002-2013
-<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>.
+Copyright &copy; 2002-2014
+<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a> @ <a target="top" href="http://www.saikoa.com/">Saikoa</a>.
</address>
</body>
</html>
diff --git a/docs/manual/refcard.html b/docs/manual/refcard.html
index d9301bd..87ffe09 100644
--- a/docs/manual/refcard.html
+++ b/docs/manual/refcard.html
@@ -5,19 +5,21 @@
<meta http-equiv="content-style-type" content="text/css">
<link rel="stylesheet" type="text/css" href="style.css">
<title>ProGuard Reference Card</title>
+</head>
+<body>
+
<script type="text/javascript" language="JavaScript">
<!--
if (window.self==window.top)
- window.top.location.replace("../index.html#"+window.location.pathname+window.location.hash);
-else {
- var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), "");
- if (window.top.location.hash!=hash)
- window.top.location.hash=hash;
-}
+ document.write('<a class="largebutton" target="_top" href="../index.html#manual/refcard.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>')
//-->
</script>
-</head>
-<body>
+<noscript>
+<a class="largebutton" target="_top" href="../index.html#manual/refcard.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>
+</noscript>
<h1>ProGuard Reference Card</h1>
@@ -427,18 +429,23 @@ Notes:
<table cellspacing="10">
<tr>
+<td valign="top"><a href="usage.html#includedescriptorclasses"><code><b>includedescriptorclasses</b></code></a></td>
+<td>Also keep any classes in the descriptors of specified fields and methods.
+</tr>
+
<td valign="top"><a href="usage.html#allowshrinking"><code><b>allowshrinking</b></code></a></td>
-<td>The entry points specified in the keep tag may be shrunk.</td>
+<td>Allow the specified entry points to be removed in the shrinking step.</td>
</tr>
<tr>
<td valign="top"><a href="usage.html#allowoptimization"><code><b>allowoptimization</b></code></a></td>
-<td>The entry points specified in the keep tag may be optimized.</td>
+<td>Allow the specified entry points to be modified in the optimization
+ step.</td>
</tr>
<tr>
<td valign="top"><a href="usage.html#allowobfuscation"><code><b>allowobfuscation</b></code></a></td>
-<td>The entry points specified in the keep tag may be obfuscated.</td>
+<td>Allow the specified entry points to be renamed in the obfuscation step.</td>
</tr>
</table>
@@ -477,10 +484,9 @@ Notes:
</ul>
<hr />
-<noscript><div><a target="_top" href="../index.html" class="button">Show menu</a></div></noscript>
<address>
-Copyright &copy; 2002-2013
-<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>.
+Copyright &copy; 2002-2014
+<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a> @ <a target="top" href="http://www.saikoa.com/">Saikoa</a>.
</address>
</body>
</html>
diff --git a/docs/manual/retrace/examples.html b/docs/manual/retrace/examples.html
index 2137e3a..4eef0ff 100644
--- a/docs/manual/retrace/examples.html
+++ b/docs/manual/retrace/examples.html
@@ -5,19 +5,21 @@
<meta http-equiv="content-style-type" content="text/css">
<link rel="stylesheet" type="text/css" href="../style.css">
<title>ReTrace Examples</title>
+</head>
+<body>
+
<script type="text/javascript" language="JavaScript">
<!--
if (window.self==window.top)
- window.top.location.replace("../../index.html#"+window.location.pathname+window.location.hash);
-else {
- var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), "");
- if (window.top.location.hash!=hash)
- window.top.location.hash=hash;
-}
+ document.write('<a class="largebutton" target="_top" href="../../index.html#manual/retrace/examples.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>')
//-->
</script>
-</head>
-<body>
+<noscript>
+<a class="largebutton" target="_top" href="../../index.html#manual/retrace/examples.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>
+</noscript>
<h2>Examples</h2>
@@ -335,10 +337,9 @@ Exception in thread "main" java.lang.Error: Random exception
</pre>
<hr />
-<noscript><div><a target="_top" href="../../index.html" class="button">Show menu</a></div></noscript>
<address>
-Copyright &copy; 2002-2013
-<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>.
+Copyright &copy; 2002-2014
+<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a> @ <a target="top" href="http://www.saikoa.com/">Saikoa</a>.
</address>
</body>
</html>
diff --git a/docs/manual/retrace/index.html b/docs/manual/retrace/index.html
index 47209df..26ce11f 100644
--- a/docs/manual/retrace/index.html
+++ b/docs/manual/retrace/index.html
@@ -5,17 +5,6 @@
<meta http-equiv="content-style-type" content="text/css">
<link rel="stylesheet" type="text/css" href="../style.css">
<title>ReTrace Manual</title>
-<script type="text/javascript" language="JavaScript">
-<!--
-if (window.self==window.top)
- window.top.location.replace("../../index.html#"+window.location.pathname+window.location.hash);
-else {
- var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), "");
- if (window.top.location.hash!=hash)
- window.top.location.hash=hash;
-}
-//-->
-</script>
</head>
<body>
@@ -30,8 +19,8 @@ else {
<hr />
<noscript><div><a target="_top" href="../../index.html" class="button">Show menu</a></div></noscript>
<address>
-Copyright &copy; 2002-2013
-<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>.
+Copyright &copy; 2002-2014
+<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a> @ <a target="top" href="http://www.saikoa.com/">Saikoa</a>.
</address>
</body>
</html>
diff --git a/docs/manual/retrace/introduction.html b/docs/manual/retrace/introduction.html
index 381ad1f..9c514a7 100644
--- a/docs/manual/retrace/introduction.html
+++ b/docs/manual/retrace/introduction.html
@@ -5,19 +5,21 @@
<meta http-equiv="content-style-type" content="text/css">
<link rel="stylesheet" type="text/css" href="../style.css">
<title>ReTrace Introduction</title>
+</head>
+<body>
+
<script type="text/javascript" language="JavaScript">
<!--
if (window.self==window.top)
- window.top.location.replace("../../index.html#"+window.location.pathname+window.location.hash);
-else {
- var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), "");
- if (window.top.location.hash!=hash)
- window.top.location.hash=hash;
-}
+ document.write('<a class="largebutton" target="_top" href="../../index.html#manual/retrace/introduction.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>')
//-->
</script>
-</head>
-<body>
+<noscript>
+<a class="largebutton" target="_top" href="../../index.html#manual/retrace/introduction.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>
+</noscript>
<h2>Introduction</h2>
@@ -69,10 +71,9 @@ that ProGuard can write out during obfuscation. The mapping file links the
original class names and class member names to their obfuscated names.
<hr />
-<noscript><div><a target="_top" href="../../index.html" class="button">Show menu</a></div></noscript>
<address>
-Copyright &copy; 2002-2013
-<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>.
+Copyright &copy; 2002-2014
+<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a> @ <a target="top" href="http://www.saikoa.com/">Saikoa</a>.
</address>
</body>
</html>
diff --git a/docs/manual/retrace/usage.html b/docs/manual/retrace/usage.html
index 6e7f6a8..6964277 100644
--- a/docs/manual/retrace/usage.html
+++ b/docs/manual/retrace/usage.html
@@ -5,19 +5,21 @@
<meta http-equiv="content-style-type" content="text/css">
<link rel="stylesheet" type="text/css" href="../style.css">
<title>ReTrace Usage</title>
+</head>
+<body>
+
<script type="text/javascript" language="JavaScript">
<!--
if (window.self==window.top)
- window.top.location.replace("../../index.html#"+window.location.pathname+window.location.hash);
-else {
- var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), "");
- if (window.top.location.hash!=hash)
- window.top.location.hash=hash;
-}
+ document.write('<a class="largebutton" target="_top" href="../../index.html#manual/retrace/usage.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>')
//-->
</script>
-</head>
-<body>
+<noscript>
+<a class="largebutton" target="_top" href="../../index.html#manual/retrace/usage.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>
+</noscript>
<h2>Usage</h2>
@@ -60,7 +62,7 @@ The following options are supported:
de-obfuscate more general types of input than just stack traces. The
default is suitable for stack traces produced by most JVMs:
<pre>
- (?:.*?\bat\s+%c.%m\s*\(.*?(?::%l)?\)\s*)|(?:(?:.*?[:"]\s+)?%c(?::.*)?)
+ (?:.*?\bat\s+%c\.%m\s*\(.*?(?::%l)?\)\s*)|(?:(?:.*?[:"]\s+)?%c(?::.*)?)
</pre>
The regular expression is a Java regular expression (cfr. the documentation
of <code>java.util.regex.Pattern</code>), with a few additional wildcards:
@@ -118,10 +120,9 @@ Unobfuscated elements and obfuscated elements for which no mapping is available
will be left unchanged.
<hr />
-<noscript><div><a target="_top" href="../../index.html" class="button">Show menu</a></div></noscript>
<address>
-Copyright &copy; 2002-2013
-<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>.
+Copyright &copy; 2002-2014
+<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a> @ <a target="top" href="http://www.saikoa.com/">Saikoa</a>.
</address>
</body>
</html>
diff --git a/docs/manual/style.css b/docs/manual/style.css
index 8dae87d..6a59990 100644
--- a/docs/manual/style.css
+++ b/docs/manual/style.css
@@ -69,6 +69,16 @@ a.button
float: right;
}
+a.largebutton {
+ font-weight: bold;
+ color: #000000;
+ margin: 0px;
+ padding: 10px;
+ background: #D0D0D0;
+ text-decoration: none;
+ border: 1px outset #FFFFFF;
+}
+
/* Settings for variable width code. */
p.code
diff --git a/docs/manual/troubleshooting.html b/docs/manual/troubleshooting.html
index 964a25e..90ed2ab 100644
--- a/docs/manual/troubleshooting.html
+++ b/docs/manual/troubleshooting.html
@@ -5,19 +5,21 @@
<meta http-equiv="content-style-type" content="text/css">
<link rel="stylesheet" type="text/css" href="style.css">
<title>ProGuard Troubleshooting</title>
+</head>
+<body>
+
<script type="text/javascript" language="JavaScript">
<!--
if (window.self==window.top)
- window.top.location.replace("../index.html#"+window.location.pathname+window.location.hash);
-else {
- var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), "");
- if (window.top.location.hash!=hash)
- window.top.location.hash=hash;
-}
+ 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>')
//-->
</script>
-</head>
-<body>
+<noscript>
+<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>
+</noscript>
<h2>Troubleshooting</h2>
@@ -29,9 +31,12 @@ few problems. The following sections discuss some common issues and solutions:
<li><a href="#dynamicalclass">Note: can't find dynamically referenced class ...</a></li>
<li><a href="#dynamicalclasscast">Note: ... calls '(...)Class.forName(variable).newInstance()'</a></li>
<li><a href="#dynamicalclassmember">Note: ... accesses a field/method '...' dynamically</a></li>
+<li><a href="#attributes">Note: ... calls 'Class.get...', 'Field.get...', or 'Method.get...'</a></li>
<li><a href="#unknownclass">Note: the configuration refers to the unknown class '...'</a></li>
<li><a href="#descriptorclass">Note: the configuration keeps the entry point '...', but not the descriptor class '...'</a></li>
+<li><a href="#libraryclass">Note: the configuration explicitly specifies '...' to keep library class '...'</a></li>
<li><a href="#classmembers">Note: the configuration doesn't specify which class members to keep for class '...'</a></li>
+<li><a href="#nosideeffects">Note: the configuration specifies that none of the methods of class '...' have any side effects</a></li>
<li><a href="#duplicateclass">Note: duplicate definition of program/library class</a></li>
<li><a href="#duplicatezipentry">Warning: can't write resource ... Duplicate zip entry</a></li>
<li><a href="#unresolvedclass">Warning: can't find superclass or interface</a></li>
@@ -96,6 +101,7 @@ few problems. The following sections discuss some common issues and solutions:
<li><a href="#securityexception">SecurityException: SHA1 digest error</a></li>
<li><a href="#classcastexception">ClassCastException: class not an enum</a></li><li><a href="#classcastexception">IllegalArgumentException: class not an enum type</a></li>
<li><a href="#arraystoreexception">ArrayStoreException: sun.reflect.annotation.EnumConstantNotPresentExceptionProxy</a></li>
+<li><a href="#illegalargumentexception">IllegalArgumentException: methods with same signature but incompatible return types</a></li>
<li><a href="#compilererror">CompilerError: duplicate addition</a></li>
<li><a href="#classformaterror1">ClassFormatError: repetitive field name/signature</a></li>
<li><a href="#classformaterror2">ClassFormatError: Invalid index in LocalVariableTable in class file</a></li>
@@ -117,25 +123,38 @@ ProGuard may print out some notes and non-fatal warnings:
<dt><a name="dynamicalclasscast"><b>Note: ... calls '(...)Class.forName(variable).newInstance()'</b></a></dt>
-<dd>ProGuard lists all class casts of dynamically created class instances,
- like "<code>(MyClass)Class.forName(variable).newInstance()</code>".
- Depending on your application, you may need to keep the mentioned classes
- with an option like "<code>-keep class MyClass</code>", or their
- implementations with an option like "<code>-keep class * implements
- MyClass</code>". You can switch off these notes by specifying the
+<dd>Your code uses reflection to dynamically create class instances, with a
+ construct like
+ "<code>(MyClass)Class.forName(variable).newInstance()</code>". Depending
+ on your application, you may need to keep the mentioned classes with an
+ option like "<code>-keep class MyClass</code>", or their implementations
+ with an option like "<code>-keep class * implements MyClass</code>". You
+ can switch off these notes by specifying the
<a href="usage.html#dontnote"><code>-dontnote</code></a> option.</dd>
<dt><a name="dynamicalclassmember"><b>Note: ... accesses a field/method '...' dynamically</b></a></dt>
-<dd>ProGuard lists a number of constructs like
- "<code>.getField("myField")</code>". Depending on your application, you
- may need to figure out where the mentioned class members are defined and
- keep them with an option like "<code>-keep class MyClass { MyFieldType
+<dd>Your code uses reflection to find a fields or a method, with a construct
+ like "<code>.getField("myField")</code>". Depending on your application,
+ you may need to figure out where the mentioned class members are defined
+ and keep them with an option like "<code>-keep class MyClass { MyFieldType
myField; }</code>". Otherwise, ProGuard might remove or obfuscate the
class members, since it can't know which ones they are exactly. It does
list possible candidates, for your information. You can switch off these
- notes by specifying the <a
- href="usage.html#dontnote"><code>-dontnote</code></a> option.</dd>
+ notes by specifying
+ the <a href="usage.html#dontnote"><code>-dontnote</code></a> option.</dd>
+
+<dt><a name="attributes"><b>Note: ... calls 'Class.get...'</b>, <b>'Field.get...'</b>, or <b>'Method.get...'</b></a></dt>
+<dd>Your code uses reflection to access metadata from the code, with an
+ invocation like "<code>class.getAnnotations()</code>". You then generally
+ need to preserve optional <a href="attributes.html">class file
+ attributes</a>, which ProGuard removes by default. The attributes contain
+ information about annotations, enclosing classes, enclosing methods, etc.
+ In a summary in the log, ProGuard provides a suggested configuration,
+ like <a href="usage.html#keepattributes"><code>-keepattributes
+ *Annotation*</code></a>. If you're sure the attributes are not necessary,
+ you can switch off these notes by specifying
+ the <a href="usage.html#dontnote"><code>-dontnote</code></a> option.</dd>
<dt><a name="unknownclass"><b>Note: the configuration refers to the unknown class '...'</b></a></dt>
@@ -152,13 +171,25 @@ ProGuard may print out some notes and non-fatal warnings:
You may then want to keep the class too. Otherwise, ProGuard will
obfuscate its name, thus changing the method's signature. The method might
then become unfindable as an entry point, e.g. if it is part of a public
- API. You can switch off these notes by specifying the <a
- href="usage.html#dontnote"><code>-dontnote</code></a> option.</dd>
+ API. You can automatically keep such descriptor classes with
+ the <code>-keep</code> option modifier
+ <a href="usage.html#includedescriptorclasses"><code>includedescriptorclasses</code></a>
+ (<code>-keep,includedescriptorclasses</code> ...). You can switch off
+ these notes by specifying
+ the <a href="usage.html#dontnote"><code>-dontnote</code></a> option.</dd>
+
+<dt><a name="libraryclass"><b>Note: the configuration explicitly specifies '...' to keep library class '...'</b></a></dt>
+
+<dd>Your configuration contains a <code>-keep</code> option to preserve the
+ given library class. However, you don't need to keep any library classes.
+ ProGuard always leaves underlying libraries unchanged. You can switch off
+ these notes by specifying the
+ <a href="usage.html#dontnote"><code>-dontnote</code></a> option.</dd>
<dt><a name="classmembers"><b>Note: the configuration doesn't specify which class members to keep for class '...'</b></a></dt>
-<dd>Your configuration contains
- a <a href="usage.html#keepclassmembers"><code>-keepclassmembers</code></a>/<a href="usage.html#keepclasseswithmembers">-keepclasseswithmembers</code></a>
+<dd>Your configuration contains a
+ <a href="usage.html#keepclassmembers"><code>-keepclassmembers</code></a>/<a href="usage.html#keepclasseswithmembers"><code>-keepclasseswithmembers</code></a>
option to preserve fields or methods in the given class, but it doesn't
specify which fields or methods. This way, the option simply won't have
any effect. You probably want to specify one or more fields or methods, as
@@ -170,6 +201,19 @@ ProGuard may print out some notes and non-fatal warnings:
options</a> can help. You can switch off these notes by specifying
the <a href="usage.html#dontnote"><code>-dontnote</code></a> option.</dd>
+<dt><a name="nosideeffects"><b>Note: the configuration specifies that none of the methods of class '...' have any side effects</b></a></dt>
+
+<dd>Your configuration contains an option
+ <a href="usage.html#assumenosideeffects"><code>-assumenosideeffects</code></a>
+ to indicate that the specified methods don't have any side effects.
+ However, the configuration tries to match <i>all</i> methods, by using a
+ wildcard like "<code>*;</code>". This includes methods
+ from <code>java.lang.Object</code>, such as <code>wait()</code> and
+ <code>notify()</code>. Removing invocations of those methods will most
+ likely break your application. You should list the methods without side
+ effects more conservatively. You can switch off these notes by specifying
+ the <a href="usage.html#dontnote"><code>-dontnote</code></a> option.</dd>
+
<dt><a name="duplicateclass"><b>Note: duplicate definition of program/library class</b></a></dt>
<dd>Your program jars or library jars contain multiple definitions of the
@@ -277,7 +321,15 @@ some more serious warnings:
referring to <code>java.awt</code>. This is a bit shady, since Android
doesn't have this package at all, but if your application works anyway,
you can let ProGuard accept it with "<code>-dontwarn java.awt.**</code>",
- for instance.</dd>
+ for instance.
+ <p>
+ If the missing class is an Android run-time class, you should make sure
+ that you are building against an Android run-time that is sufficiently
+ recent. You may need to change the build target in your
+ <code>project.properties</code> file or <code>build.gradle</code> file to
+ that recent version. You can still specify a different
+ <code>minSdkVersion</code> and a different <code>targetSdkVersion</code>
+ in your <code>AndroidManifest.xml</code> file.</dd>
<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>
@@ -478,12 +530,22 @@ Should ProGuard crash while processing your application:
<dl>
<dt><a name="outofmemoryerror"><b>OutOfMemoryError</b></a></dt>
-<dd>You can try increasing the heap size of the Java virtual machine (with the
- usual <code>-Xms</code> and <code>-Xmx</code> options). You can also
- reduce the amount of memory that ProGuard needs by removing unnecessary
- library jars from your configuration, or by filtering out unused library
- packages and classes. Remember that only classes or interfaces that are
- extended or implemented by classes in your input jars are required.</dd>
+<dd>You can try increasing the heap size of the Java virtual machine, with the
+ usual <code>-Xmx</code> option:
+ <ul>
+ <li>In Java, specify the option as an argument to the JVM: <code>java
+ -Xmx1024m</code> ...
+ <li>In Ant, set the environment variable <code>ANT_OPTS=-Xmx1024m</code>
+ <li>In Gradle, set the environment variable
+ <code>GRADLE_OPTS=-Xmx1024m</code>
+ <li>In Maven, set the environment variable
+ <code>MAVEN_OPTS=-Xmx1024m</code>
+ <li>In Eclipse, add the line <code>-Xmx1024m</code> to the file
+ <code>eclipse.ini</code> inside your Eclipse install.
+ </ul>
+ You can also reduce the amount of memory that ProGuard needs by removing
+ unnecessary library jars from your configuration, or by filtering out
+ unused library packages and classes.</dd>
<dt><a name="stackoverflowerror"><b>StackOverflowError</b></a></dt>
@@ -799,6 +861,17 @@ might be several reasons:
should make sure you're preserving the special methods of the enumeration
type, as shown in the examples.</dd>
+<dt><a name="illegalargumentexception"><b>IllegalArgumentException: methods with same signature but incompatible return types</b></a></dt>
+
+<dd>You are probably running some code that has been obfuscated
+ with the <a
+ href="usage.html#overloadaggressively"><code>-overloadaggressively</code></a>
+ option. The class <code>java.lang.reflect.Proxy</code> can't handle
+ classes that contain methods with the same names and signatures, but
+ different return types. Its method <code>newProxyInstance</code> then
+ throws this exception. You can avoid the problem by not using the
+ option.</dd>
+
<dt><a name="compilererror"><b>CompilerError: duplicate addition</b></a></dt>
<dd>You are probably compiling or running some code that has been obfuscated
@@ -852,10 +925,9 @@ might be several reasons:
</dl>
<hr />
-<noscript><div><a target="_top" href="../index.html" class="button">Show menu</a></div></noscript>
<address>
-Copyright &copy; 2002-2013
-<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>.
+Copyright &copy; 2002-2014
+<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a> @ <a target="top" href="http://www.saikoa.com/">Saikoa</a>.
</address>
</body>
</html>
diff --git a/docs/manual/usage.html b/docs/manual/usage.html
index 7d3a5bb..3bf94ef 100644
--- a/docs/manual/usage.html
+++ b/docs/manual/usage.html
@@ -5,19 +5,21 @@
<meta http-equiv="content-style-type" content="text/css">
<link rel="stylesheet" type="text/css" href="style.css">
<title>ProGuard Usage</title>
+</head>
+<body>
+
<script type="text/javascript" language="JavaScript">
<!--
if (window.self==window.top)
- window.top.location.replace("../index.html#"+window.location.pathname+window.location.hash);
-else {
- var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), "");
- if (window.top.location.hash!=hash)
- window.top.location.hash=hash;
-}
+ document.write('<a class="largebutton" target="_top" href="../index.html#manual/usage.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>')
//-->
</script>
-</head>
-<body>
+<noscript>
+<a class="largebutton" target="_top" href="../index.html#manual/usage.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>
+</noscript>
<h2>Usage</h2>
@@ -95,8 +97,8 @@ The sections below provide more details:
<dt><a name="injars"><code><b>-injars</b></code></a>
<a href="#classpath"><i>class_path</i></a></dt>
-<dd>Specifies the input jars (or wars, ears, zips, or directories) of the
- application to be processed. The class files in these jars will be
+<dd>Specifies the input jars (or aars, wars, ears, zips, apks, or directories)
+ of the application to be processed. The class files in these jars will be
processed and written to the output jars. By default, any non-class files
will be copied without changes. Please be aware of any temporary files
(e.g. created by IDEs), especially if you are reading your input files
@@ -108,8 +110,8 @@ The sections below provide more details:
<dt><a name="outjars"><code><b>-outjars</b></code></a>
<a href="#classpath"><i>class_path</i></a></dt>
-<dd>Specifies the names of the output jars (or wars, ears, zips, or
- directories). The processed input of the preceding <code>-injars</code>
+<dd>Specifies the names of the output jars (or aars, wars, ears, zips, apks,
+ or directories). The processed input of the preceding <code>-injars</code>
options will be written to the named jars. This allows you to collect the
contents of groups of input jars into corresponding groups of output jars.
In addition, the output entries can be filtered, as explained in
@@ -125,15 +127,16 @@ The sections below provide more details:
<dt><a name="libraryjars"><code><b>-libraryjars</b></code></a>
<a href="#classpath"><i>class_path</i></a></dt>
-<dd>Specifies the library jars (or wars, ears, zips, or directories) of the
- application to be processed. The files in these jars will not be included
- in the output jars. The specified library jars should at least contain the
- class files that are <i>extended</i> by application class files. Library
- class files that are only <i>called</i> needn't be present, although their
- presence can improve the results of the optimization step. The entries in
- the class path can be filtered, as explained in the <a
- href="#filefilters">filters</a> section. For better readability, class path
- entries can be specified using multiple <code>-libraryjars</code> options.
+<dd>Specifies the library jars (or aars, wars, ears, zips, apks, or
+ directories) of the application to be processed. The files in these jars
+ will not be included in the output jars. The specified library jars should
+ at least contain the class files that are <i>extended</i> by application
+ class files. Library class files that are only <i>called</i> needn't be
+ present, although their presence can improve the results of the
+ optimization step. The entries in the class path can be filtered, as
+ explained in the <a href="#filefilters">filters</a> section. For better
+ readability, class path entries can be specified using
+ multiple <code>-libraryjars</code> options.
<p>
Please note that the boot path and the class path set for running ProGuard
are not considered when looking for library classes. This means that you
@@ -176,26 +179,34 @@ The sections below provide more details:
<dt><a name="keepdirectories"><code><b>-keepdirectories</b></code></a>
[<i><a href="#filefilters">directory_filter</a></i>]</dt>
-<dd>Specifies the directories to be kept in the output jars (or wars, ears,
- zips, or directories). By default, directory entries are removed. This
- reduces the jar size, but it may break your program if the code tries to
- find them with constructs like
- "<code>mypackage.MyClass.class.getResource("")</code>". You'll then want to
- keep the directory corresponding to the package, "<code>-keepdirectories
- mypackage</code>". If the option is specified without a filter, all
- directories are kept. With a filter, only matching directories are
- kept.</dd>
+<dd>Specifies the directories to be kept in the output jars (or aars, wars,
+ ears, zips, apks, or directories). By default, directory entries are
+ removed. This reduces the jar size, but it may break your program if the
+ code tries to find them with constructs like
+ "<code>mypackage.MyClass.class.getResource("")</code>". You'll then want
+ to keep the directory corresponding to the package,
+ "<code>-keepdirectories mypackage</code>". If the option is specified
+ without a filter, all directories are kept. With a filter, only matching
+ directories are kept. For instance,
+ "<code>-keepdirectories mydirectory</code>" matches the specified
+ directory, "<code>-keepdirectories mydirectory/*</code>" matches its
+ immediate subdirectories, and
+ "<code>-keepdirectories mydirectory/**</code>" matches all of its
+ subdirectories.</dd>
<dt><a name="target"><code><b>-target</b></code></a> <i>version</i></dt>
<dd>Specifies the version number to be set in the processed class files. The
version number can be one of <code>1.0</code>, <code>1.1</code>,
<code>1.2</code>, <code>1.3</code>, <code>1.4</code>, <code>1.5</code> (or
- just <code>5</code>), <code>1.6</code> (or just <code>6</code>), or
- <code>1.7</code> (or just <code>7</code>). By default, the version numbers
- of the class files are left unchanged. For example, you may want to
+ just <code>5</code>), <code>1.6</code> (or just <code>6</code>),
+ <code>1.7</code> (or just <code>7</code>), or <code>1.8</code> (or
+ just <code>8</code>). By default, the version numbers of the class files
+ are left unchanged. For example, you may want to
<a href="examples.html#upgrade">upgrade class files to Java 6</a>, by
- changing their version numbers and having them preverified.</dd>
+ changing their version numbers and having them preverified. You probably
+ shouldn't downgrade the version numbers of class files, since the code
+ may contain constructs that are not supported in older versions.</dd>
<dt><a name="forceprocessing"><code><b>-forceprocessing</b></code></a></dt>
@@ -380,9 +391,9 @@ The sections below provide more details:
optimization step. For instance, when inlining a public getter, it may be
necessary to make the accessed field public too. Although Java's binary
compatibility specifications formally do not require this (cfr. <a href=
- "http://java.sun.com/docs/books/jls/second_edition/html/j.title.doc.html"
- >The Java Language Specification, Second Edition</a>, <a href=
- "http://java.sun.com/docs/books/jls/second_edition/html/binaryComp.doc.html#47259"
+ "http://docs.oracle.com/javase/specs/jls/se5.0/html/j3TOC.html"
+ >The Java Language Specification, Third Edition</a>, <a href=
+ "http://docs.oracle.com/javase/specs/jls/se5.0/html/binaryComp.html#13.4.6"
>Section 13.4.6</a>), some virtual machines would have problems with the
processed code otherwise. Only applicable when optimizing (and when
obfuscating with the <a
@@ -399,14 +410,14 @@ The sections below provide more details:
classes don't implement all interface methods. This can reduce the size of
the output by reducing the total number of classes. Note that Java's
binary compatibility specifications allow such constructs (cfr. <a href=
- "http://java.sun.com/docs/books/jls/second_edition/html/j.title.doc.html"
- >The Java Language Specification, Second Edition</a>, <a href=
- "http://java.sun.com/docs/books/jls/second_edition/html/binaryComp.doc.html#45347"
+ "http://docs.oracle.com/javase/specs/jls/se5.0/html/j3TOC.html"
+ >The Java Language Specification, Third Edition</a>, <a href=
+ "http://docs.oracle.com/javase/specs/jls/se5.0/html/binaryComp.html#13.5.3"
>Section 13.5.3</a>), even if they are not allowed in the Java language
(cfr. <a href=
- "http://java.sun.com/docs/books/jls/second_edition/html/j.title.doc.html"
- >The Java Language Specification, Second Edition</a>, <a href=
- "http://java.sun.com/docs/books/jls/second_edition/html/classes.doc.html#34031"
+ "http://docs.oracle.com/javase/specs/jls/se5.0/html/j3TOC.html"
+ >The Java Language Specification, Third Edition</a>, <a href=
+ "http://docs.oracle.com/javase/specs/jls/se5.0/html/classes.html#8.1.4"
>Section 8.1.4</a>). Only applicable when optimizing.
<p>
<i>Counter-indication:</i> setting this option can reduce the performance
@@ -500,26 +511,27 @@ The sections below provide more details:
<dd>Specifies to apply aggressive overloading while obfuscating. Multiple
fields and methods can then get the same names, as long as their arguments
- and return types are different (not just their arguments). This option can
- make the processed code even smaller (and less comprehensible). Only
- applicable when obfuscating.
+ and return types are different, as required by Java bytecode (not just
+ their arguments, as required by the Java language). This option can make
+ the processed code even smaller (and less comprehensible). Only applicable
+ when obfuscating.
<p>
<i>Counter-indication:</i> the resulting class files fall within the Java
bytecode specification (cfr. <a href=
- "http://java.sun.com/docs/books/vmspec/2nd-edition/html/VMSpecTOC.doc.html"
+ "http://docs.oracle.com/javase/specs/jvms/se5.0/html/VMSpecTOC.doc.html"
>The Java Virtual Machine Specification, Second Edition</a>, first
paragraphs of <a href=
- "http://java.sun.com/docs/books/vmspec/2nd-edition/html/ClassFile.doc.html#2877"
+ "http://docs.oracle.com/javase/specs/jvms/se5.0/html/ClassFile.doc.html#2877"
>Section 4.5</a> and <a href=
- "http://java.sun.com/docs/books/vmspec/2nd-edition/html/ClassFile.doc.html#1513"
+ "http://docs.oracle.com/javase/specs/jvms/se5.0/html/ClassFile.doc.html#1513"
>Section 4.6</a>), even though this kind of overloading is not allowed in
the Java language (cfr. <a href=
- "http://java.sun.com/docs/books/jls/second_edition/html/j.title.doc.html"
- >The Java Language Specification, Second Edition</a>, <a href=
- "http://java.sun.com/docs/books/jls/second_edition/html/classes.doc.html#40898"
+ "http://docs.oracle.com/javase/specs/jls/se5.0/html/j3TOC.html"
+ >The Java Language Specification, Third Edition</a>, <a href=
+ "http://docs.oracle.com/javase/specs/jls/se5.0/html/classes.html#8.3"
>Section 8.3</a> and <a href=
- "http://java.sun.com/docs/books/jls/second_edition/html/classes.doc.html#227768"
- >Section 8.4.7</a>). Still, some tools have problems with it. Notably:
+ "http://docs.oracle.com/javase/specs/jls/se5.0/html/classes.html#8.4.5"
+ >Section 8.4.5</a>). Still, some tools have problems with it. Notably:
<ul>
<li>Sun's JDK 1.2.2 <code>javac</code> compiler produces an exception when
compiling with such a library (cfr. <a href=
@@ -529,6 +541,8 @@ The sections below provide more details:
primitive fields.</li>
<li>Sun's JRE 1.5 <code>pack200</code> tool reportedly has problems with
overloaded class members.</li>
+ <li>The class <code>java.lang.reflect.Proxy</code> can't handle overloaded
+ methods.</li>
<li>Google's Dalvik VM can't handle overloaded static fields.</li>
</ul></dd>
@@ -591,7 +605,7 @@ The sections below provide more details:
<dd>Specifies to repackage all class files that are renamed, by moving them
into the single given package. Without argument or with an empty string
- (''), the package is removed completely. This option option overrides the
+ (''), the package is removed completely. This option overrides the
<a
href="#flattenpackagehierarchy"><code>-flattenpackagehierarchy</code></a>
option. It is another example of further <a
@@ -606,31 +620,21 @@ The sections below provide more details:
this option.</dd>
<dt><a name="keepattributes"><code><b>-keepattributes</b></code></a>
- [<i><a href="#filters">attribute_filter</a></i>]</dt>
+ [<i><a href="attributes.html">attribute_filter</a></i>]</dt>
<dd>Specifies any optional attributes to be preserved. The attributes can be
specified with one or more <code>-keepattributes</code> directives. The
- optional filter is a comma-separated list of attribute names. Attribute
- names can contain <b>?</b>, <b>*</b>, and <b>**</b> wildcards, and they
- can be preceded by the <b>!</b> negator. Typical optional attributes are
- <code>Exceptions</code>, <code>Signature</code>, <code>Deprecated</code>,
- <code>SourceFile</code>, <code>SourceDir</code>,
- <code>LineNumberTable</code>, <code>LocalVariableTable</code>,
- <code>LocalVariableTypeTable</code>, <code>Synthetic</code>,
- <code>EnclosingMethod</code>, <code>RuntimeVisibleAnnotations</code>,
- <code>RuntimeInvisibleAnnotations</code>,
- <code>RuntimeVisibleParameterAnnotations</code>,
- <code>RuntimeInvisibleParameterAnnotations</code>, and
- <code>AnnotationDefault</code>. The <code>InnerClasses</code> attribute
- name can be specified as well, referring to the source name part of this
- attribute. For example, you should at least keep the
- <code>Exceptions</code>, <code>InnerClasses</code>, and
- <code>Signature</code> attributes
- when <a href="examples.html#library">processing a library</a>. You should
- also keep the <code>SourceFile</code> and
- <code>LineNumberTable</code> attributes
- for <a href="examples.html#stacktrace">producing useful obfuscated stack
- traces</a>. Finally, you may want
+ optional filter is a comma-separated list
+ of <a href="attributes.html">attribute names</a> that Java virtual
+ machines and ProGuard support. Attribute names can
+ contain <b>?</b>, <b>*</b>, and <b>**</b> wildcards, and they can be
+ preceded by the <b>!</b> negator. For example, you should at least keep
+ the <code>Exceptions</code>, <code>InnerClasses</code>, and
+ <code>Signature</code> attributes when
+ <a href="examples.html#library">processing a library</a>. You should also
+ keep the <code>SourceFile</code> and <code>LineNumberTable</code>
+ attributes for <a href="examples.html#stacktrace">producing useful
+ obfuscated stack traces</a>. Finally, you may want
to <a href="examples.html#annotations">keep annotations</a> if your code
depends on them. Only applicable when obfuscating.</dd>
@@ -689,7 +693,13 @@ The sections below provide more details:
by setting the environment variable <code>LANG</code> or the Java system
property <code>file.encoding</code>. For an example,
see <a href="examples.html#resourcefiles">processing resource files</a>.
- Only applicable when obfuscating.</dd>
+ Only applicable when obfuscating.
+ <p>
+ <i>Caveat:</i> You probably only want to apply this option to text files,
+ since parsing and adapting binary files as text files can cause unexpected
+ problems. Therefore, make sure that you specify a sufficiently narrow
+ filter.</dd>
+
</dl>
<p>
@@ -732,7 +742,7 @@ The sections below provide more details:
[<i><a href="#filters">class_filter</a></i>]</dt>
<dd>Specifies not to print notes about potential mistakes or omissions in the
- configuration, like typos in class names, or like missing options that
+ configuration, such as typos in class names or missing options that
might be useful. The optional filter is a regular expression; ProGuard
doesn't print notes about classes with matching names.</dd>
@@ -787,7 +797,9 @@ The order of the entries determines their priorities, in case of duplicates.
Each input entry can be:
<ul>
<li>A class file or resource file,</li>
+<li>An apk file, containing any of the above,</li>
<li>A jar file, containing any of the above,</li>
+<li>An aar file, containing any of the above,</li>
<li>A war file, containing any of the above,</li>
<li>An ear file, containing any of the above,</li>
<li>A zip file, containing any of the above,</li>
@@ -795,15 +807,18 @@ Each input entry can be:
</ul>
<p>
The paths of directly specified class files and resource files is ignored, so
-class files should generally be part of a jar file, a war file, an ear file, a
-zip file, or a directory. In addition, the paths of class files should not have
-any additional directory prefixes inside the archives or directories.
+class files should generally be part of a jar file, an aar file, a war file,
+an ear file, a zip file, or a directory. In addition, the paths of class files
+should not have any additional directory prefixes inside the archives or
+directories.
<p>
Each output entry can be:
<ul>
-<li>A jar file, in which all processed class files and resource files will be
+<li>An apk file, in which all class files and resource files will be
collected.</li>
+<li>A jar file, in which any and all of the above will be collected,</li>
+<li>An aar file, in which any and all of the above will be collected,</li>
<li>A war file, in which any and all of the above will be collected,</li>
<li>An ear file, in which any and all of the above will be collected,</li>
<li>A zip file, in which any and all of the above will be collected,</li>
@@ -824,10 +839,12 @@ href="#filename">file names</a> below.
<p>
In addition, ProGuard provides the possibility to filter the class path
entries and their contents, based on their full relative file names. Each
-class path entry can be followed by up to 5 types of <a
+class path entry can be followed by up to 7 types of <a
href="#filefilters">file filters</a> between parentheses, separated by
semi-colons:
<ul>
+<li>A filter for all aar names that are encountered,</li>
+<li>A filter for all apk names that are encountered,</li>
<li>A filter for all zip names that are encountered,</li>
<li>A filter for all ear names that are encountered,</li>
<li>A filter for all war names that are encountered,</li>
@@ -836,11 +853,11 @@ semi-colons:
encountered.</li>
</ul>
<p>
-If fewer than 5 filters are specified, they are assumed to be the latter
+If fewer than 7 filters are specified, they are assumed to be the latter
filters. Any empty filters are ignored. More formally, a filtered class path
entry looks like this:
<pre>
-<i>classpathentry</i><b>(</b>[[[[<i>zipfilter</i><b>;</b>]<i>earfilter</i><b>;</b>]<i>warfilter</i><b>;</b>]<i>jarfilter</i><b>;</b>]<i>filefilter</i><b>)</b>
+<i>classpathentry</i><b>(</b>[[[[[[<i>aarfilter</i><b>;</b>]<i>apkfilter</i><b>;</b>]<i>zipfilter</i><b>;</b>]<i>earfilter</i><b>;</b>]<i>warfilter</i><b>;</b>]<i>jarfilter</i><b>;</b>]<i>filefilter</i><b>)</b>
</pre>
<p>
Square brackets "[]" mean that their contents are optional.
@@ -933,7 +950,7 @@ href="examples.html#filtering">filtering input and output</a>.
ProGuard offers options with filters for many different aspects of the
configuration: names of files, directories, classes, packages, attributes,
-optimizations, etc.
+optimizations, etc.
<p>
A filter is a list of comma-separated names that can contain wildcards. Only
names that match an item on the list pass the filter. The supported wildcards
@@ -1024,6 +1041,15 @@ are not removed in the shrinking step, and not renamed in the obfuscation step.
<h2><a name="keepoptionmodifiers">Keep Option Modifiers</a></h2>
<dl>
+<dt><a name="includedescriptorclasses"><code><b>includedescriptorclasses</b></code></a></dt>
+
+<dd>Specifies that any classes in the type descriptors of the methods and
+ fields that the <a href="#keep">-keep</a> option keeps should be kept as
+ well. This is typically useful when <a href="examples.html#native">keeping
+ native method names</a>, to make sure that the parameter types of native
+ methods aren't renamed either. Their signatures then remain completely
+ unchanged and compatible with the native libraries.</dd>
+
<dt><a name="allowshrinking"><code><b>allowshrinking</b></code></a></dt>
<dd>Specifies that the entry points specified in the <a href="#keep">-keep</a>
@@ -1237,10 +1263,9 @@ files.
</ul>
<hr />
-<noscript><div><a target="_top" href="../index.html" class="button">Show menu</a></div></noscript>
<address>
-Copyright &copy; 2002-2013
-<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>.
+Copyright &copy; 2002-2014
+<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a> @ <a target="top" href="http://www.saikoa.com/">Saikoa</a>.
</address>
</body>
</html>
diff --git a/docs/manual/wtk.html b/docs/manual/wtk.html
index a7ea0b8..09630f1 100644
--- a/docs/manual/wtk.html
+++ b/docs/manual/wtk.html
@@ -5,19 +5,21 @@
<meta http-equiv="content-style-type" content="text/css">
<link rel="stylesheet" type="text/css" href="style.css">
<title>ProGuard JME Wireless Toolkit Integration</title>
+</head>
+<body>
+
<script type="text/javascript" language="JavaScript">
<!--
if (window.self==window.top)
- window.top.location.replace("../index.html#"+window.location.pathname+window.location.hash);
-else {
- var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), "");
- if (window.top.location.hash!=hash)
- window.top.location.hash=hash;
-}
+ document.write('<a class="largebutton" target="_top" href="../index.html#manual/wtk.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>')
//-->
</script>
-</head>
-<body>
+<noscript>
+<a class="largebutton" target="_top" href="../index.html#manual/wtk.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>
+</noscript>
<h2>JME Wireless Toolkit Integration</h2>
@@ -61,10 +63,9 @@ you can adapt the configuration file <code>proguard/wtk/default.pro</code>
that's inside the <code>proguard.jar</code>.
<hr />
-<noscript><div><a target="_top" href="../index.html" class="button">Show menu</a></div></noscript>
<address>
-Copyright &copy; 2002-2013
-<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>.
+Copyright &copy; 2002-2014
+<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a> @ <a target="top" href="http://www.saikoa.com/">Saikoa</a>.
</address>
</body>
</html>
diff --git a/docs/proguard.appdata.xml b/docs/proguard.appdata.xml
new file mode 100644
index 0000000..fe04aa7
--- /dev/null
+++ b/docs/proguard.appdata.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright 2012-2014 Eric Lafortune <eric@graphics.cornell.edu> -->
+<application>
+ <id type="desktop">proguard.desktop</id>
+ <metadata_license>CC-BY-SA-3.0</metadata_license>
+ <project_license>GPL-2.0</project_license>
+ <name>ProGuard</name>
+ <summary>Java optimizer and obfuscator</summary>
+ <description>
+ <p>
+ ProGuard is a free Java class file shrinker, optimizer, obfuscator, and
+ preverifier. It detects and removes unused classes, fields, methods, and
+ attributes. It optimizes bytecode and removes unused instructions. It
+ renames the remaining classes, fields, and methods using short meaningless
+ names. Finally, it preverifies the processed code for Java 6 or for Java
+ Micro Edition.
+ </p>
+ <p>
+ ProGuard is useful for making code more compact and more efficient, on the
+ desktop, on tablets, on smartphones, and on embedded devices. It also
+ makes code more difficult to reverse engineer.Power Statistics is a
+ program used to view historical and current battery information and will
+ show programs running on your computer using power.
+ </p>
+ </description>
+ <screenshots>
+ <screenshot type="default" width="918" height="671">http://proguard.sourceforge.net/screenshot_gui1.gif</screenshot>
+ <screenshot width="755" height="633">http://proguard.sourceforge.net/screenshot_console.gif</screenshot>
+ </screenshots>
+ <url type="homepage">http://proguard.sourceforge.net/</url>
+ <updatecontact>eric@graphics.cornell.edu</updatecontact>
+</application> \ No newline at end of file
diff --git a/docs/quality.html b/docs/quality.html
index d9935fc..4c5f9e5 100644
--- a/docs/quality.html
+++ b/docs/quality.html
@@ -5,19 +5,21 @@
<meta http-equiv="content-style-type" content="text/css">
<link rel="stylesheet" type="text/css" href="style.css">
<title>ProGuard Quality</title>
+</head>
+<body>
+
<script type="text/javascript" language="JavaScript">
<!--
if (window.self==window.top)
- window.top.location.replace("index.html#"+window.location.pathname+window.location.hash);
-else {
- var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), "");
- if (window.top.location.hash!=hash)
- window.top.location.hash=hash;
-}
+ document.write('<a class="largebutton" target="_top" href="index.html#quality.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>')
//-->
</script>
-</head>
-<body>
+<noscript>
+<a class="largebutton" target="_top" href="index.html#quality.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>
+</noscript>
<h2>Quality</h2>
@@ -42,15 +44,14 @@ full-screen size.
<p>
In addition, <b>ProGuard</b> is tested against a constantly growing test suite
-(more than 1500 tests at this time of writing). These small programs contain a
+(more than 1800 tests at this time of writing). These small programs contain a
wide range of common and uncommon constructs, in order to detect any regression
problems as soon as possible.
<hr />
-<noscript><div><a target="_top" href="index.html" class="button">Show menu</a></div></noscript>
<address>
-Copyright &copy; 2002-2013
-<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>.
+Copyright &copy; 2002-2014
+<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a> @ <a target="top" href="http://www.saikoa.com/">Saikoa</a>.
</address>
</body>
</html>
diff --git a/docs/results.html b/docs/results.html
index eee8aa6..ff2572b 100644
--- a/docs/results.html
+++ b/docs/results.html
@@ -5,19 +5,21 @@
<meta http-equiv="content-style-type" content="text/css">
<link rel="stylesheet" type="text/css" href="style.css">
<title>ProGuard Results</title>
+</head>
+<body>
+
<script type="text/javascript" language="JavaScript">
<!--
if (window.self==window.top)
- window.top.location.replace("index.html#"+window.location.pathname+window.location.hash);
-else {
- var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), "");
- if (window.top.location.hash!=hash)
- window.top.location.hash=hash;
-}
+ document.write('<a class="largebutton" target="_top" href="index.html#results.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>')
//-->
</script>
-</head>
-<body>
+<noscript>
+<a class="largebutton" target="_top" href="index.html#results.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>
+</noscript>
<h2>Results</h2>
@@ -42,7 +44,7 @@ presents some typical results:
</tr>
<tr>
-<td><a target="other" href="http://www.oracle.com/technetwork/java/javame/index,html">Worm</a>, a sample midlet from Oracle's JME</td>
+<td><a target="other" href="http://www.oracle.com/technetwork/java/javame/index.html">Worm</a>, a sample midlet from Oracle's JME</td>
<td align="center">10.3 K</td>
<td align="center">9.8 K</td>
<td align="center">9.6 K</td>
@@ -159,10 +161,9 @@ is governed by the basic java virtual machine and by the total size of the
library jars and program jars.
<hr />
-<noscript><div><a target="_top" href="index.html" class="button">Show menu</a></div></noscript>
<address>
-Copyright &copy; 2002-2013
-<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>.
+Copyright &copy; 2002-2014
+<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a> @ <a target="top" href="http://www.saikoa.com/">Saikoa</a>.
</address>
</body>
diff --git a/docs/screenshots.html b/docs/screenshots.html
index 31c1296..66334fc 100644
--- a/docs/screenshots.html
+++ b/docs/screenshots.html
@@ -5,19 +5,21 @@
<meta http-equiv="content-style-type" content="text/css">
<link rel="stylesheet" type="text/css" href="style.css">
<title>ProGuard Screenshots</title>
+</head>
+<body>
+
<script type="text/javascript" language="JavaScript">
<!--
if (window.self==window.top)
- window.top.location.replace("index.html#"+window.location.pathname+window.location.hash);
-else {
- var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), "");
- if (window.top.location.hash!=hash)
- window.top.location.hash=hash;
-}
+ document.write('<a class="largebutton" target="_top" href="index.html#screenshots.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>')
//-->
</script>
-</head>
-<body>
+<noscript>
+<a class="largebutton" target="_top" href="index.html#screenshots.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>
+</noscript>
<h2>Screenshots</h2>
@@ -58,10 +60,9 @@ You can click on the image to see the full-size version.
</td></tr></table>
<hr />
-<noscript><div><a target="_top" href="index.html" class="button">Show menu</a></div></noscript>
<address>
-Copyright &copy; 2002-2013
-<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>.
+Copyright &copy; 2002-2014
+<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a> @ <a target="top" href="http://www.saikoa.com/">Saikoa</a>.
</address>
</body>
</html>
diff --git a/docs/sections.html b/docs/sections.html
index 7a2ab8a..cfe45b1 100644
--- a/docs/sections.html
+++ b/docs/sections.html
@@ -44,14 +44,6 @@
</center>
-<script type="text/javascript">
-base = "http://sourceforge.net/apps/piwik/proguard/";
-if (document.location.hostname == "proguard.sourceforge.net")
- document.write(unescape("%3Cscript src='"+base+"piwik.js' type='text/javascript'%3E%3C/script%3E"));
-</script><script type="text/javascript">
-if (document.location.hostname == "proguard.sourceforge.net")
- piwik_log('', 1, base+"piwik.php");
-</script>
</body>
</html>
diff --git a/docs/style.css b/docs/style.css
index 71d69d7..79f4c07 100644
--- a/docs/style.css
+++ b/docs/style.css
@@ -75,6 +75,16 @@ a.button {
float: right;
}
+a.largebutton {
+ font-weight: bold;
+ color: #000000;
+ margin: 0px;
+ padding: 10px;
+ background: url("steel.gif");
+ text-decoration: none;
+ border: 1px outset #FFFFFF;
+}
+
/* Settings for the introductory paragraph. */
p.intro
diff --git a/docs/testimonials.html b/docs/testimonials.html
index f6e2cd7..2d90a41 100644
--- a/docs/testimonials.html
+++ b/docs/testimonials.html
@@ -5,19 +5,21 @@
<meta http-equiv="content-style-type" content="text/css">
<link rel="stylesheet" type="text/css" href="style.css">
<title>ProGuard Testimonials</title>
+</head>
+<body>
+
<script type="text/javascript" language="JavaScript">
<!--
if (window.self==window.top)
- window.top.location.replace("index.html#"+window.location.pathname+window.location.hash);
-else {
- var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), "");
- if (window.top.location.hash!=hash)
- window.top.location.hash=hash;
-}
+ document.write('<a class="largebutton" target="_top" href="index.html#testimonials.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>')
//-->
</script>
-</head>
-<body>
+<noscript>
+<a class="largebutton" target="_top" href="index.html#testimonials.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>
+</noscript>
<h2>Testimonials</h2>
@@ -123,10 +125,9 @@ You could've been rich.
</tr></table></center>
<hr />
-<noscript><div><a target="_top" href="index.html" class="button">Show menu</a></div></noscript>
<address>
-Copyright &copy; 2002-2013
-<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>.
+Copyright &copy; 2002-2014
+<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a> @ <a target="top" href="http://www.saikoa.com/">Saikoa</a>.
</address>
</body>
diff --git a/docs/title.html b/docs/title.html
index 80e2c42..7dea197 100644
--- a/docs/title.html
+++ b/docs/title.html
@@ -10,7 +10,7 @@
<div class="title">
<h1><img src="title.gif" width="154" height="29" alt="ProGuard" /></h1>
-<div>Version 4.10</div>
+<div>Version 5.1</div>
</div>
</body>