| <!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>Gradle Task</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/gradle.html">ProGuard index</a> <a class="largebutton" target="_top" href="http://www.guardsquare.com/dexguard">DexGuard</a> <a class="largebutton" target="_top" href="http://www.guardsquare.com/">GuardSquare</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/gradle.html">ProGuard index</a> |
| <a class="largebutton" target="_top" href="http://www.guardsquare.com/dexguard">DexGuard</a> |
| <a class="largebutton" target="_top" href="http://www.guardsquare.com/">GuardSquare</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 2.1 or higher). |
| <p> |
| |
| Before you can use the <code>proguard</code> task, you have to make sure |
| Gradle can find it in its class path at build time. One way is to add the |
| following line to your <code>build.gradle</code> file: |
| <p> |
| |
| <pre> |
| buildscript { |
| repositories { |
| flatDir dirs: '/usr/local/java/proguard/lib' |
| } |
| dependencies { |
| classpath ':proguard:' |
| } |
| } |
| </pre> |
| <p> |
| |
| Please make sure the class path is set correctly for your system. |
| <p> |
| |
| You can then define a task: |
| <p> |
| <pre> |
| task myProguardTask(type: proguard.gradle.ProGuardTask) { |
| ..... |
| } |
| </pre> |
| <p> |
| |
| The embedded configuration is much like a standard ProGuard configuration. |
| Notable similarities and differences: |
| <ul> |
| <li>Like in ProGuard-style configurations, we're using all lower-case names |
| for the settings.</li> |
| <li>The options don't have a dash as prefix.</li> |
| <li>Arguments typically have quotes.</li> |
| <li>Some settings are specified as named arguments.</li> |
| </ul> |
| <p> |
| You can find some sample build files in the <code>examples/gradle</code> |
| directory of the ProGuard distribution. |
| <p> |
| If you prefer a more verbose configuration derived from the Ant task, you can |
| import the Ant task as a <a href="#anttask">Gradle task</a>. |
| |
| <h2><a name="proguard">Settings</a></h2> |
| |
| The ProGuard task supports the following settings in its closure: |
| |
| <dl> |
| |
| <dt><a name="configuration_attribute"><code><b>configuration</b></code></a> |
| <a href="#file"><i>files</i></a></dt> |
| <dd>Read and merge options from the given ProGuard-style configuration |
| files. The files are resolved and parsed lazily, during the execution |
| phase.</dd> |
| |
| <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 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 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 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> |
| |
| <dt><a href="usage.html#dontskipnonpubliclibraryclassmembers"><code><b>dontskipnonpubliclibraryclassmembers</b></code></a></dt> |
| <dd>Don't ignore package visible library class members.</dd> |
| |
| <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 aars, wars, ears, |
| zips, apks, or directories).</dd> |
| |
| <dt><a href="usage.html#target"><code><b>target</b></code></a> |
| '<i>version</i>'</dt> |
| <dd>Set the given version number in the processed classes.</dd> |
| |
| <dt><a href="usage.html#forceprocessing"><code><b>forceprocessing</b></code></a></dt> |
| <dd>Process the input, even if the output seems up to date.</dd> |
| |
| <dt><a href="usage.html#keep"><code><b>keep</b></code></a> |
| [<a href="#keepmodifier"><i>modifier</i>,...</a>] |
| <a href="#classspecification"><i>class_specification</i></a></dt> |
| <dd>Preserve the specified classes <i>and</i> class members.</dd> |
| |
| <dt><a href="usage.html#keepclassmembers"><code><b>keepclassmembers</b></code></a> |
| [<a href="#keepmodifier"><i>modifier</i>,...</a>] |
| <a href="#classspecification"><i>class_specification</i></a></dt> |
| <dd>Preserve the specified class members, if their classes are preserved as |
| well.</dd> |
| |
| <dt><a href="usage.html#keepclasseswithmembers"><code><b>keepclasseswithmembers</b></code></a> |
| [<a href="#keepmodifier"><i>modifier</i>,...</a>] |
| <a href="#classspecification"><i>class_specification</i></a></dt> |
| <dd>Preserve the specified classes <i>and</i> class members, if all of the |
| specified class members are present.</dd> |
| |
| <dt><a href="usage.html#keepnames"><code><b>keepnames</b></code></a> |
| <a href="#classspecification"><i>class_specification</i></a></dt> |
| <dd>Preserve the names of the specified classes <i>and</i> class members (if |
| they aren't removed in the shrinking step).</dd> |
| |
| <dt><a href="usage.html#keepclassmembernames"><code><b>keepclassmembernames</b></code></a> |
| <a href="#classspecification"><i>class_specification</i></a></dt> |
| <dd>Preserve the names of the specified class members (if they aren't removed |
| in the shrinking step).</dd> |
| |
| <dt><a href="usage.html#keepclasseswithmembernames"><code><b>keepclasseswithmembernames</b></code></a> |
| <a href="#classspecification"><i>class_specification</i></a></dt> |
| <dd>Preserve the names of the specified classes <i>and</i> class members, if |
| all of the specified class members are present (after the shrinking |
| step).</dd> |
| |
| <dt><a href="usage.html#printseeds"><code><b>printseeds</b></code></a> |
| [<a href="#file"><i>file</i></a>]</dt> |
| <dd>List classes and class members matched by the various <code>keep</code> |
| commands, to the standard output or to the given file.</dd> |
| |
| <dt><a href="usage.html#dontshrink"><code><b>dontshrink</b></code></a></dt> |
| <dd>Don't shrink the input class files.</dd> |
| |
| <dt><a href="usage.html#printusage"><code><b>printusage</b></code></a> |
| [<a href="#file"><i>file</i></a>]</dt> |
| <dd>List dead code of the input class files, to the standard output or to the |
| given file.</dd> |
| |
| <dt><a href="usage.html#whyareyoukeeping"><code><b>whyareyoukeeping</b></code></a> |
| <a href="#classspecification"><i>class_specification</i></a></dt> |
| <dd>Print details on why the given classes and class members are being kept in |
| the shrinking step.</dd> |
| |
| <dt><a href="usage.html#dontoptimize"><code><b>dontoptimize</b></code></a></dt> |
| <dd>Don't optimize the input class files.</dd> |
| |
| <dt><a href="usage.html#optimizations"><code><b>optimizations</b></code></a> '<a href="optimizations.html"><i>optimization_filter</i></a>'</dt> |
| <dd>Perform only the specified optimizations.</dd> |
| |
| <dt><a href="usage.html#optimizationpasses"><code><b>optimizationpasses</b></code></a> |
| <i>n</i></dt> |
| <dd>The number of optimization passes to be performed.</dd> |
| |
| <dt><a href="usage.html#assumenosideeffects"><code><b>assumenosideeffects</b></code></a> |
| <a href="#classspecification"><i>class_specification</i></a></dt> |
| <dd>Assume that the specified methods don't have any side effects, while |
| optimizing. <i>Only use this option if you know what you're |
| doing!</i></dd> |
| |
| <dt><a href="usage.html#allowaccessmodification"><code><b>allowaccessmodification</b></code></a></dt> |
| <dd>Allow the access modifiers of classes and class members to be modified, |
| while optimizing.</dd> |
| |
| <dt><a href="usage.html#mergeinterfacesaggressively"><code><b>mergeinterfacesaggressively</b></code></a></dt> |
| <dd>Allow any interfaces to be merged, while optimizing.</dd> |
| |
| <dt><a href="usage.html#dontobfuscate"><code><b>dontobfuscate</b></code></a></dt> |
| <dd>Don't obfuscate the input class files.</dd> |
| |
| <dt><a href="usage.html#printmapping"><code><b>printmapping</b></code></a> |
| [<a href="#file"><i>file</i></a>]</dt> |
| <dd>Print the mapping from old names to new names for classes and class members |
| that have been renamed, to the standard output or to the given file.</dd> |
| |
| <dt><a href="usage.html#applymapping"><code><b>applymapping</b></code></a> |
| <a href="#file"><i>file</i></a></dt> |
| <dd>Reuse the given mapping, for incremental obfuscation.</dd> |
| |
| <dt><a href="usage.html#obfuscationdictionary"><code><b>obfuscationdictionary</b></code></a> |
| <a href="#file"><i>file</i></a></dt> |
| <dd>Use the words in the given text file as obfuscated field names and method |
| names.</dd> |
| |
| <dt><a href="usage.html#classobfuscationdictionary"><code><b>classobfuscationdictionary</b></code></a> |
| <a href="#file"><i>file</i></a></dt> |
| <dd>Use the words in the given text file as obfuscated class names.</dd> |
| |
| <dt><a href="usage.html#packageobfuscationdictionary"><code><b>packageobfuscationdictionary</b></code></a> |
| <a href="#file"><i>file</i></a></dt> |
| <dd>Use the words in the given text file as obfuscated package names.</dd> |
| |
| <dt><a href="usage.html#overloadaggressively"><code><b>overloadaggressively</b></code></a></dt> |
| <dd>Apply aggressive overloading while obfuscating.</dd> |
| |
| <dt><a href="usage.html#useuniqueclassmembernames"><code><b>useuniqueclassmembernames</b></code></a></dt> |
| <dd>Ensure uniform obfuscated class member names for subsequent incremental |
| obfuscation.</dd> |
| |
| <dt><a href="usage.html#dontusemixedcaseclassnames"><code><b>dontusemixedcaseclassnames</b></code></a></dt> |
| <dd>Don't generate mixed-case class names while obfuscating.</dd> |
| |
| <dt><a href="usage.html#keeppackagenames"><code><b>keeppackagenames</b></code></a> ['<a href="usage.html#filters"><i>package_filter</i></a>']</dt> |
| <dd>Keep the specified package names from being obfuscated. If no name is |
| given, all package names are preserved.</dd> |
| |
| <dt><a href="usage.html#flattenpackagehierarchy"><code><b>flattenpackagehierarchy</b></code></a> |
| '<i>package_name</i>'</dt> |
| <dd>Repackage all packages that are renamed into the single given parent |
| package.</dd> |
| |
| <dt><a href="usage.html#repackageclasses"><code><b>repackageclasses</b></code></a> |
| ['<i>package_name</i>']</dt> |
| <dd>Repackage all class files that are renamed into the single given |
| package.</dd> |
| |
| <dt><a href="usage.html#keepattributes"><code><b>keepattributes</b></code></a> ['<a href="usage.html#filters"><i>attribute_filter</i></a>']</dt> |
| <dd>Preserve the specified optional Java bytecode attributes, with optional |
| wildcards. If no name is given, all attributes are preserved.</dd> |
| |
| <dt><a href="usage.html#keepparameternames"><code><b>keepparameternames</b></code></a></dt> |
| <dd>Keep the parameter names and types of methods that are kept.</dd> |
| |
| <dt><a href="usage.html#renamesourcefileattribute"><code><b>renamesourcefileattribute</b></code></a> |
| ['<i>string</i>']</dt> |
| <dd>Put the given constant string in the <code>SourceFile</code> |
| attributes.</dd> |
| |
| <dt><a href="usage.html#adaptclassstrings"><code><b>adaptclassstrings</b></code></a> |
| ['<a href="usage.html#filters"><i>class_filter</i></a>']</dt> |
| <dd>Adapt string constants in the specified classes, based on the obfuscated |
| names of any corresponding classes.</dd> |
| |
| <dt><a href="usage.html#adaptresourcefilenames"><code><b>adaptresourcefilenames</b></code></a> |
| ['<a href="usage.html#filefilters"><i>file_filter</i></a>']</dt> |
| <dd>Rename the specified resource files, based on the obfuscated names of the |
| corresponding class files.</dd> |
| |
| <dt><a href="usage.html#adaptresourcefilecontents"><code><b>adaptresourcefilecontents</b></code></a> |
| ['<a href="usage.html#filefilters"><i>file_filter</i></a>']</dt> |
| <dd>Update the contents of the specified resource files, based on the |
| obfuscated names of the processed classes.</dd> |
| |
| <dt><a href="usage.html#dontpreverify"><code><b>dontpreverify</b></code></a></dt> |
| <dd>Don't preverify the processed class files if they are targeted at Java Micro |
| Edition or at Java 6 or higher.</dd> |
| |
| <dt><a href="usage.html#microedition"><code><b>microedition</b></code></a></dt> |
| <dd>Target the processed class files at Java Micro Edition.</dd> |
| |
| <dt><a href="usage.html#verbose"><code><b>verbose</b></code></a></dt> |
| <dd>Write out some more information during processing.</dd> |
| |
| <dt><a href="usage.html#dontnote"><code><b>dontnote</b></code></a> '<a href="usage.html#filters"><i>class_filter</i></a>'</dt> |
| <dd>Don't print notes about classes matching the specified class name |
| filter.</dd> |
| |
| <dt><a href="usage.html#dontwarn"><code><b>dontwarn</b></code></a> '<a href="usage.html#filters"><i>class_filter</i></a>'</dt> |
| <dd>Don't print warnings about classes matching the specified class name |
| filter. <i>Only use this option if you know what you're doing!</i></dd> |
| |
| <dt><a href="usage.html#ignorewarnings"><code><b>ignorewarnings</b></code></a></dt> |
| <dd>Print warnings about unresolved references, but continue processing |
| anyhow. <i>Only use this option if you know what you're doing!</i></dd> |
| |
| <dt><a href="usage.html#printconfiguration"><code><b>printconfiguration</b></code></a> |
| [<a href="#file"><i>file</i></a>]</dt> |
| <dd>Write out the entire configuration in traditional ProGuard style, to the |
| standard output or to the given file. Useful to replace unreadable |
| XML configurations.</dd> |
| |
| <dt><a href="usage.html#dump"><code><b>dump</b></code></a> |
| [<a href="#file"><i>file</i></a>]</dt> |
| <dd>Write out the internal structure of the processed class files, to the |
| standard output or to the given file.</dd> |
| |
| </dl> |
| |
| <h2><a name="classpath">Class Paths</a></h2> |
| |
| Class paths are specified as Gradle file collections, which means they can be |
| specified as simple strings, with <code>files(Object)</code>, etc. |
| <p> |
| In addition, they can have ProGuard-style filters, specified as |
| comma-separated named arguments after the file: |
| |
| <dl> |
| |
| <dt><code><b>filter:</b></code> |
| '<a href="usage.html#filefilters"><i>file_filter</i></a>'</dt> |
| <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> |
| |
| <dt><code><b>earfilter:</b></code> |
| '<a href="usage.html#filefilters"><i>file_filter</i></a>'</dt> |
| <dd>An optional filter for all ear names that are encountered.</dd> |
| |
| <dt><code><b>zipfilter:</b></code> |
| '<a href="usage.html#filefilters"><i>file_filter</i></a>'</dt> |
| <dd>An optional filter for all zip names that are encountered.</dd> |
| |
| </dl> |
| |
| <h2><a name="file">Files</a></h2> |
| |
| Files are specified as Gradle files, which means they can be specified |
| as simple strings, as File instances, with <code>file(Object)</code>, etc. |
| <p> |
| In Gradle, file names (any strings really) in double quotes can contain |
| properties or code inside <code>${...}</code>. These are automatically |
| expanded. |
| <p> |
| For example, <code>"${System.getProperty('java.home')}/lib/rt.jar"</code> is |
| expanded to something like <code>'/usr/local/java/jdk/jre/lib/rt.jar'</code>. |
| Similarly, <code>System.getProperty('user.home')</code> is expanded to the |
| user's home directory, and <code>System.getProperty('user.dir')</code> is |
| expanded to the current working directory. |
| |
| <h2><a name="keepmodifier">Keep Modifiers</a></h2> |
| |
| The keep settings can have the following named arguments that modify their |
| 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> |
| <dd>Specifies whether the entry points specified in the keep tag may be |
| shrunk.</dd> |
| |
| <dt><a href="usage.html#allowoptimization"><code><b>allowoptimization:</b></code></a> |
| <i>boolean</i> |
| (default = false)</dt> |
| <dd>Specifies whether the entry points specified in the keep tag may be |
| optimized.</dd> |
| |
| <dt><a href="usage.html#allowobfuscation"><code><b>allowobfuscation:</b></code></a> |
| <i>boolean</i> |
| (default = false)</dt> |
| <dd>Specifies whether the entry points specified in the keep tag may be |
| obfuscated.</dd> |
| |
| </dl> |
| |
| Names arguments are comma-separated, as usual. |
| |
| <h2><a name="classspecification">Class Specifications</a></h2> |
| |
| A class specification is a template of classes and class members (fields and methods). There are two alternative ways to specify such a template: |
| |
| <ol> |
| <li>As a string containing a ProGuard-style class specification. This is the |
| most compact and most readable way. The specification looks like a Java |
| declaration of a class with fields and methods. For example: |
| <pre> |
| keep 'public class mypackage.MyMainClass { \ |
| public static void main(java.lang.String[]); \ |
| }' |
| </pre></li> |
| <li>As a Gradle-style setting: a method calls with named arguments and a |
| closure. This is more verbose, but it might be useful for programmatic |
| specifications. For example: |
| <pre> |
| keep access: 'public', |
| name: 'mypackage.MyMainClass', { |
| method access: 'public static', |
| type: 'void', |
| name: 'main', |
| parameters: 'java.lang.String[]' |
| } |
| </pre></li> |
| </ol> |
| <p> |
| |
| The <a href="usage.html#classspecification">ProGuard-style class |
| specification</a> is described on the traditional Usage page. |
| <p> |
| A Gradle-style class specification can have the following named arguments: |
| |
| <dl> |
| |
| <dt><code><b>access:</b></code> '<i>access_modifiers</i>'</dt> |
| <dd>The optional access modifiers of the class. Any space-separated list of |
| "public", "final", and "abstract", with optional negators "!".</dd> |
| |
| <dt><code><b>annotation:</b></code> '<i>annotation_name</i>'</dt> |
| <dd>The optional fully qualified name of an annotation of the class, with |
| optional wildcards.</dd> |
| |
| <dt><code><b>type:</b></code> '<i>type</i>'</dt> |
| <dd>The optional type of the class: one of "class", "interface", or |
| "!interface".</dd> |
| |
| <dt><code><b>name:</b></code> '<i>class_name</i>'</dt> |
| <dd>The optional fully qualified name of the class, with optional |
| wildcards.</dd> |
| |
| <dt><code><b>extendsannotation:</b></code> '<i>annotation_name</i>'</dt> |
| <dd>The optional fully qualified name of an annotation of the the class that |
| the specified classes must extend, with optional wildcards.</dd> |
| |
| <dt><code><b>'extends':</b></code> '<i>class_name</i>'</dt> |
| <dd>The optional fully qualified name of the class the specified classes |
| must extend, with optional wildcards.</dd> |
| |
| <dt><code><b>'implements':</b></code> '<i>class_name</i>'</dt> |
| <dd>The optional fully qualified name of the class the specified classes |
| must implement, with optional wildcards.</dd> |
| |
| </dl> |
| |
| The named arguments are optional. Without any arguments, there are no |
| constraints, so the settings match all classes. |
| <p> |
| |
| <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: |
| |
| <dl> |
| |
| <dt><code><b>field</b></code> <i>field_constraints</i></dt> |
| <dd>Specifies a field.</dd> |
| |
| <dt><code><b>method</b></code> <i>method_constraints</i></dt> |
| <dd>Specifies a method.</dd> |
| |
| <dt><code><b>constructor</b></code> <i>constructor_constraints</i></dt> |
| <dd>Specifies a constructor.</dd> |
| |
| </dl> |
| |
| A class member setting can have the following named arguments to express |
| constraints: |
| |
| <dl> |
| |
| <dt><code><b>access:</b></code> '<i>access_modifiers</i>'</dt> |
| <dd>The optional access modifiers of the class. Any space-separated list of |
| "public", "protected", "private", "static", etc., with optional negators |
| "!".</dd> |
| |
| <dt><code><b>'annotation':</b></code> '<i>annotation_name</i>'</dt> |
| <dd>The optional fully qualified name of an annotation of the class member, |
| with optional wildcards.</dd> |
| |
| <dt><code><b>type:</b></code> '<i>type</i>'</dt> |
| <dd>The optional fully qualified type of the class member, with optional |
| wildcards. Not applicable for constructors, but required for methods for |
| which the <code>parameters</code> argument is specified.</dd> |
| |
| <dt><code><b>name:</b></code> '<i>name</i>'</dt> |
| <dd>The optional name of the class member, with optional wildcards. Not |
| applicable for constructors.</dd> |
| |
| <dt><code><b>parameters:</b></code> '<i>parameters</i>'</dt> |
| <dd>The optional comma-separated list of fully qualified method parameters, |
| with optional wildcards. Not applicable for fields, but required for |
| constructors, and for methods for which the <code>type</code> argument is |
| specified.</dd> |
| |
| </dl> |
| |
| The named arguments are optional. Without any arguments, there are no |
| constraints, so the settings match all constructors, fields, or methods. |
| <p> |
| A class member setting doesn't have a closure. |
| |
| <h2><a name="anttask">Alternative: imported Ant task</a></h2> |
| |
| Instead of using the Gradle task, you could also integrate the Ant task in |
| your Gradle build file: |
| <p> |
| <pre> |
| ant.project.basedir = '../..' |
| |
| ant.taskdef(resource: 'proguard/ant/task.properties', |
| classpath: '/usr/local/java/proguard/lib/proguard.jar') |
| </pre> |
| <p> |
| |
| Gradle automatically converts the elements and attributes to Groovy methods, |
| so converting the configuration is essentially mechanical. The one-on-one |
| mapping can be useful, but the resulting configuration is more verbose. For |
| instance: |
| <pre> |
| task proguard << { |
| ant.proguard(printmapping: 'proguard.map', |
| overloadaggressively: 'on', |
| repackageclasses: '', |
| renamesourcefileattribute: 'SourceFile') { |
| |
| injar(file: 'application.jar') |
| injar(file: 'gui.jar', filter: '!META-INF/**') |
| |
| ..... |
| } |
| } |
| </pre> |
| <p> |
| |
| <hr /> |
| <address> |
| Copyright © 2002-2017 |
| <a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a> @ <a target="top" href="http://www.guardsquare.com/">GuardSquare</a>. |
| </address> |
| </body> |
| </html> |