Order files

This commit is contained in:
Andros Fenollosa
2016-11-12 12:27:08 +01:00
parent 73cec1f153
commit 892d89c7f1
1814 changed files with 85 additions and 80 deletions

View File

@ -0,0 +1,41 @@
ProGuard, Java class file shrinker, optimizer, obfuscator, and preverifier
==========================================================================
This distribution contains the following directories:
- bin : simple wrapper scripts to run ProGuard, its GUI, and ReTrace
- lib : the main jars, compiled and ready to use with "java -jar ...."
- docs : the complete documentation, licenses, etc. in html format
- examples : some example configuration files
The best place to start is docs/index.html
Example
=======
If you want to give ProGuard a spin right away, try processing the ProGuard
jar itself:
cd examples
java -jar ../lib/proguard.jar @proguard.pro
The resulting proguard_out.jar contains the same application, but it's a lot
smaller.
Enjoy!
http://proguard.sourceforge.net/
Copyright (c) 2002-2011 Eric Lafortune (eric@graphics.cornell.edu)
Android Addendum:
=================
NOTE: This distribution is identical to the official Proguard 4.7 release,
with the following modifications:
- the "src" and "build" directories were deleted (for space considerations)
- the task.properties file was moved from src/ into ant/ (to be compatible
with the directory structure of earlier bundled versions of ProGuard
- this README file was updated to reflect the above changes
You can download the original proguard4.7.zip, containing the source code,
from http://proguard.sourceforge.net/.

View File

@ -0,0 +1,2 @@
proguard = proguard.ant.ProGuardTask
proguardconfiguration = proguard.ant.ConfigurationTask

View File

@ -0,0 +1,12 @@
#!/bin/sh
#
# Start-up script for ProGuard -- free class file shrinker, optimizer,
# obfuscator, and preverifier for Java bytecode.
#
# Note: when passing file names containing spaces to this script,
# you'll have to add escaped quotes around them, e.g.
# "\"/My Directory/My File.txt\""
PROGUARD_HOME=`dirname "$0"`/..
java -jar $PROGUARD_HOME/lib/proguard.jar "$@"

View File

@ -0,0 +1,15 @@
#!/bin/sh
#
# Start-up script for the GUI of ProGuard -- free class file shrinker,
# optimizer, obfuscator, and preverifier for Java bytecode.
#
# Note: when passing file names containing spaces to this script,
# you'll have to add escaped quotes around them, e.g.
# "\"/My Directory/My File.txt\""
PROGUARD_HOME=`dirname "$0"`/..
# On Linux, Java 1.6.0_24 and higher hang when starting the GUI:
# http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7027598
# We're using the -D option as a workaround.
java -DsuppressSwingDropSupport=true -jar $PROGUARD_HOME/lib/proguardgui.jar "$@"

View File

@ -0,0 +1,12 @@
#!/bin/sh
#
# Start-up script for Retrace -- companion tool for ProGuard, free class file
# shrinker, optimizer, obfuscator, and preverifier for Java bytecode.
#
# Note: when passing file names containing spaces to this script,
# you'll have to add escaped quotes around them, e.g.
# "\"/My Directory/My File.txt\""
PROGUARD_HOME=`dirname "$0"`/..
java -jar $PROGUARD_HOME/lib/retrace.jar "$@"

View File

@ -0,0 +1,149 @@
#
# This ProGuard configuration file illustrates how to process Android
# applications.
# Usage:
# java -jar proguard.jar @android.pro
#
# If you're using the Android SDK (version 2.3 or higher), the android tool
# already creates a file like this in your project, called proguard.cfg.
# It should contain the settings of this file, minus the input and output paths
# (-injars, -outjars, -libraryjars, -printmapping, and -printseeds).
# The generated Ant build file automatically sets these paths.
# Specify the input jars, output jars, and library jars.
# Note that ProGuard works with Java bytecode (.class),
# before the dex compiler converts it into Dalvik code (.dex).
-injars bin/classes
-injars libs
-outjars bin/classes-processed.jar
-libraryjars /usr/local/android-sdk/platforms/android-9/android.jar
#-libraryjars /usr/local/android-sdk/add-ons/google_apis-7_r01/libs/maps.jar
# ...
# Save the obfuscation mapping to a file, so you can de-obfuscate any stack
# traces later on.
-printmapping bin/classes-processed.map
# You can print out the seeds that are matching the keep options below.
#-printseeds bin/classes-processed.seeds
# Preverification is irrelevant for the dex compiler and the Dalvik VM.
-dontpreverify
# Reduce the size of the output some more.
-repackageclasses ''
-allowaccessmodification
# Switch off some optimizations that trip older versions of the Dalvik VM.
-optimizations !code/simplification/arithmetic
# Keep a fixed source file attribute and all line number tables to get line
# numbers in the stack traces.
# You can comment this out if you're not interested in stack traces.
-renamesourcefileattribute SourceFile
-keepattributes SourceFile,LineNumberTable
# RemoteViews might need annotations.
-keepattributes *Annotation*
# Preserve all fundamental application classes.
-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
# Preserve all View implementations, their special context constructors, and
# their setters.
-keep public class * extends android.view.View {
public <init>(android.content.Context);
public <init>(android.content.Context, android.util.AttributeSet);
public <init>(android.content.Context, android.util.AttributeSet, int);
public void set*(...);
}
# Preserve all classes that have special context constructors, and the
# constructors themselves.
-keepclasseswithmembers class * {
public <init>(android.content.Context, android.util.AttributeSet);
}
# Preserve all classes that have special context constructors, and the
# constructors themselves.
-keepclasseswithmembers class * {
public <init>(android.content.Context, android.util.AttributeSet, int);
}
# Preserve the special fields of all Parcelable implementations.
-keepclassmembers class * implements android.os.Parcelable {
static android.os.Parcelable$Creator CREATOR;
}
# Preserve static fields of inner classes of R classes that might be accessed
# through introspection.
-keepclassmembers class **.R$* {
public static <fields>;
}
# Preserve the required interface from the License Verification Library
# (but don't nag the developer if the library is not used at all).
-keep public interface com.android.vending.licensing.ILicensingService
-dontnote com.android.vending.licensing.ILicensingService
# The Android Compatibility library references some classes that may not be
# present in all versions of the API, but we know that's ok.
-dontwarn android.support.**
# Preserve all native method names and the names of their classes.
-keepclasseswithmembernames class * {
native <methods>;
}
# Preserve the special static methods that are required in all enumeration
# classes.
-keepclassmembers class * extends java.lang.Enum {
public static **[] values();
public static ** valueOf(java.lang.String);
}
# Explicitly preserve all serialization members. The Serializable interface
# is only a marker interface, so it wouldn't save them.
# You can comment this out if your application doesn't use serialization.
# If your code contains serializable classes that have to be backward
# compatible, please refer to the manual.
-keepclassmembers class * implements java.io.Serializable {
static final long serialVersionUID;
static final java.io.ObjectStreamField[] serialPersistentFields;
private void writeObject(java.io.ObjectOutputStream);
private void readObject(java.io.ObjectInputStream);
java.lang.Object writeReplace();
java.lang.Object readResolve();
}
# Your application may contain more items that need to be preserved;
# typically classes that are dynamically created using Class.forName:
# -keep public class mypackage.MyClass
# -keep public interface mypackage.MyInterface
# -keep public class * implements mypackage.MyInterface

View File

@ -0,0 +1,60 @@
#
# This ProGuard configuration file illustrates how to use annotations for
# specifying which classes and class members should be kept.
# Usage:
# java -jar proguard.jar @examples.pro
#
# Specify the input, output, and library jars.
# This is assuming the code has been compiled in the examples directory.
-injars examples(*.class)
-outjars out
-libraryjars <java.home>/lib/rt.jar
# Some important configuration is based on the annotations in the code.
# We have to specify what the annotations mean to ProGuard.
-include lib/annotations.pro
#
# We can then still add any other options that might be useful.
#
# Print out a list of what we're preserving.
-printseeds
# Preserve all annotations themselves.
-keepattributes *Annotation*
# Preserve all native method names and the names of their classes.
-keepclasseswithmembernames class * {
native <methods>;
}
# Preserve the special static methods that are required in all enumeration
# classes.
-keepclassmembers class * extends java.lang.Enum {
public static **[] values();
public static ** valueOf(java.lang.String);
}
# Explicitly preserve all serialization members. The Serializable interface
# is only a marker interface, so it wouldn't save them.
# You can comment this out if your application doesn't use serialization.
# If your code contains serializable classes that have to be backward
# compatible, please refer to the manual.
-keepclassmembers class * implements java.io.Serializable {
static final long serialVersionUID;
static final java.io.ObjectStreamField[] serialPersistentFields;
private void writeObject(java.io.ObjectOutputStream);
private void readObject(java.io.ObjectInputStream);
java.lang.Object writeReplace();
java.lang.Object readResolve();
}

View File

@ -0,0 +1,22 @@
import proguard.annotation.*;
/**
* This applet illustrates the use of annotations for configuring ProGuard.
*
* You can compile it with:
* javac -classpath ../lib/annotations.jar Applet.java
* You can then process it with:
* java -jar ../../../lib/proguard.jar @ ../examples.pro
*
* The annotation will preserve the class and its essential methods.
*/
@Keep
public class Applet extends java.applet.Applet
{
// Implementations for Applet.
public void init()
{
// ...
}
}

View File

@ -0,0 +1,20 @@
import proguard.annotation.KeepApplication;
/**
* This application illustrates the use of annotations for configuring ProGuard.
*
* You can compile it with:
* javac -classpath ../lib/annotations.jar Application.java
* You can then process it with:
* java -jar ../../../lib/proguard.jar @ ../examples.pro
*
* The annotation will preserve the class and its main method.
*/
@KeepApplication
public class Application
{
public static void main(String[] args)
{
System.out.println("The answer is 42");
}
}

View File

@ -0,0 +1,56 @@
import proguard.annotation.*;
/**
* This bean illustrates the use of annotations for configuring ProGuard.
*
* You can compile it with:
* javac -classpath ../lib/annotations.jar Bean.java
* You can then process it with:
* java -jar ../../../lib/proguard.jar @ ../examples.pro
*
* The annotations will preserve the class and its public getters and setters.
*/
@Keep
@KeepPublicGettersSetters
public class Bean
{
public boolean booleanProperty;
public int intProperty;
public String stringProperty;
public boolean isBooleanProperty()
{
return booleanProperty;
}
public void setBooleanProperty(boolean booleanProperty)
{
this.booleanProperty = booleanProperty;
}
public int getIntProperty()
{
return intProperty;
}
public void setIntProperty(int intProperty)
{
this.intProperty = intProperty;
}
public String getStringProperty()
{
return stringProperty;
}
public void setStringProperty(String stringProperty)
{
this.stringProperty = stringProperty;
}
}

View File

@ -0,0 +1,44 @@
import proguard.annotation.*;
/**
* This application illustrates the use of annotations for configuring ProGuard.
*
* You can compile it with:
* javac -classpath ../lib/annotations.jar NativeCallBack.java
* You can then process it with:
* java -jar ../../../lib/proguard.jar @ ../examples.pro
*
* The annotation will preserve the class and its main method.
*/
@KeepApplication
public class NativeCallBack
{
/**
* Suppose this is a native method that computes an answer.
*
* The -keep option regular ProGuard configuration will make sure it is
* not renamed when processing this code.
*/
public native int computeAnswer();
/**
* Suppose this method is called back from the above native method.
*
* ProGuard would remove it, because it is not referenced from java.
* The annotation will make sure it is preserved anyhow.
*/
@Keep
public int getAnswer()
{
return 42;
}
public static void main(String[] args)
{
int answer = new NativeCallBack().computeAnswer();
System.out.println("The answer is " + answer);
}
}

View File

@ -0,0 +1,118 @@
#
# This ProGuard configuration file specifies how annotations can be used
# to configure the processing of other code.
# Usage:
# java -jar proguard.jar @annotations.pro -libraryjars annotations.jar ...
#
# Note that the other input/output options still have to be specified.
# If you specify them in a separate file, you can simply include this file:
# -include annotations.pro
#
# You can add any other options that are required. For instance, if you are
# processing a library, you can still include the options from library.pro.
# The annotations are defined in the accompanying jar. For now, we'll start
# with these. You can always define your own annotations, if necessary.
-libraryjars annotations.jar
# The following annotations can be specified with classes and with class
# members.
# @Keep specifies not to shrink, optimize, or obfuscate the annotated class
# or class member as an entry point.
-keep @proguard.annotation.Keep class *
-keepclassmembers class * {
@proguard.annotation.Keep *;
}
# @KeepName specifies not to optimize or obfuscate the annotated class or
# class member as an entry point.
-keepnames @proguard.annotation.KeepName class *
-keepclassmembernames class * {
@proguard.annotation.KeepName *;
}
# The following annotations can only be specified with classes.
# @KeepImplementations and @KeepPublicImplementations specify to keep all,
# resp. all public, implementations or extensions of the annotated class as
# entry points. Note the extension of the java-like syntax, adding annotations
# before the (wild-carded) interface name.
-keep class * implements @proguard.annotation.KeepImplementations *
-keep public class * implements @proguard.annotation.KeepPublicImplementations *
# @KeepApplication specifies to keep the annotated class as an application,
# together with its main method.
-keepclasseswithmembers @proguard.annotation.KeepApplication public class * {
public static void main(java.lang.String[]);
}
# @KeepClassMembers, @KeepPublicClassMembers, and
# @KeepPublicProtectedClassMembers specify to keep all, all public, resp.
# all public or protected, class members of the annotated class from being
# shrunk, optimized, or obfuscated as entry points.
-keepclassmembers @proguard.annotation.KeepClassMembers class * {
*;
}
-keepclassmembers @proguard.annotation.KeepPublicClassMembers class * {
public *;
}
-keepclassmembers @proguard.annotation.KeepPublicProtectedClassMembers class * {
public protected *;
}
# @KeepClassMemberNames, @KeepPublicClassMemberNames, and
# @KeepPublicProtectedClassMemberNames specify to keep all, all public, resp.
# all public or protected, class members of the annotated class from being
# optimized or obfuscated as entry points.
-keepclassmembernames @proguard.annotation.KeepClassMemberNames class * {
*;
}
-keepclassmembernames @proguard.annotation.KeepPublicClassMemberNames class * {
public *;
}
-keepclassmembernames @proguard.annotation.KeepPublicProtectedClassMemberNames class * {
public protected *;
}
# @KeepGettersSetters and @KeepPublicGettersSetters specify to keep all, resp.
# all public, getters and setters of the annotated class from being shrunk,
# optimized, or obfuscated as entry points.
-keepclassmembers @proguard.annotation.KeepGettersSetters class * {
void set*(***);
void set*(int, ***);
boolean is*();
boolean is*(int);
*** get*();
*** get*(int);
}
-keepclassmembers @proguard.annotation.KeepPublicGettersSetters class * {
public void set*(***);
public void set*(int, ***);
public boolean is*();
public boolean is*(int);
public *** get*();
public *** get*(int);
}

View File

@ -0,0 +1,18 @@
/*
* ProGuard -- shrinking, optimization, obfuscation, and preverification
* of Java bytecode.
*
* Copyright (c) 2002-2007 Eric Lafortune (eric@graphics.cornell.edu)
*/
package proguard.annotation;
import java.lang.annotation.*;
/**
* This annotation specifies not to optimize or obfuscate the annotated class or
* class member as an entry point.
*/
@Target({ ElementType.TYPE, ElementType.FIELD, ElementType.METHOD, ElementType.CONSTRUCTOR })
@Retention(RetentionPolicy.CLASS)
@Documented
public @interface Keep {}

View File

@ -0,0 +1,18 @@
/*
* ProGuard -- shrinking, optimization, obfuscation, and preverification
* of Java bytecode.
*
* Copyright (c) 2002-2007 Eric Lafortune (eric@graphics.cornell.edu)
*/
package proguard.annotation;
import java.lang.annotation.*;
/**
* This annotation specifies to keep the annotated class as an application,
* together with its a main method.
*/
@Target({ ElementType.TYPE })
@Retention(RetentionPolicy.CLASS)
@Documented
public @interface KeepApplication {}

View File

@ -0,0 +1,18 @@
/*
* ProGuard -- shrinking, optimization, obfuscation, and preverification
* of Java bytecode.
*
* Copyright (c) 2002-2007 Eric Lafortune (eric@graphics.cornell.edu)
*/
package proguard.annotation;
import java.lang.annotation.*;
/**
* This annotation specifies to keep all class members of the annotated class
* from being optimized or obfuscated as entry points.
*/
@Target({ ElementType.TYPE })
@Retention(RetentionPolicy.CLASS)
@Documented
public @interface KeepClassMemberNames {}

View File

@ -0,0 +1,18 @@
/*
* ProGuard -- shrinking, optimization, obfuscation, and preverification
* of Java bytecode.
*
* Copyright (c) 2002-2007 Eric Lafortune (eric@graphics.cornell.edu)
*/
package proguard.annotation;
import java.lang.annotation.*;
/**
* This annotation specifies to keep all class members of the annotated class
* from being shrunk, optimized, or obfuscated as entry points.
*/
@Target({ ElementType.TYPE })
@Retention(RetentionPolicy.CLASS)
@Documented
public @interface KeepClassMembers {}

View File

@ -0,0 +1,18 @@
/*
* ProGuard -- shrinking, optimization, obfuscation, and preverification
* of Java bytecode.
*
* Copyright (c) 2002-2007 Eric Lafortune (eric@graphics.cornell.edu)
*/
package proguard.annotation;
import java.lang.annotation.*;
/**
* This annotation specifies to keep all getters and setters of the annotated
* class from being shrunk, optimized, or obfuscated as entry points.
*/
@Target({ ElementType.TYPE })
@Retention(RetentionPolicy.CLASS)
@Documented
public @interface KeepGettersSetters {}

View File

@ -0,0 +1,18 @@
/*
* ProGuard -- shrinking, optimization, obfuscation, and preverification
* of Java bytecode.
*
* Copyright (c) 2002-2007 Eric Lafortune (eric@graphics.cornell.edu)
*/
package proguard.annotation;
import java.lang.annotation.*;
/**
* This annotation specifies to keep all implementations or extensions of the
* annotated class as entry points.
*/
@Target({ ElementType.TYPE })
@Retention(RetentionPolicy.CLASS)
@Documented
public @interface KeepImplementations {}

View File

@ -0,0 +1,18 @@
/*
* ProGuard -- shrinking, optimization, obfuscation, and preverification
* of Java bytecode.
*
* Copyright (c) 2002-2007 Eric Lafortune (eric@graphics.cornell.edu)
*/
package proguard.annotation;
import java.lang.annotation.*;
/**
* This annotation specifies not to optimize or obfuscate the annotated class or
* class member as an entry point.
*/
@Target({ ElementType.TYPE, ElementType.FIELD, ElementType.METHOD, ElementType.CONSTRUCTOR })
@Retention(RetentionPolicy.CLASS)
@Documented
public @interface KeepName {}

View File

@ -0,0 +1,18 @@
/*
* ProGuard -- shrinking, optimization, obfuscation, and preverification
* of Java bytecode.
*
* Copyright (c) 2002-2007 Eric Lafortune (eric@graphics.cornell.edu)
*/
package proguard.annotation;
import java.lang.annotation.*;
/**
* This annotation specifies to keep all public class members of the annotated
* class from being optimized or obfuscated as entry points.
*/
@Target({ ElementType.TYPE })
@Retention(RetentionPolicy.CLASS)
@Documented
public @interface KeepPublicClassMemberNames {}

View File

@ -0,0 +1,18 @@
/*
* ProGuard -- shrinking, optimization, obfuscation, and preverification
* of Java bytecode.
*
* Copyright (c) 2002-2007 Eric Lafortune (eric@graphics.cornell.edu)
*/
package proguard.annotation;
import java.lang.annotation.*;
/**
* This annotation specifies to keep all public class members of the annotated
* class from being shrunk, optimized, or obfuscated as entry points.
*/
@Target({ ElementType.TYPE })
@Retention(RetentionPolicy.CLASS)
@Documented
public @interface KeepPublicClassMembers {}

View File

@ -0,0 +1,18 @@
/*
* ProGuard -- shrinking, optimization, obfuscation, and preverification
* of Java bytecode.
*
* Copyright (c) 2002-2007 Eric Lafortune (eric@graphics.cornell.edu)
*/
package proguard.annotation;
import java.lang.annotation.*;
/**
* This annotation specifies to keep all public getters and setters of the
* annotated class from being shrunk, optimized, or obfuscated as entry points.
*/
@Target({ ElementType.TYPE })
@Retention(RetentionPolicy.CLASS)
@Documented
public @interface KeepPublicGettersSetters {}

View File

@ -0,0 +1,18 @@
/*
* ProGuard -- shrinking, optimization, obfuscation, and preverification
* of Java bytecode.
*
* Copyright (c) 2002-2007 Eric Lafortune (eric@graphics.cornell.edu)
*/
package proguard.annotation;
import java.lang.annotation.*;
/**
* This annotation specifies to keep all public implementations or extensions
* of the annotated class as entry points.
*/
@Target({ ElementType.TYPE })
@Retention(RetentionPolicy.CLASS)
@Documented
public @interface KeepPublicImplementations {}

View File

@ -0,0 +1,18 @@
/*
* ProGuard -- shrinking, optimization, obfuscation, and preverification
* of Java bytecode.
*
* Copyright (c) 2002-2007 Eric Lafortune (eric@graphics.cornell.edu)
*/
package proguard.annotation;
import java.lang.annotation.*;
/**
* This annotation specifies to keep all public or protected class members of
* the annotated class from being optimized or obfuscated as entry points.
*/
@Target({ ElementType.TYPE })
@Retention(RetentionPolicy.CLASS)
@Documented
public @interface KeepPublicProtectedClassMemberNames {}

View File

@ -0,0 +1,19 @@
/*
* ProGuard -- shrinking, optimization, obfuscation, and preverification
* of Java bytecode.
*
* Copyright (c) 2002-2007 Eric Lafortune (eric@graphics.cornell.edu)
*/
package proguard.annotation;
import java.lang.annotation.*;
/**
* This annotation specifies to keep all public or protected class members of
* the annotated class from being shrunk, optimized, or obfuscated as entry
* points.
*/
@Target({ ElementType.TYPE })
@Retention(RetentionPolicy.CLASS)
@Documented
public @interface KeepPublicProtectedClassMembers {}

View File

@ -0,0 +1,177 @@
<?xml version="1.0" encoding="UTF-8"?>
<project name="MyAndroidApp" default="help">
<!-- The local.properties file is created and updated by the 'android'
tool.
It contains the path to the SDK. It should *NOT* be checked into
Version Control Systems. -->
<property file="local.properties" />
<!-- The build.properties file can be created by you and is never touched
by the 'android' tool. This is the place to change some of the
default property values used by the Ant rules.
Here are some properties you may want to change/update:
source.dir
The name of the source directory. Default is 'src'.
out.dir
The name of the output directory. Default is 'bin'.
Properties related to the SDK location or the project target should
be updated using the 'android' tool with the 'update' action.
This file is an integral part of the build system for your
application and should be checked into Version Control Systems.
-->
<property file="build.properties" />
<!-- The default.properties file is created and updated by the 'android'
tool, as well as ADT.
This file is an integral part of the build system for your
application and should be checked into Version Control Systems. -->
<property file="default.properties" />
<!-- Custom Android task to deal with the project target, and import the
proper rules.
This requires ant 1.6.0 or above. -->
<path id="android.antlibs">
<pathelement path="${sdk.dir}/tools/lib/anttasks.jar" />
<pathelement path="${sdk.dir}/tools/lib/sdklib.jar" />
<pathelement path="${sdk.dir}/tools/lib/androidprefs.jar" />
</path>
<taskdef name="setup"
classname="com.android.ant.SetupTask"
classpathref="android.antlibs" />
<!-- extension targets. Uncomment the ones where you want to do custom work
in between standard targets -->
<!--
<target name="-pre-build">
</target>
<target name="-pre-compile">
</target>
[This is typically used for code obfuscation.
Compiled code location: ${out.classes.absolute.dir}
If this is not done in place, override ${out.dex.input.absolute.dir}]
<target name="-post-compile">
</target>
-->
<!-- Execute the Android Setup task that will setup some properties
specific to the target, and import the build rules files.
The rules file is imported from
<SDK>/platforms/<target_platform>/ant/ant_rules_r#.xml
To customize existing targets, there are two options:
- Customize only one target:
- copy/paste the target into this file, *before* the
<setup> task.
- customize it to your needs.
- Customize the whole script.
- copy/paste the content of the rules files (minus the top node)
into this file, *after* the <setup> task
- disable the import of the rules by changing the setup task
below to <setup import="false" />.
- customize to your needs.
-->
<setup />
<!-- Define a place for the optimized classes. -->
<property name="out.proguard.absolute.jar"
location="${out.absolute.dir}/classes-processed.jar" />
<!-- Define a obfuscation mapping file. -->
<property name="out.proguard.absolute.map"
location="${out.absolute.dir}/classes-processed.map" />
<!-- Redefine the dex help macro, so it converts the optimized classes.. -->
<macrodef name="dex-helper">
<element name="external-libs" optional="yes" />
<element name="extra-parameters" optional="yes" />
<sequential>
<echo>Converting optimized files into ${intermediate.dex.file}...</echo>
<apply executable="${dx}" failonerror="true" parallel="true">
<arg value="--dex" />
<arg value="--output=${intermediate.dex.file}" />
<extra-parameters />
<arg line="${verbose.option}" />
<fileset file="${out.proguard.absolute.jar}" />
<external-libs />
</apply>
</sequential>
</macrodef>
<!-- Define the optimization target. -->
<taskdef resource="proguard/ant/task.properties"
classpath="/home/eric/ProGuard/releases/proguard4.5.1/lib/proguard.jar" />
<target name="-post-compile">
<echo>Optimizing compiled files and libraries into ${out.proguard.absolute.jar}...</echo>
<proguard printmapping="${out.proguard.absolute.map}">
<injar path="${out.classes.absolute.dir}" />
<injar path="${external.libs.absolute.dir}" />
<outjar path="${out.proguard.absolute.jar}" />
<libraryjar refid="android.target.classpath" />
-dontpreverify
-repackageclasses ''
-allowaccessmodification
-optimizations !code/simplification/arithmetic
<!--
-renamesourcefileattribute SourceFile
-keepattributes SourceFile,LineNumberTable
-->
-keepattributes *Annotation*
-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class * extends android.view.View {
public &lt;init&gt;(android.content.Context);
public &lt;init&gt;(android.content.Context, android.util.AttributeSet);
public &lt;init&gt;(android.content.Context, android.util.AttributeSet, int);
public void set*(...);
}
-keepclasseswithmembers class * {
public &lt;init&gt;(android.content.Context, android.util.AttributeSet);
}
-keepclasseswithmembers class * {
public &lt;init&gt;(android.content.Context, android.util.AttributeSet, int);
}
-keepclassmembers class * implements android.os.Parcelable {
static android.os.Parcelable$Creator CREATOR;
}
-keepclassmembers class **.R$* {
public static &lt;fields&gt;;
}
-keep public interface com.android.vending.licensing.ILicensingService
-dontnote com.android.vending.licensing.ILicensingService
-keepclasseswithmembernames class * {
native &lt;methods&gt;;
}
-keepclassmembers class * extends java.lang.Enum {
public static **[] values();
public static ** valueOf(java.lang.String);
}
</proguard>
</target>
</project>

View File

@ -0,0 +1,88 @@
<!-- This Ant build file illustrates how to process applets.
Usage: ant -f applets.xml -->
<project name="Applets" default="obfuscate" basedir="../..">
<target name="obfuscate">
<taskdef resource="proguard/ant/task.properties"
classpath="lib/proguard.jar" />
<proguard printseeds="on"
printmapping="out.map"
renamesourcefileattribute="SourceFile">
<!-- Specify the input jars, output jars, and library jars. -->
<injar file="in.jar" />
<outjar file="out.jar" />
<libraryjar file="${java.home}/lib/rt.jar" />
<!-- Optionally preserve line numbers in the obfuscated stack traces.
<keepattribute name="LineNumberTable">
<keepattribute name="SourceFile">
-->
<!-- Preserve all annotations. -->
<keepattribute name="*Annotation*" />
<!-- Preserve all public applets. -->
<keep access="public" extends="java.applet.Applet" />
<!-- Preserve all native method names and the names of their classes. -->
<keepclasseswithmembernames>
<method access="native" />
</keepclasseswithmembernames>
<!-- Preserve the methods that are required in all enumeration classes. -->
<keepclassmembers extends="java.lang.Enum">
<method access="public static"
type="**[]"
name="values"
parameters="" />
<method access="public static"
type="**"
name="valueOf"
parameters="java.lang.String" />
</keepclassmembers>
<!-- Explicitly preserve all serialization members. The Serializable
interface is only a marker interface, so it wouldn't save them.
You can comment this out if your library doesn't use serialization.
If your code contains serializable classes that have to be backward
compatible, please refer to the manual. -->
<keepclassmembers implements="java.io.Serializable">
<field access ="static final"
type ="long"
name ="serialVersionUID" />
<field access ="static final"
type ="java.io.ObjectStreamField[]"
name ="serialPersistentFields" />
<method access ="private"
type ="void"
name ="writeObject"
parameters="java.io.ObjectOutputStream" />
<method access ="private"
type ="void"
name ="readObject"
parameters="java.io.ObjectInputStream" />
<method type ="java.lang.Object"
name ="writeReplace"
parameters="" />
<method type ="java.lang.Object"
name ="readResolve"
parameters="" />
</keepclassmembers>
<!-- Your application may contain more items that need to be preserved;
typically classes that are dynamically created using Class.forName -->
</proguard>
</target>
</project>

View File

@ -0,0 +1,15 @@
<!-- This Ant build file illustrates how to process applications,
by including a ProGuard-style configuration file.
Usage: ant -f applications1.xml -->
<project name="Applications" default="obfuscate" basedir="../..">
<target name="obfuscate">
<taskdef resource="proguard/ant/task.properties"
classpath="lib/proguard.jar" />
<proguard configuration="examples/applications.pro" />
</target>
</project>

View File

@ -0,0 +1,74 @@
<!-- This Ant build file illustrates how to process applications,
by including ProGuard-style configuration options.
Usage: ant -f applications2.xml -->
<project name="Applications" default="obfuscate" basedir="../..">
<target name="obfuscate">
<taskdef resource="proguard/ant/task.properties"
classpath="lib/proguard.jar" />
<proguard>
<!-- Specify the input jars, output jars, and library jars. -->
-injars in.jar
-outjars out.jar
-libraryjars ${java.home}/lib/rt.jar
<!-- -libraryjars junit.jar -->
<!-- -libraryjars servlet.jar -->
<!-- -libraryjars jai_core.jar -->
<!-- ... -->
<!-- Save the obfuscation mapping to a file, and preserve line numbers. -->
-printmapping out.map
-renamesourcefileattribute SourceFile
-keepattributes SourceFile,LineNumberTable
<!-- Preserve all annotations. -->
-keepattributes *Annotation*
<!-- Preserve all public applications. -->
-keepclasseswithmembers public class * {
public static void main(java.lang.String[]);
}
<!-- Preserve all native method names and the names of their classes. -->
-keepclasseswithmembernames class * {
native &lt;methods&gt;;
}
<!-- Preserve the methods that are required in all enumeration classes. -->
-keepclassmembers class * extends java.lang.Enum {
public static **[] values();
public static ** valueOf(java.lang.String);
}
<!-- Explicitly preserve all serialization members. The Serializable
interface is only a marker interface, so it wouldn't save them.
You can comment this out if your library doesn't use serialization.
If your code contains serializable classes that have to be backward
compatible, please refer to the manual. -->
-keepclassmembers class * implements java.io.Serializable {
static final long serialVersionUID;
static final java.io.ObjectStreamField[] serialPersistentFields;
private void writeObject(java.io.ObjectOutputStream);
private void readObject(java.io.ObjectInputStream);
java.lang.Object writeReplace();
java.lang.Object readResolve();
}
<!-- Your application may contain more items that need to be preserved;
typically classes that are dynamically created using Class.forName -->
</proguard>
</target>
</project>

View File

@ -0,0 +1,98 @@
<!-- This Ant build file illustrates how to process applications,
using a full-blown XML configuration.
Usage: ant -f applications3.xml -->
<project name="Applications" default="obfuscate" basedir="../..">
<target name="obfuscate">
<taskdef resource="proguard/ant/task.properties"
classpath="lib/proguard.jar" />
<proguard printseeds="on"
printmapping="out.map"
renamesourcefileattribute="SourceFile">
<!-- Specify the input jars, output jars, and library jars. -->
<injar file="in.jar" />
<outjar file="out.jar" />
<libraryjar file="${java.home}/lib/rt.jar" />
<!-- libraryjar file="junit.jar" / -->
<!-- libraryjar file="servlet.jar" / -->
<!-- libraryjar file="jai_core.jar" / -->
<!-- ... / -->
<!-- Preserve line numbers in the obfuscated stack traces. -->
<keepattribute name="LineNumberTable" />
<keepattribute name="SourceFile" />
<!-- Preserve all annotations. -->
<keepattribute name="*Annotation*" />
<!-- Preserve all public applications. -->
<keepclasseswithmembers access="public">
<method access ="public static"
type ="void"
name ="main"
parameters="java.lang.String[]" />
</keepclasseswithmembers>
<!-- Preserve all native method names and the names of their classes. -->
<keepclasseswithmembernames>
<method access="native" />
</keepclasseswithmembernames>
<!-- Preserve the methods that are required in all enumeration classes. -->
<keepclassmembers extends="java.lang.Enum">
<method access="public static"
type="**[]"
name="values"
parameters="" />
<method access="public static"
type="**"
name="valueOf"
parameters="java.lang.String" />
</keepclassmembers>
<!-- Explicitly preserve all serialization members. The Serializable
interface is only a marker interface, so it wouldn't save them.
You can comment this out if your library doesn't use serialization.
If your code contains serializable classes that have to be backward
compatible, please refer to the manual. -->
<keepclassmembers implements="java.io.Serializable">
<field access ="static final"
type ="long"
name ="serialVersionUID" />
<field access ="static final"
type ="java.io.ObjectStreamField[]"
name ="serialPersistentFields" />
<method access ="private"
type ="void"
name ="writeObject"
parameters="java.io.ObjectOutputStream" />
<method access ="private"
type ="void"
name ="readObject"
parameters="java.io.ObjectInputStream" />
<method type ="java.lang.Object"
name ="writeReplace"
parameters="" />
<method type ="java.lang.Object"
name ="readResolve"
parameters="" />
</keepclassmembers>
<!-- Your application may contain more items that need to be preserved;
typically classes that are dynamically created using Class.forName -->
</proguard>
</target>
</project>

View File

@ -0,0 +1,102 @@
<!-- This Ant build file illustrates how to process a program library,
such that it remains usable as a library.
Usage: ant -f library.xml -->
<project name="Library" default="obfuscate" basedir="../..">
<target name="obfuscate">
<taskdef resource="proguard/ant/task.properties"
classpath="lib/proguard.jar" />
<proguard printmapping="out.map"
renamesourcefileattribute="SourceFile">
<!-- Specify the input jars, output jars, and library jars. -->
<injar file="library.jar" />
<outjar file="library_out.jar" />
<libraryjar file="${java.home}/lib/rt.jar" />
<!-- Keep some useful attributes. -->
<keepattribute name="InnerClasses" />
<keepattribute name="SourceFile" />
<keepattribute name="LineNumberTable" />
<keepattribute name="Deprecated" />
<keepattribute name="*Annotation*" />
<!-- Preserve all public classes, and their public and protected fields
and methods. -->
<keep access="public">
<field access="public protected" />
<method access="public protected" />
</keep>
<!-- Preserve all .class method names. -->
<keepclassmembernames access="public">
<method type ="java.lang.Class"
name ="class$"
parameters="java.lang.String" />
<method type ="java.lang.Class"
name ="class$"
parameters="java.lang.String,boolean" />
</keepclassmembernames>
<!-- Preserve all native method names and the names of their classes. -->
<keepclasseswithmembernames>
<method access="native" />
</keepclasseswithmembernames>
<!-- Preserve the methods that are required in all enumeration classes. -->
<keepclassmembers extends="java.lang.Enum">
<method access="public static"
type="**[]"
name="values"
parameters="" />
<method access="public static"
type="**"
name="valueOf"
parameters="java.lang.String" />
</keepclassmembers>
<!-- Explicitly preserve all serialization members. The Serializable
interface is only a marker interface, so it wouldn't save them.
You can comment this out if your library doesn't use serialization.
If your code contains serializable classes that have to be backward
compatible, please refer to the manual. -->
<keepclassmembers implements="java.io.Serializable">
<field access ="final"
type ="long"
name ="serialVersionUID" />
<field access ="static final"
type ="java.io.ObjectStreamField[]"
name ="serialPersistentFields" />
<method access ="private"
type ="void"
name ="writeObject"
parameters="java.io.ObjectOutputStream" />
<method access ="private"
type ="void"
name ="readObject"
parameters="java.io.ObjectInputStream" />
<method type ="java.lang.Object"
name ="writeReplace"
parameters="" />
<method type ="java.lang.Object"
name ="readResolve"
parameters="" />
</keepclassmembers>
<!-- Your application may contain more items that need to be preserved;
typically classes that are dynamically created using Class.forName -->
</proguard>
</target>
</project>

View File

@ -0,0 +1,52 @@
<!-- This Ant build file illustrates how to process J2ME midlets.
Usage: ant -f midlets.xml -->
<project name="Midlets" default="obfuscate" basedir="../..">
<target name="obfuscate">
<taskdef resource="proguard/ant/task.properties"
classpath="lib/proguard.jar" />
<proguard microedition="on"
printseeds="on"
printmapping="out.map"
overloadaggressively="on"
repackageclasses=""
allowaccessmodification="on"
renamesourcefileattribute="SourceFile">
<!-- On Windows, you can't use mixed case class names,
should you still want to use the preverify tool.
usemixedcaseclassnames="false">
-->
<!-- Specify the input jars, output jars, and library jars. -->
<injar file="in.jar" />
<outjar file="out.jar" />
<libraryjar file="/usr/local/java/wtk2.5.2/lib/midpapi20.jar" />
<libraryjar file="/usr/local/java/wtk2.5.2/lib/cldcapi11.jar" />
<!-- Optionally preserve line numbers in the obfuscated stack traces.
<keepattribute name="LineNumberTable">
<keepattribute name="SourceFile">
-->
<!-- Preserve all public midlets. -->
<keep access="public" extends="javax.microedition.midlet.MIDlet" />
<!-- Preserve all native method names and the names of their classes. -->
<keepclasseswithmembernames>
<method access="native" />
</keepclasseswithmembernames>
<!-- Your application may contain more items that need to be preserved;
typically classes that are dynamically created using Class.forName -->
</proguard>
</target>
</project>

View File

@ -0,0 +1,78 @@
<!-- This Ant build file illustrates how to process ProGuard (including its
main application, its GUI, its Ant task, and its WTK plugin), and the
ReTrace tool, all in one go.
Usage: ant -f proguard.xml -->
<project name="ProGuard" default="obfuscate" basedir="../..">
<target name="obfuscate">
<taskdef resource="proguard/ant/task.properties"
classpath="lib/proguard.jar" />
<proguard printmapping="proguard.map"
overloadaggressively="on"
repackageclasses=""
renamesourcefileattribute="SourceFile">
<!-- Specify the input jars, output jars, and library jars. -->
<injar file="lib/proguard.jar" />
<injar file="lib/proguardgui.jar" filter="!META-INF/**" />
<injar file="lib/retrace.jar" filter="!META-INF/**" />
<outjar file="examples/ant/proguard_out.jar" />
<libraryjar file="${java.home}/lib/rt.jar" />
<libraryjar file="/usr/local/java/ant/lib/ant.jar" />
<libraryjar file="/usr/local/java/wtk2.5.2/wtklib/kenv.zip" />
<!-- Adapt the resource file names, based on the corresponding obfuscated
class names. -->
<adaptresourcefilenames filter="**.properties,**.gif,**.jpg" />
<adaptresourcefilecontents filter="proguard/ant/task.properties" />
<!-- Optionally preserve line numbers in the obfuscated stack traces.
<keepattribute name="LineNumberTable">
<keepattribute name="SourceFile">
-->
<!-- The main seeds: ProGuard and its companion tool ReTrace. -->
<keep access="public" name="proguard.ProGuard">
<method access ="public static"
type ="void"
name ="main"
parameters="java.lang.String[]" />
</keep>
<keep access="public" name="proguard.gui.ProGuardGUI">
<method access ="public static"
type ="void"
name ="main"
parameters="java.lang.String[]" />
</keep>
<keep access="public" name="proguard.retrace.ReTrace">
<method access ="public static"
type ="void"
name ="main"
parameters="java.lang.String[]" />
</keep>
<!-- If we have ant.jar, we can properly process the Ant task. -->
<keeppackagename name="proguard.ant" />
<keep name="proguard.ant.*" allowobfuscation="true" />
<keepclassmembers access="public" name="proguard.ant.*">
<constructor parameters="org.apache.tools.ant.Project" />
<method access="public" type="void" name="set*" parameters="***" />
<method access="public" type="void" name="add*" parameters="***" />
</keepclassmembers>
<!-- If we have kenv.zip, we can process the J2ME WTK plugin. -->
<keep access="public" name="proguard.wtk.ProGuardObfuscator" />
</proguard>
</target>
</project>

View File

@ -0,0 +1,88 @@
<!-- This Ant build file illustrates how to process servlets.
Usage: ant -f servlets.xml -->
<project name="Servlets" default="obfuscate" basedir="../..">
<target name="obfuscate">
<taskdef resource="proguard/ant/task.properties"
classpath="lib/proguard.jar" />
<proguard printseeds="on"
printmapping="proguard.map"
renamesourcefileattribute="SourceFile">
<!-- Specify the input jars, output jars, and library jars. -->
<injar file="in.jar" />
<outjar file="out.jar" />
<libraryjar file="${java.home}/lib/rt.jar" />
<!-- Optionally preserve line numbers in the obfuscated stack traces.
<keepattribute name="LineNumberTable">
<keepattribute name="SourceFile">
-->
<!-- Preserve all annotations. -->
<keepattribute name="*Annotation*" />
<!-- Keep all public servlets. -->
<keep access="public" implements="javax.servlet.Servlet" />
<!-- Preserve all native method names and the names of their classes. -->
<keepclasseswithmembernames>
<method access="native" />
</keepclasseswithmembernames>
<!-- Preserve the methods that are required in all enumeration classes. -->
<keepclassmembers extends="java.lang.Enum">
<method access="public static"
type="**[]"
name="values"
parameters="" />
<method access="public static"
type="**"
name="valueOf"
parameters="java.lang.String" />
</keepclassmembers>
<!-- Explicitly preserve all serialization members. The Serializable
interface is only a marker interface, so it wouldn't save them.
You can comment this out if your library doesn't use serialization.
If your code contains serializable classes that have to be backward
compatible, please refer to the manual. -->
<keepclassmembers implements="java.io.Serializable">
<field access ="static final"
type ="long"
name ="serialVersionUID" />
<field access ="static final"
type ="java.io.ObjectStreamField[]"
name ="serialPersistentFields" />
<method access ="private"
type ="void"
name ="writeObject"
parameters="java.io.ObjectOutputStream" />
<method access ="private"
type ="void"
name ="readObject"
parameters="java.io.ObjectInputStream" />
<method type ="java.lang.Object"
name ="writeReplace"
parameters="" />
<method type ="java.lang.Object"
name ="readResolve"
parameters="" />
</keepclassmembers>
<!-- Your application may contain more items that need to be preserved;
typically classes that are dynamically created using Class.forName -->
</proguard>
</target>
</project>

View File

@ -0,0 +1,69 @@
#
# This ProGuard configuration file illustrates how to process applets.
# Usage:
# java -jar proguard.jar @applets.pro
#
# Specify the input jars, output jars, and library jars.
-injars in.jar
-outjars out.jar
-libraryjars <java.home>/lib/rt.jar
# Save the obfuscation mapping to a file, so you can de-obfuscate any stack
# traces later on. Keep a fixed source file attribute and all line number
# tables to get line numbers in the stack traces.
# You can comment this out if you're not interested in stack traces.
-printmapping out.map
-renamesourcefileattribute SourceFile
-keepattributes SourceFile,LineNumberTable
# Preserve all annotations.
-keepattributes *Annotation*
# You can print out the seeds that are matching the keep options below.
#-printseeds out.seeds
# Preserve all public applets.
-keep public class * extends java.applet.Applet
# Preserve all native method names and the names of their classes.
-keepclasseswithmembernames class * {
native <methods>;
}
# Preserve the special static methods that are required in all enumeration
# classes.
-keepclassmembers class * extends java.lang.Enum {
public static **[] values();
public static ** valueOf(java.lang.String);
}
# Explicitly preserve all serialization members. The Serializable interface
# is only a marker interface, so it wouldn't save them.
# You can comment this out if your library doesn't use serialization.
# If your code contains serializable classes that have to be backward
# compatible, please refer to the manual.
-keepclassmembers class * implements java.io.Serializable {
static final long serialVersionUID;
static final java.io.ObjectStreamField[] serialPersistentFields;
private void writeObject(java.io.ObjectOutputStream);
private void readObject(java.io.ObjectInputStream);
java.lang.Object writeReplace();
java.lang.Object readResolve();
}
# Your application may contain more items that need to be preserved;
# typically classes that are dynamically created using Class.forName:
# -keep public class mypackage.MyClass
# -keep public interface mypackage.MyInterface
# -keep public class * implements mypackage.MyInterface

View File

@ -0,0 +1,75 @@
#
# This ProGuard configuration file illustrates how to process applications.
# Usage:
# java -jar proguard.jar @applications.pro
#
# Specify the input jars, output jars, and library jars.
-injars in.jar
-outjars out.jar
-libraryjars <java.home>/lib/rt.jar
#-libraryjars junit.jar
#-libraryjars servlet.jar
#-libraryjars jai_core.jar
#...
# Save the obfuscation mapping to a file, so you can de-obfuscate any stack
# traces later on. Keep a fixed source file attribute and all line number
# tables to get line numbers in the stack traces.
# You can comment this out if you're not interested in stack traces.
-printmapping out.map
-renamesourcefileattribute SourceFile
-keepattributes SourceFile,LineNumberTable
# Preserve all annotations.
-keepattributes *Annotation*
# You can print out the seeds that are matching the keep options below.
#-printseeds out.seeds
# Preserve all public applications.
-keepclasseswithmembers public class * {
public static void main(java.lang.String[]);
}
# Preserve all native method names and the names of their classes.
-keepclasseswithmembernames class * {
native <methods>;
}
# Preserve the special static methods that are required in all enumeration
# classes.
-keepclassmembers class * extends java.lang.Enum {
public static **[] values();
public static ** valueOf(java.lang.String);
}
# Explicitly preserve all serialization members. The Serializable interface
# is only a marker interface, so it wouldn't save them.
# You can comment this out if your application doesn't use serialization.
# If your code contains serializable classes that have to be backward
# compatible, please refer to the manual.
-keepclassmembers class * implements java.io.Serializable {
static final long serialVersionUID;
static final java.io.ObjectStreamField[] serialPersistentFields;
private void writeObject(java.io.ObjectOutputStream);
private void readObject(java.io.ObjectInputStream);
java.lang.Object writeReplace();
java.lang.Object readResolve();
}
# Your application may contain more items that need to be preserved;
# typically classes that are dynamically created using Class.forName:
# -keep public class mypackage.MyClass
# -keep public interface mypackage.MyInterface
# -keep public class * implements mypackage.MyInterface

View File

@ -0,0 +1,18 @@
#
# This obfuscation dictionary contains strings that are already present
# in many class files. Since these strings can be shared, the resulting
# obfuscated class files will generally be a little bit more compact.
# Usage:
# java -jar proguard.jar ..... -obfuscationdictionary compact.txt
#
Code
V
I
Z
B
C
S
F
D
L

View File

@ -0,0 +1,58 @@
#
# This obfuscation dictionary contains reserved Java keywords. They can't
# be used in Java source files, but they can be used in compiled class files.
# Note that this hardly improves the obfuscation. Decent decompilers can
# automatically replace reserved keywords, and the effect can fairly simply be
# undone by obfuscating again with simpler names.
# Usage:
# java -jar proguard.jar ..... -obfuscationdictionary keywords.txt
#
do
if
for
int
new
try
byte
case
char
else
goto
long
this
void
break
catch
class
const
final
float
short
super
throw
while
double
import
native
public
return
static
switch
throws
boolean
default
extends
finally
package
private
abstract
continue
strictfp
volatile
interface
protected
transient
implements
instanceof
synchronized

View File

@ -0,0 +1,23 @@
#
# This obfuscation dictionary contains quotes from plays by Shakespeare.
# It illustrates that any text can be used, for whatever flippant reasons
# one may have.
# Usage:
# java -jar proguard.jar ..... -obfuscationdictionary shakespeare.txt
#
"This thing of darkness I acknowledge mine."
--From The Tempest (V, i, 275-276)
"Though this be madness, yet there is method in 't."
--From Hamlet (II, ii, 206)
"What's in a name? That which we call a rose
By any other word would smell as sweet."
--From Romeo and Juliet (II, ii, 1-2)

View File

@ -0,0 +1,209 @@
#
# This obfuscation dictionary contains names that are not allowed as file names
# in Windows, not even with extensions like .class or .java. They can however
# be used without problems in jar archives, which just begs to apply them as
# obfuscated class names. Trying to unpack the obfuscated archives in Windows
# will probably generate some sparks.
# Usage:
# java -jar proguard.jar ..... -classobfuscationdictionary windows.txt
# -packageobfuscationdictionary windows.txt
#
aux
Aux
aUx
AUx
auX
AuX
aUX
AUX
AUX
con
Con
cOn
COn
coN
CoN
cON
CON
CON
nul
Nul
nUl
NUl
nuL
NuL
nUL
NUL
NUL
prn
Prn
pRn
PRn
prN
PrN
pRN
PRN
PRN
com1
Com1
cOm1
COm1
coM1
CoM1
cOM1
COM1
COM1
com2
Com2
cOm2
COm2
coM2
CoM2
cOM2
COM2
COM2
com3
Com3
cOm3
COm3
coM3
CoM3
cOM3
COM3
COM3
com4
Com4
cOm4
COm4
coM4
CoM4
cOM4
COM4
COM4
com5
Com5
cOm5
COm5
coM5
CoM5
cOM5
COM5
COM5
com6
Com6
cOm6
COm6
coM6
CoM6
cOM6
COM6
COM6
com7
Com7
cOm7
COm7
coM7
CoM7
cOM7
COM7
COM7
com8
Com8
cOm8
COm8
coM8
CoM8
cOM8
COM8
COM8
com9
Com9
cOm9
COm9
coM9
CoM9
cOM9
COM9
COM9
lpt1
Lpt1
lPt1
LPt1
lpT1
LpT1
lPT1
LPT1
LPT1
lpt2
Lpt2
lPt2
LPt2
lpT2
LpT2
lPT2
LPT2
LPT2
lpt3
Lpt3
lPt3
LPt3
lpT3
LpT3
lPT3
LPT3
LPT3
lpt4
Lpt4
lPt4
LPt4
lpT4
LpT4
lPT4
LPT4
LPT4
lpt5
Lpt5
lPt5
LPt5
lpT5
LpT5
lPT5
LPT5
LPT5
lpt6
Lpt6
lPt6
LPt6
lpT6
LpT6
lPT6
LPT6
LPT6
lpt7
Lpt7
lPt7
LPt7
lpT7
LpT7
lPT7
LPT7
LPT7
lpt8
Lpt8
lPt8
LPt8
lpT8
LpT8
lPT8
LPT8
LPT8
lpt9
Lpt9
lPt9
LPt9
lpT9
LpT9
lPT9
LPT9
LPT9

View File

@ -0,0 +1,79 @@
#
# This ProGuard configuration file illustrates how to process a program
# library, such that it remains usable as a library.
# Usage:
# java -jar proguard.jar @library.pro
#
# Specify the input jars, output jars, and library jars.
# In this case, the input jar is the program library that we want to process.
-injars in.jar
-outjars out.jar
-libraryjars <java.home>/lib/rt.jar
# Save the obfuscation mapping to a file, so we can de-obfuscate any stack
# traces later on. Keep a fixed source file attribute and all line number
# tables to get line numbers in the stack traces.
# You can comment this out if you're not interested in stack traces.
-printmapping out.map
-keepparameternames
-renamesourcefileattribute SourceFile
-keepattributes Exceptions,InnerClasses,Signature,Deprecated,
SourceFile,LineNumberTable,EnclosingMethod
# Preserve all annotations.
-keepattributes *Annotation*
# Preserve all public classes, and their public and protected fields and
# methods.
-keep public class * {
public protected *;
}
# Preserve all .class method names.
-keepclassmembernames class * {
java.lang.Class class$(java.lang.String);
java.lang.Class class$(java.lang.String, boolean);
}
# Preserve all native method names and the names of their classes.
-keepclasseswithmembernames class * {
native <methods>;
}
# Preserve the special static methods that are required in all enumeration
# classes.
-keepclassmembers class * extends java.lang.Enum {
public static **[] values();
public static ** valueOf(java.lang.String);
}
# Explicitly preserve all serialization members. The Serializable interface
# is only a marker interface, so it wouldn't save them.
# You can comment this out if your library doesn't use serialization.
# If your code contains serializable classes that have to be backward
# compatible, please refer to the manual.
-keepclassmembers class * implements java.io.Serializable {
static final long serialVersionUID;
static final java.io.ObjectStreamField[] serialPersistentFields;
private void writeObject(java.io.ObjectOutputStream);
private void readObject(java.io.ObjectInputStream);
java.lang.Object writeReplace();
java.lang.Object readResolve();
}
# Your library may contain more items that need to be preserved;
# typically classes that are dynamically created using Class.forName:
# -keep public class mypackage.MyClass
# -keep public interface mypackage.MyInterface
# -keep public class * implements mypackage.MyInterface

View File

@ -0,0 +1,67 @@
#
# This ProGuard configuration file illustrates how to process J2ME midlets.
# Usage:
# java -jar proguard.jar @midlets.pro
#
# Specify the input jars, output jars, and library jars.
-injars in.jar
-outjars out.jar
-libraryjars /usr/local/java/wtk2.5.2/lib/midpapi20.jar
-libraryjars /usr/local/java/wtk2.5.2/lib/cldcapi11.jar
# Preverify the code suitably for Java Micro Edition.
-microedition
# Allow methods with the same signature, except for the return type,
# to get the same obfuscation name.
-overloadaggressively
# Put all obfuscated classes into the nameless root package.
-repackageclasses ''
# Allow classes and class members to be made public.
-allowaccessmodification
# On Windows, you can't use mixed case class names,
# should you still want to use the preverify tool.
#
# -dontusemixedcaseclassnames
# Save the obfuscation mapping to a file, so you can de-obfuscate any stack
# traces later on.
-printmapping out.map
# You can keep a fixed source file attribute and all line number tables to
# get stack traces with line numbers.
#-renamesourcefileattribute SourceFile
#-keepattributes SourceFile,LineNumberTable
# You can print out the seeds that are matching the keep options below.
#-printseeds out.seeds
# Preserve all public midlets.
-keep public class * extends javax.microedition.midlet.MIDlet
# Preserve all native method names and the names of their classes.
-keepclasseswithmembernames class * {
native <methods>;
}
# Your midlet may contain more items that need to be preserved;
# typically classes that are dynamically created using Class.forName:
# -keep public class mypackage.MyClass
# -keep public interface mypackage.MyInterface
# -keep public class * implements mypackage.MyInterface

View File

@ -0,0 +1,57 @@
#
# This ProGuard configuration file illustrates how to process ProGuard itself.
# Configuration files for typical applications will be very similar.
# Usage:
# java -jar proguard.jar @proguard.pro
#
# Specify the input jars, output jars, and library jars.
# We'll filter out the Ant and WTK classes, keeping everything else.
-injars ../lib/proguard.jar(!proguard/ant/**,!proguard/wtk/**)
-outjars proguard_out.jar
-libraryjars <java.home>/lib/rt.jar
# Write out an obfuscation mapping file, for de-obfuscating any stack traces
# later on, or for incremental obfuscation of extensions.
-printmapping proguard.map
# Allow methods with the same signature, except for the return type,
# to get the same obfuscation name.
-overloadaggressively
# Put all obfuscated classes into the nameless root package.
-repackageclasses ''
# Allow classes and class members to be made public.
-allowaccessmodification
# The entry point: ProGuard and its main method.
-keep public class proguard.ProGuard {
public static void main(java.lang.String[]);
}
# If you want to preserve the Ant task as well, you'll have to specify the
# main ant.jar.
#-libraryjars /usr/local/java/ant/lib/ant.jar
#-adaptresourcefilecontents proguard/ant/task.properties
#
#-keep,allowobfuscation class proguard.ant.*
#-keepclassmembers public class proguard.ant.* {
# <init>(org.apache.tools.ant.Project);
# public void set*(***);
# public void add*(***);
#}
# If you want to preserve the WTK obfuscation plug-in, you'll have to specify
# the kenv.zip file.
#-libraryjars /usr/local/java/wtk2.5.2/wtklib/kenv.zip
#-keep public class proguard.wtk.ProGuardObfuscator

View File

@ -0,0 +1,62 @@
#
# This ProGuard configuration file illustrates how to process ProGuard
# (including its main application, its GUI, its Ant task, and its WTK plugin),
# and the ReTrace tool, all in one go.
# Configuration files for typical applications will be very similar.
# Usage:
# java -jar proguard.jar @proguardall.pro
#
# Specify the input jars, output jars, and library jars.
# We'll read all jars from the lib directory, process them, and write the
# processed jars to a new out directory.
-injars ../lib
-outjars out
# You may have to adapt the paths below.
-libraryjars <java.home>/lib/rt.jar
-libraryjars /usr/local/java/ant/lib/ant.jar
-libraryjars /usr/local/java/wtk2.5.2/wtklib/kenv.zip
# Allow methods with the same signature, except for the return type,
# to get the same obfuscation name.
-overloadaggressively
# Put all obfuscated classes into the nameless root package.
-repackageclasses ''
# Adapt the names and contents of the resource files.
-adaptresourcefilenames **.properties,**.gif,**.jpg
-adaptresourcefilecontents proguard/ant/task.properties
# The main entry points.
-keep public class proguard.ProGuard {
public static void main(java.lang.String[]);
}
-keep public class proguard.gui.ProGuardGUI {
public static void main(java.lang.String[]);
}
-keep public class proguard.retrace.ReTrace {
public static void main(java.lang.String[]);
}
# If we have ant.jar, we can properly process the Ant task.
-keep,allowobfuscation class proguard.ant.*
-keepclassmembers public class proguard.ant.* {
<init>(org.apache.tools.ant.Project);
public void set*(***);
public void add*(***);
}
# If we have kenv.zip, we can process the J2ME WTK plugin.
-keep public class proguard.wtk.ProGuardObfuscator

View File

@ -0,0 +1,50 @@
#
# This ProGuard configuration file illustrates how to process the ProGuard GUI.
# Configuration files for typical applications will be very similar.
# Usage:
# java -jar proguard.jar @proguardgui.pro
#
# Specify the input jars, output jars, and library jars.
# The input jars will be merged in a single output jar.
# We'll filter out the Ant and WTK classes.
-injars ../lib/proguardgui.jar
-injars ../lib/proguard.jar(!META-INF/**,!proguard/ant/**,!proguard/wtk/**)
-injars ../lib/retrace.jar (!META-INF/**)
-outjars proguardgui_out.jar
-libraryjars <java.home>/lib/rt.jar
# If we wanted to reuse the previously obfuscated proguard_out.jar, we could
# perform incremental obfuscation based on its mapping file, and only keep the
# additional GUI files instead of all files.
#-applymapping proguard.map
#-injars ../lib/proguardgui.jar
#-outjars proguardgui_out.jar
#-libraryjars ../lib/proguard.jar(!proguard/ant/**,!proguard/wtk/**)
#-libraryjars ../lib/retrace.jar
#-libraryjars <java.home>/lib/rt.jar
# Allow methods with the same signature, except for the return type,
# to get the same obfuscation name.
-overloadaggressively
# Put all obfuscated classes into the nameless root package.
-repackageclasses ''
# Adapt the names of resource files, based on the corresponding obfuscated
# class names. Notably, in this case, the GUI resource properties file will
# have to be renamed.
-adaptresourcefilenames **.properties,**.gif,**.jpg
# The entry point: ProGuardGUI and its main method.
-keep public class proguard.gui.ProGuardGUI {
public static void main(java.lang.String[]);
}

View File

@ -0,0 +1,43 @@
#
# This ProGuard configuration file illustrates how to process the ReTrace tool.
# Configuration files for typical applications will be very similar.
# Usage:
# java -jar proguard.jar @retrace.pro
#
# Specify the input jars, output jars, and library jars.
# The input jars will be merged in a single output jar.
# We'll filter out the Ant and WTK classes.
-injars ../lib/retrace.jar
-injars ../lib/proguard.jar(!META-INF/MANIFEST.MF,
!proguard/ant/**,!proguard/wtk/**)
-outjars retrace_out.jar
-libraryjars <java.home>/lib/rt.jar
# If we wanted to reuse the previously obfuscated proguard_out.jar, we could
# perform incremental obfuscation based on its mapping file, and only keep the
# additional ReTrace files instead of all files.
#-applymapping proguard.map
#-outjars retrace_out.jar(proguard/retrace/**)
# Allow methods with the same signature, except for the return type,
# to get the same obfuscation name.
-overloadaggressively
# Put all obfuscated classes into the nameless root package.
-repackageclasses ''
# Allow classes and class members to be made public.
-allowaccessmodification
# The entry point: ReTrace and its main method.
-keep public class proguard.retrace.ReTrace {
public static void main(java.lang.String[]);
}

View File

@ -0,0 +1,132 @@
#
# This ProGuard configuration file illustrates how to process Scala
# applications, including the Scala runtime.
# Usage:
# java -jar proguard.jar @scala.pro
#
# Specify the input jars, output jars, and library jars.
-injars in.jar
-injars /usr/local/java/scala-2.9.1/lib/scala-library.jar
#-injars /usr/local/java/scala-2.9.1/lib/scala-compiler.jar(!META-INF/MANIFEST.MF)
#-injars /usr/local/java/scala-2.9.1/lib/jline.jar(!META-INF/MANIFEST.MF)
-outjars out.jar
-libraryjars <java.home>/lib/rt.jar
#-libraryjars /usr/local/java/ant/lib/ant.jar
#...
# Ignore some compiler artefacts.
-dontwarn scala.**
# Save the obfuscation mapping to a file, so you can de-obfuscate any stack
# traces later on. Keep a fixed source file attribute and all line number
# tables to get line numbers in the stack traces.
# You can comment this out if you're not interested in stack traces.
-printmapping out.map
-renamesourcefileattribute SourceFile
-keepattributes SourceFile,LineNumberTable
# Preserve all annotations.
-keepattributes *Annotation*
# You can print out the seeds that are matching the keep options below.
#-printseeds out.seeds
# Preserve all public applications.
-keepclasseswithmembers public class * {
public static void main(java.lang.String[]);
}
# Preserve some classes and class members that are accessed by means of
# introspection.
-keep class * implements org.xml.sax.EntityResolver
-keepclassmembers class * {
** MODULE$;
}
-keepclassmembernames class scala.concurrent.forkjoin.ForkJoinPool {
long eventCount;
int workerCounts;
int runControl;
scala.concurrent.forkjoin.ForkJoinPool$WaitQueueNode syncStack;
scala.concurrent.forkjoin.ForkJoinPool$WaitQueueNode spareStack;
}
-keepclassmembernames class scala.concurrent.forkjoin.ForkJoinWorkerThread {
int base;
int sp;
int runState;
}
-keepclassmembernames class scala.concurrent.forkjoin.ForkJoinTask {
int status;
}
-keepclassmembernames class scala.concurrent.forkjoin.LinkedTransferQueue {
scala.concurrent.forkjoin.LinkedTransferQueue$PaddedAtomicReference head;
scala.concurrent.forkjoin.LinkedTransferQueue$PaddedAtomicReference tail;
scala.concurrent.forkjoin.LinkedTransferQueue$PaddedAtomicReference cleanMe;
}
# Preserve some classes and class members that are accessed by means of
# introspection in the Scala compiler library, if it is processed as well.
#-keep class * implements jline.Completor
#-keep class * implements jline.Terminal
#-keep class scala.tools.nsc.Global
#-keepclasseswithmembers class * {
# <init>(scala.tools.nsc.Global);
#}
#-keepclassmembers class * {
# *** scala_repl_value();
# *** scala_repl_result();
#}
# Preserve all native method names and the names of their classes.
-keepclasseswithmembernames class * {
native <methods>;
}
# Preserve the special static methods that are required in all enumeration
# classes.
-keepclassmembers class * extends java.lang.Enum {
public static **[] values();
public static ** valueOf(java.lang.String);
}
# Explicitly preserve all serialization members. The Serializable interface
# is only a marker interface, so it wouldn't save them.
# You can comment this out if your application doesn't use serialization.
# If your code contains serializable classes that have to be backward
# compatible, please refer to the manual.
-keepclassmembers class * implements java.io.Serializable {
static final long serialVersionUID;
static final java.io.ObjectStreamField[] serialPersistentFields;
private void writeObject(java.io.ObjectOutputStream);
private void readObject(java.io.ObjectInputStream);
java.lang.Object writeReplace();
java.lang.Object readResolve();
}
# Your application may contain more items that need to be preserved;
# typically classes that are dynamically created using Class.forName:
# -keep public class mypackage.MyClass
# -keep public interface mypackage.MyInterface
# -keep public class * implements mypackage.MyInterface

View File

@ -0,0 +1,70 @@
#
# This ProGuard configuration file illustrates how to process servlets.
# Usage:
# java -jar proguard.jar @servlets.pro
#
# Specify the input jars, output jars, and library jars.
-injars in.jar
-outjars out.jar
-libraryjars <java.home>/lib/rt.jar
-libraryjars /usr/local/java/servlet/servlet.jar
# Save the obfuscation mapping to a file, so you can de-obfuscate any stack
# traces later on. Keep a fixed source file attribute and all line number
# tables to get line numbers in the stack traces.
# You can comment this out if you're not interested in stack traces.
-printmapping out.map
-renamesourcefileattribute SourceFile
-keepattributes SourceFile,LineNumberTable
# Preserve all annotations.
-keepattributes *Annotation*
# You can print out the seeds that are matching the keep options below.
#-printseeds out.seeds
# Preserve all public servlets.
-keep public class * implements javax.servlet.Servlet
# Preserve all native method names and the names of their classes.
-keepclasseswithmembernames class * {
native <methods>;
}
# Preserve the special static methods that are required in all enumeration
# classes.
-keepclassmembers class * extends java.lang.Enum {
public static **[] values();
public static ** valueOf(java.lang.String);
}
# Explicitly preserve all serialization members. The Serializable interface
# is only a marker interface, so it wouldn't save them.
# You can comment this out if your library doesn't use serialization.
# If your code contains serializable classes that have to be backward
# compatible, please refer to the manual.
-keepclassmembers class * implements java.io.Serializable {
static final long serialVersionUID;
static final java.io.ObjectStreamField[] serialPersistentFields;
private void writeObject(java.io.ObjectOutputStream);
private void readObject(java.io.ObjectInputStream);
java.lang.Object writeReplace();
java.lang.Object readResolve();
}
# Your application may contain more items that need to be preserved;
# typically classes that are dynamically created using Class.forName:
# -keep public class mypackage.MyClass
# -keep public interface mypackage.MyInterface
# -keep public class * implements mypackage.MyInterface

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,49 @@
<!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>ProGuard License</title>
</head>
<body>
<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.
<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
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
redistribute the program, modified or as is, on the condition that you make
the complete source code available as well. If you develop a program that is
linked with
<b>ProGuard</b>, the program as a whole has to be distributed at no charge
under the GPL. I am granting a <a href="GPL_exception.html">special
exception</a> to the latter clause (in wording suggested by
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 Simple Build Tool for Scala, the NeoMAD Tools by
Neomades, the Javaground Tools, 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.
<hr />
<noscript><div><a target="_top" href="index.html" class="button">Show menu</a></div></noscript>
<address>
Copyright &copy; 2002-2011
<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>.
</address>
</body>
</html>

View File

@ -0,0 +1,64 @@
# This is a configuration file for ProGuard.
# http://proguard.sourceforge.net/index.html#manual/usage.html
# Optimizations: If you don't want to optimize, use the
# proguard-android.txt configuration file instead of this one, which
# turns off the optimization flags. Adding optimization introduces
# certain risks, since for example not all optimizations performed by
# ProGuard works on all versions of Dalvik. The following flags turn
# off various optimizations known to have issues, but the list may not
# be complete or up to date. (The "arithmetic" optimization can be
# used if you are only targeting Android 2.0 or later.) Make sure you
# test thoroughly if you go this route.
-optimizations !code/simplification/arithmetic,!code/simplification/cast,!field/*,!class/merging/*
-optimizationpasses 5
-allowaccessmodification
-dontpreverify
# The remainder of this file is identical to the non-optimized version
# of the Proguard configuration file (except that the other file has
# flags to turn off optimization).
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-verbose
-keepattributes *Annotation*
-keep public class com.google.vending.licensing.ILicensingService
-keep public class com.android.vending.licensing.ILicensingService
# For native methods, see http://proguard.sourceforge.net/manual/examples.html#native
-keepclasseswithmembernames class * {
native <methods>;
}
# keep setters in Views so that animations can still work.
# see http://proguard.sourceforge.net/manual/examples.html#beans
-keepclassmembers public class * extends android.view.View {
void set*(***);
*** get*();
}
# We want to keep methods in Activity that could be used in the XML attribute onClick
-keepclassmembers class * extends android.app.Activity {
public void *(android.view.View);
}
# For enumeration classes, see http://proguard.sourceforge.net/manual/examples.html#enumerations
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
-keep class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator *;
}
-keepclassmembers class **.R$* {
public static <fields>;
}
# The support library contains references to newer platform versions.
# Don't warn about those in case this app is linking against an older
# platform version. We know about them, and they are safe.
-dontwarn android.support.**

View File

@ -0,0 +1,57 @@
# This is a configuration file for ProGuard.
# http://proguard.sourceforge.net/index.html#manual/usage.html
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-verbose
# Optimization is turned off by default. Dex does not like code run
# through the ProGuard optimize and preverify steps (and performs some
# of these optimizations on its own).
-dontoptimize
-dontpreverify
# Note that if you want to enable optimization, you cannot just
# include optimization flags in your own project configuration file;
# instead you will need to point to the
# "proguard-android-optimize.txt" file instead of this one from your
# project.properties file.
-keepattributes *Annotation*
-keep public class com.google.vending.licensing.ILicensingService
-keep public class com.android.vending.licensing.ILicensingService
# For native methods, see http://proguard.sourceforge.net/manual/examples.html#native
-keepclasseswithmembernames class * {
native <methods>;
}
# keep setters in Views so that animations can still work.
# see http://proguard.sourceforge.net/manual/examples.html#beans
-keepclassmembers public class * extends android.view.View {
void set*(***);
*** get*();
}
# We want to keep methods in Activity that could be used in the XML attribute onClick
-keepclassmembers class * extends android.app.Activity {
public void *(android.view.View);
}
# For enumeration classes, see http://proguard.sourceforge.net/manual/examples.html#enumerations
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
-keep class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator *;
}
-keepclassmembers class **.R$* {
public static <fields>;
}
# The support library contains references to newer platform versions.
# Don't warn about those in case this app is linking against an older
# platform version. We know about them, and they are safe.
-dontwarn android.support.**

View File

@ -0,0 +1,20 @@
# To enable ProGuard in your project, edit project.properties
# to define the proguard.config property as described in that file.
#
# Add project specific ProGuard rules here.
# By default, the flags in this file are appended to flags specified
# in ${sdk.dir}/tools/proguard/proguard-android.txt
# You can edit the include path and order by changing the ProGuard
# include property in project.properties.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# Add any project specific keep options here:
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}