Merge lp:~scarneiro/ubuntu/quantal/proguard/fix-for-888982 into lp:ubuntu/quantal/proguard

Proposed by Sebastian Carneiro
Status: Merged
Merge reported by: James Page
Merged at revision: not available
Proposed branch: lp:~scarneiro/ubuntu/quantal/proguard/fix-for-888982
Merge into: lp:ubuntu/quantal/proguard
Diff against target: 35530 lines (+14860/-5437)
658 files modified
.pc/.quilt_patches (+1/-0)
.pc/.quilt_series (+1/-0)
.pc/.version (+1/-0)
README (+1/-1)
bin/proguard.bat (+5/-1)
bin/proguard.sh (+5/-2)
bin/proguardgui.bat (+5/-1)
bin/proguardgui.sh (+11/-5)
bin/retrace.bat (+5/-1)
bin/retrace.sh (+5/-2)
build/README (+34/-0)
debian/changelog (+10/-0)
debian/control (+3/-2)
debian/patches/debian-changes-4.4-2 (+0/-36)
debian/patches/debian-changes-4.8 (+20/-0)
debian/patches/series (+1/-1)
docs/FAQ.html (+91/-86)
docs/GPL_exception.html (+12/-8)
docs/acknowledgements.html (+32/-22)
docs/alternatives.html (+455/-373)
docs/downloads.html (+133/-4)
docs/feedback.html (+38/-24)
docs/index.html (+32/-12)
docs/license.html (+20/-7)
docs/main.html (+40/-30)
docs/manual/ant.html (+64/-34)
docs/manual/examples.html (+431/-195)
docs/manual/gui.html (+108/-101)
docs/manual/index.html (+28/-16)
docs/manual/introduction.html (+57/-41)
docs/manual/limitations.html (+31/-26)
docs/manual/optimizations.html (+20/-6)
docs/manual/refcard.html (+41/-20)
docs/manual/retrace/examples.html (+23/-14)
docs/manual/retrace/index.html (+19/-7)
docs/manual/retrace/introduction.html (+16/-5)
docs/manual/retrace/usage.html (+21/-10)
docs/manual/sections.html (+5/-9)
docs/manual/style.css (+53/-16)
docs/manual/troubleshooting.html (+222/-57)
docs/manual/usage.html (+186/-173)
docs/manual/wtk.html (+17/-5)
docs/quality.html (+17/-5)
docs/results.html (+23/-9)
docs/screenshots.html (+19/-8)
docs/sections.html (+14/-12)
docs/style.css (+14/-1)
docs/testimonials.html (+42/-31)
docs/title.html (+3/-3)
examples/android.pro (+156/-0)
examples/annotations/examples.pro (+1/-2)
examples/ant/android-8.xml (+177/-0)
examples/ant/applets.xml (+12/-5)
examples/ant/applications1.xml (+1/-1)
examples/ant/applications2.xml (+11/-5)
examples/ant/applications3.xml (+12/-6)
examples/ant/midlets.xml (+11/-4)
examples/ant/proguard.xml (+10/-5)
examples/ant/servlets.xml (+12/-5)
examples/applets.pro (+17/-8)
examples/applications.pro (+17/-8)
examples/library.pro (+2/-1)
examples/midlets.pro (+17/-6)
examples/proguard.pro (+1/-1)
examples/proguardall.pro (+2/-2)
examples/proguardgui.pro (+0/-5)
examples/scala.pro (+132/-0)
examples/servlets.pro (+17/-8)
proguard (+0/-3)
proguardgui (+0/-3)
src/proguard/ArgumentWordReader.java (+4/-3)
src/proguard/ClassPath.java (+1/-1)
src/proguard/ClassPathEntry.java (+135/-2)
src/proguard/ClassSpecification.java (+1/-1)
src/proguard/ClassSpecificationVisitorFactory.java (+3/-2)
src/proguard/Configuration.java (+10/-3)
src/proguard/ConfigurationConstants.java (+3/-1)
src/proguard/ConfigurationParser.java (+193/-120)
src/proguard/ConfigurationWriter.java (+26/-18)
src/proguard/DataEntryReaderFactory.java (+5/-19)
src/proguard/DataEntryWriterFactory.java (+6/-20)
src/proguard/DescriptorKeepChecker.java (+37/-31)
src/proguard/DuplicateClassPrinter.java (+1/-1)
src/proguard/FileWordReader.java (+9/-43)
src/proguard/FullyQualifiedClassNameChecker.java (+5/-4)
src/proguard/GPL.java (+10/-4)
src/proguard/Initializer.java (+19/-6)
src/proguard/InputReader.java (+2/-2)
src/proguard/KeepClassMemberChecker.java (+87/-0)
src/proguard/KeepClassSpecification.java (+1/-1)
src/proguard/LineWordReader.java (+74/-0)
src/proguard/MemberSpecification.java (+1/-1)
src/proguard/OutputWriter.java (+53/-13)
src/proguard/ParseException.java (+1/-1)
src/proguard/ProGuard.java (+25/-31)
src/proguard/SeedPrinter.java (+97/-0)
src/proguard/SubclassedClassFilter.java (+1/-1)
src/proguard/Targeter.java (+1/-1)
src/proguard/UpToDateChecker.java (+176/-97)
src/proguard/WordReader.java (+96/-35)
src/proguard/ant/ClassPathElement.java (+1/-1)
src/proguard/ant/ClassSpecificationElement.java (+2/-1)
src/proguard/ant/ConfigurationElement.java (+90/-19)
src/proguard/ant/ConfigurationTask.java (+15/-5)
src/proguard/ant/FilterElement.java (+1/-1)
src/proguard/ant/KeepSpecificationElement.java (+1/-1)
src/proguard/ant/MemberSpecificationElement.java (+4/-1)
src/proguard/ant/ProGuardTask.java (+42/-5)
src/proguard/ant/task.properties (+2/-2)
src/proguard/classfile/ClassConstants.java (+94/-22)
src/proguard/classfile/ClassPool.java (+22/-8)
src/proguard/classfile/Clazz.java (+30/-1)
src/proguard/classfile/Field.java (+1/-1)
src/proguard/classfile/LibraryClass.java (+60/-1)
src/proguard/classfile/LibraryField.java (+1/-1)
src/proguard/classfile/LibraryMember.java (+1/-1)
src/proguard/classfile/LibraryMethod.java (+1/-1)
src/proguard/classfile/Member.java (+1/-1)
src/proguard/classfile/Method.java (+1/-1)
src/proguard/classfile/ProgramClass.java (+85/-7)
src/proguard/classfile/ProgramField.java (+1/-1)
src/proguard/classfile/ProgramMember.java (+1/-1)
src/proguard/classfile/ProgramMethod.java (+1/-1)
src/proguard/classfile/VisitorAccepter.java (+1/-1)
src/proguard/classfile/attribute/Attribute.java (+1/-1)
src/proguard/classfile/attribute/BootstrapMethodInfo.java (+89/-0)
src/proguard/classfile/attribute/BootstrapMethodsAttribute.java (+95/-0)
src/proguard/classfile/attribute/CodeAttribute.java (+1/-1)
src/proguard/classfile/attribute/ConstantValueAttribute.java (+1/-1)
src/proguard/classfile/attribute/DeprecatedAttribute.java (+1/-1)
src/proguard/classfile/attribute/EnclosingMethodAttribute.java (+1/-1)
src/proguard/classfile/attribute/ExceptionInfo.java (+1/-1)
src/proguard/classfile/attribute/ExceptionsAttribute.java (+4/-4)
src/proguard/classfile/attribute/InnerClassesAttribute.java (+1/-1)
src/proguard/classfile/attribute/InnerClassesInfo.java (+4/-7)
src/proguard/classfile/attribute/LineNumberInfo.java (+1/-1)
src/proguard/classfile/attribute/LineNumberTableAttribute.java (+1/-1)
src/proguard/classfile/attribute/LocalVariableInfo.java (+18/-2)
src/proguard/classfile/attribute/LocalVariableTableAttribute.java (+1/-1)
src/proguard/classfile/attribute/LocalVariableTypeInfo.java (+18/-2)
src/proguard/classfile/attribute/LocalVariableTypeTableAttribute.java (+1/-1)
src/proguard/classfile/attribute/SignatureAttribute.java (+1/-1)
src/proguard/classfile/attribute/SourceDirAttribute.java (+1/-1)
src/proguard/classfile/attribute/SourceFileAttribute.java (+1/-1)
src/proguard/classfile/attribute/SyntheticAttribute.java (+1/-1)
src/proguard/classfile/attribute/UnknownAttribute.java (+1/-1)
src/proguard/classfile/attribute/annotation/Annotation.java (+1/-1)
src/proguard/classfile/attribute/annotation/AnnotationDefaultAttribute.java (+1/-1)
src/proguard/classfile/attribute/annotation/AnnotationElementValue.java (+1/-1)
src/proguard/classfile/attribute/annotation/AnnotationsAttribute.java (+1/-1)
src/proguard/classfile/attribute/annotation/ArrayElementValue.java (+1/-1)
src/proguard/classfile/attribute/annotation/ClassElementValue.java (+1/-1)
src/proguard/classfile/attribute/annotation/ConstantElementValue.java (+1/-1)
src/proguard/classfile/attribute/annotation/ElementValue.java (+1/-1)
src/proguard/classfile/attribute/annotation/EnumConstantElementValue.java (+1/-1)
src/proguard/classfile/attribute/annotation/ParameterAnnotationsAttribute.java (+1/-1)
src/proguard/classfile/attribute/annotation/RuntimeInvisibleAnnotationsAttribute.java (+1/-1)
src/proguard/classfile/attribute/annotation/RuntimeInvisibleParameterAnnotationsAttribute.java (+1/-1)
src/proguard/classfile/attribute/annotation/RuntimeVisibleAnnotationsAttribute.java (+1/-1)
src/proguard/classfile/attribute/annotation/RuntimeVisibleParameterAnnotationsAttribute.java (+1/-1)
src/proguard/classfile/attribute/annotation/visitor/AllAnnotationVisitor.java (+1/-1)
src/proguard/classfile/attribute/annotation/visitor/AnnotatedClassVisitor.java (+1/-1)
src/proguard/classfile/attribute/annotation/visitor/AnnotationToMemberVisitor.java (+1/-1)
src/proguard/classfile/attribute/annotation/visitor/AnnotationTypeFilter.java (+1/-1)
src/proguard/classfile/attribute/annotation/visitor/AnnotationVisitor.java (+1/-1)
src/proguard/classfile/attribute/annotation/visitor/ElementValueVisitor.java (+1/-1)
src/proguard/classfile/attribute/preverification/DoubleType.java (+1/-1)
src/proguard/classfile/attribute/preverification/FloatType.java (+1/-1)
src/proguard/classfile/attribute/preverification/FullFrame.java (+1/-1)
src/proguard/classfile/attribute/preverification/IntegerType.java (+1/-1)
src/proguard/classfile/attribute/preverification/LessZeroFrame.java (+1/-1)
src/proguard/classfile/attribute/preverification/LongType.java (+1/-1)
src/proguard/classfile/attribute/preverification/MoreZeroFrame.java (+1/-1)
src/proguard/classfile/attribute/preverification/NullType.java (+1/-1)
src/proguard/classfile/attribute/preverification/ObjectType.java (+1/-1)
src/proguard/classfile/attribute/preverification/SameOneFrame.java (+1/-1)
src/proguard/classfile/attribute/preverification/SameZeroFrame.java (+1/-1)
src/proguard/classfile/attribute/preverification/StackMapAttribute.java (+1/-1)
src/proguard/classfile/attribute/preverification/StackMapFrame.java (+1/-1)
src/proguard/classfile/attribute/preverification/StackMapTableAttribute.java (+1/-1)
src/proguard/classfile/attribute/preverification/TopType.java (+1/-1)
src/proguard/classfile/attribute/preverification/UninitializedThisType.java (+1/-1)
src/proguard/classfile/attribute/preverification/UninitializedType.java (+1/-1)
src/proguard/classfile/attribute/preverification/VerificationType.java (+1/-1)
src/proguard/classfile/attribute/preverification/VerificationTypeFactory.java (+1/-1)
src/proguard/classfile/attribute/preverification/visitor/StackMapFrameVisitor.java (+1/-1)
src/proguard/classfile/attribute/preverification/visitor/VerificationTypeVisitor.java (+1/-1)
src/proguard/classfile/attribute/visitor/AllAttributeVisitor.java (+1/-1)
src/proguard/classfile/attribute/visitor/AllBootstrapMethodInfoVisitor.java (+55/-0)
src/proguard/classfile/attribute/visitor/AllExceptionInfoVisitor.java (+1/-1)
src/proguard/classfile/attribute/visitor/AllInnerClassesInfoVisitor.java (+55/-0)
src/proguard/classfile/attribute/visitor/AttributeNameFilter.java (+57/-16)
src/proguard/classfile/attribute/visitor/AttributeVisitor.java (+7/-6)
src/proguard/classfile/attribute/visitor/BootstrapMethodInfoVisitor.java (+40/-0)
src/proguard/classfile/attribute/visitor/ExceptionInfoVisitor.java (+1/-1)
src/proguard/classfile/attribute/visitor/InnerClassesInfoVisitor.java (+1/-1)
src/proguard/classfile/attribute/visitor/LineNumberInfoVisitor.java (+1/-1)
src/proguard/classfile/attribute/visitor/LocalVariableInfoVisitor.java (+1/-1)
src/proguard/classfile/attribute/visitor/LocalVariableTypeInfoVisitor.java (+1/-1)
src/proguard/classfile/attribute/visitor/MultiAttributeVisitor.java (+10/-1)
src/proguard/classfile/attribute/visitor/NonEmptyAttributeFilter.java (+293/-0)
src/proguard/classfile/attribute/visitor/RequiredAttributeFilter.java (+10/-1)
src/proguard/classfile/attribute/visitor/StackSizeComputer.java (+4/-5)
src/proguard/classfile/constant/ClassConstant.java (+1/-1)
src/proguard/classfile/constant/Constant.java (+1/-1)
src/proguard/classfile/constant/DoubleConstant.java (+1/-1)
src/proguard/classfile/constant/FieldrefConstant.java (+1/-1)
src/proguard/classfile/constant/FloatConstant.java (+1/-1)
src/proguard/classfile/constant/IntegerConstant.java (+1/-1)
src/proguard/classfile/constant/InterfaceMethodrefConstant.java (+1/-1)
src/proguard/classfile/constant/InvokeDynamicConstant.java (+148/-0)
src/proguard/classfile/constant/LongConstant.java (+1/-1)
src/proguard/classfile/constant/MethodHandleConstant.java (+124/-0)
src/proguard/classfile/constant/MethodTypeConstant.java (+93/-0)
src/proguard/classfile/constant/MethodrefConstant.java (+1/-1)
src/proguard/classfile/constant/NameAndTypeConstant.java (+1/-1)
src/proguard/classfile/constant/RefConstant.java (+1/-1)
src/proguard/classfile/constant/StringConstant.java (+1/-1)
src/proguard/classfile/constant/Utf8Constant.java (+1/-1)
src/proguard/classfile/constant/visitor/AllConstantVisitor.java (+1/-1)
src/proguard/classfile/constant/visitor/BootstrapMethodHandleTraveler.java (+100/-0)
src/proguard/classfile/constant/visitor/ConstantTagFilter.java (+86/-0)
src/proguard/classfile/constant/visitor/ConstantVisitor.java (+4/-1)
src/proguard/classfile/constant/visitor/ExceptClassConstantFilter.java (+6/-6)
src/proguard/classfile/constant/visitor/MethodrefTraveler.java (+60/-0)
src/proguard/classfile/editor/AccessFixer.java (+22/-6)
src/proguard/classfile/editor/AnnotationAdder.java (+1/-1)
src/proguard/classfile/editor/AnnotationsAttributeEditor.java (+1/-1)
src/proguard/classfile/editor/AttributeAdder.java (+10/-12)
src/proguard/classfile/editor/AttributeSorter.java (+1/-1)
src/proguard/classfile/editor/AttributesEditor.java (+1/-1)
src/proguard/classfile/editor/BridgeMethodFixer.java (+117/-0)
src/proguard/classfile/editor/ClassEditor.java (+1/-1)
src/proguard/classfile/editor/ClassElementSorter.java (+1/-1)
src/proguard/classfile/editor/ClassMemberSorter.java (+1/-1)
src/proguard/classfile/editor/ClassReferenceFixer.java (+1/-1)
src/proguard/classfile/editor/CodeAttributeComposer.java (+23/-25)
src/proguard/classfile/editor/CodeAttributeEditor.java (+60/-119)
src/proguard/classfile/editor/CodeAttributeEditorResetter.java (+1/-1)
src/proguard/classfile/editor/ComparableConstant.java (+66/-17)
src/proguard/classfile/editor/ConstantAdder.java (+46/-1)
src/proguard/classfile/editor/ConstantPoolEditor.java (+118/-1)
src/proguard/classfile/editor/ConstantPoolRemapper.java (+83/-38)
src/proguard/classfile/editor/ConstantPoolShrinker.java (+578/-0)
src/proguard/classfile/editor/ConstantPoolSorter.java (+2/-5)
src/proguard/classfile/editor/ElementValueAdder.java (+1/-1)
src/proguard/classfile/editor/ElementValuesEditor.java (+1/-1)
src/proguard/classfile/editor/ExceptionAdder.java (+1/-1)
src/proguard/classfile/editor/ExceptionInfoAdder.java (+1/-1)
src/proguard/classfile/editor/ExceptionsAttributeEditor.java (+1/-1)
src/proguard/classfile/editor/InnerClassesAccessFixer.java (+83/-0)
src/proguard/classfile/editor/InstructionAdder.java (+1/-1)
src/proguard/classfile/editor/InstructionWriter.java (+1/-1)
src/proguard/classfile/editor/InterfaceAdder.java (+1/-1)
src/proguard/classfile/editor/InterfaceSorter.java (+110/-25)
src/proguard/classfile/editor/InterfacesEditor.java (+1/-1)
src/proguard/classfile/editor/LineNumberInfoAdder.java (+1/-1)
src/proguard/classfile/editor/LineNumberTableAttributeEditor.java (+1/-1)
src/proguard/classfile/editor/LocalVariableInfoAdder.java (+1/-1)
src/proguard/classfile/editor/LocalVariableTableAttributeEditor.java (+1/-1)
src/proguard/classfile/editor/LocalVariableTypeInfoAdder.java (+1/-1)
src/proguard/classfile/editor/LocalVariableTypeTableAttributeEditor.java (+1/-1)
src/proguard/classfile/editor/MemberAdder.java (+40/-9)
src/proguard/classfile/editor/MemberReferenceFixer.java (+14/-23)
src/proguard/classfile/editor/MethodInvocationFixer.java (+22/-33)
src/proguard/classfile/editor/NameAndTypeShrinker.java (+188/-0)
src/proguard/classfile/editor/NamedAttributeDeleter.java (+1/-1)
src/proguard/classfile/editor/ParameterAnnotationsAttributeEditor.java (+1/-1)
src/proguard/classfile/editor/StackSizeUpdater.java (+1/-1)
src/proguard/classfile/editor/SubclassAdder.java (+1/-1)
src/proguard/classfile/editor/SubclassToAdder.java (+1/-1)
src/proguard/classfile/editor/Utf8Shrinker.java (+455/-0)
src/proguard/classfile/editor/VariableCleaner.java (+173/-37)
src/proguard/classfile/editor/VariableEditor.java (+6/-5)
src/proguard/classfile/editor/VariableRemapper.java (+17/-58)
src/proguard/classfile/editor/VariableSizeUpdater.java (+10/-3)
src/proguard/classfile/instruction/BranchInstruction.java (+1/-1)
src/proguard/classfile/instruction/ConstantInstruction.java (+21/-15)
src/proguard/classfile/instruction/Instruction.java (+4/-4)
src/proguard/classfile/instruction/InstructionConstants.java (+18/-18)
src/proguard/classfile/instruction/InstructionFactory.java (+2/-1)
src/proguard/classfile/instruction/InstructionUtil.java (+1/-1)
src/proguard/classfile/instruction/LookUpSwitchInstruction.java (+1/-1)
src/proguard/classfile/instruction/SimpleInstruction.java (+1/-1)
src/proguard/classfile/instruction/SwitchInstruction.java (+1/-1)
src/proguard/classfile/instruction/TableSwitchInstruction.java (+1/-1)
src/proguard/classfile/instruction/VariableInstruction.java (+1/-1)
src/proguard/classfile/instruction/visitor/AllInstructionVisitor.java (+1/-1)
src/proguard/classfile/instruction/visitor/InstructionCounter.java (+1/-1)
src/proguard/classfile/instruction/visitor/InstructionVisitor.java (+1/-1)
src/proguard/classfile/instruction/visitor/MultiInstructionVisitor.java (+1/-1)
src/proguard/classfile/io/LibraryClassReader.java (+23/-2)
src/proguard/classfile/io/ProgramClassReader.java (+68/-11)
src/proguard/classfile/io/ProgramClassWriter.java (+49/-4)
src/proguard/classfile/io/RuntimeDataInput.java (+1/-1)
src/proguard/classfile/io/RuntimeDataOutput.java (+1/-1)
src/proguard/classfile/util/AccessUtil.java (+1/-1)
src/proguard/classfile/util/ClassReferenceInitializer.java (+66/-52)
src/proguard/classfile/util/ClassSubHierarchyInitializer.java (+1/-1)
src/proguard/classfile/util/ClassSuperHierarchyInitializer.java (+1/-6)
src/proguard/classfile/util/ClassUtil.java (+79/-6)
src/proguard/classfile/util/DescriptorClassEnumeration.java (+1/-1)
src/proguard/classfile/util/DynamicClassReferenceInitializer.java (+14/-7)
src/proguard/classfile/util/DynamicMemberReferenceInitializer.java (+415/-75)
src/proguard/classfile/util/ExternalTypeEnumeration.java (+1/-1)
src/proguard/classfile/util/InstructionSequenceMatcher.java (+151/-31)
src/proguard/classfile/util/InternalTypeEnumeration.java (+2/-2)
src/proguard/classfile/util/MemberFinder.java (+1/-1)
src/proguard/classfile/util/MethodLinker.java (+7/-12)
src/proguard/classfile/util/SimplifiedVisitor.java (+26/-2)
src/proguard/classfile/util/StringReferenceInitializer.java (+3/-2)
src/proguard/classfile/util/StringSharer.java (+19/-2)
src/proguard/classfile/util/WarningPrinter.java (+1/-1)
src/proguard/classfile/visitor/AllClassVisitor.java (+1/-1)
src/proguard/classfile/visitor/AllFieldVisitor.java (+1/-1)
src/proguard/classfile/visitor/AllMemberVisitor.java (+1/-1)
src/proguard/classfile/visitor/AllMethodVisitor.java (+1/-1)
src/proguard/classfile/visitor/BottomClassFilter.java (+1/-1)
src/proguard/classfile/visitor/ClassAccessFilter.java (+1/-1)
src/proguard/classfile/visitor/ClassCleaner.java (+1/-1)
src/proguard/classfile/visitor/ClassCollector.java (+1/-1)
src/proguard/classfile/visitor/ClassCounter.java (+1/-1)
src/proguard/classfile/visitor/ClassForNameClassVisitor.java (+0/-66)
src/proguard/classfile/visitor/ClassHierarchyTraveler.java (+1/-1)
src/proguard/classfile/visitor/ClassNameFilter.java (+2/-2)
src/proguard/classfile/visitor/ClassPoolFiller.java (+1/-1)
src/proguard/classfile/visitor/ClassPoolVisitor.java (+1/-1)
src/proguard/classfile/visitor/ClassPresenceFilter.java (+1/-1)
src/proguard/classfile/visitor/ClassPrinter.java (+63/-6)
src/proguard/classfile/visitor/ClassVersionFilter.java (+14/-1)
src/proguard/classfile/visitor/ClassVersionSetter.java (+1/-1)
src/proguard/classfile/visitor/ClassVisitor.java (+1/-1)
src/proguard/classfile/visitor/ConcreteClassDownTraveler.java (+1/-1)
src/proguard/classfile/visitor/DotClassClassVisitor.java (+1/-3)
src/proguard/classfile/visitor/ExceptClassFilter.java (+1/-1)
src/proguard/classfile/visitor/ExceptClassesFilter.java (+1/-1)
src/proguard/classfile/visitor/ExceptionCounter.java (+1/-1)
src/proguard/classfile/visitor/ExceptionExcludedOffsetFilter.java (+1/-1)
src/proguard/classfile/visitor/ExceptionHandlerConstantVisitor.java (+1/-1)
src/proguard/classfile/visitor/ExceptionHandlerFilter.java (+1/-1)
src/proguard/classfile/visitor/ExceptionOffsetFilter.java (+1/-1)
src/proguard/classfile/visitor/ExceptionRangeFilter.java (+1/-1)
src/proguard/classfile/visitor/ImplementedClassConstantFilter.java (+1/-1)
src/proguard/classfile/visitor/ImplementedClassFilter.java (+1/-1)
src/proguard/classfile/visitor/ImplementingClassConstantFilter.java (+1/-1)
src/proguard/classfile/visitor/LibraryClassFilter.java (+1/-1)
src/proguard/classfile/visitor/LibraryMemberFilter.java (+1/-1)
src/proguard/classfile/visitor/MemberAccessFilter.java (+1/-1)
src/proguard/classfile/visitor/MemberClassAccessFilter.java (+1/-1)
src/proguard/classfile/visitor/MemberCollector.java (+1/-1)
src/proguard/classfile/visitor/MemberCounter.java (+1/-1)
src/proguard/classfile/visitor/MemberDescriptorFilter.java (+1/-1)
src/proguard/classfile/visitor/MemberNameFilter.java (+1/-1)
src/proguard/classfile/visitor/MemberToClassVisitor.java (+1/-1)
src/proguard/classfile/visitor/MemberVisitor.java (+1/-1)
src/proguard/classfile/visitor/MethodImplementationFilter.java (+1/-1)
src/proguard/classfile/visitor/MethodImplementationTraveler.java (+1/-1)
src/proguard/classfile/visitor/MultiClassPoolVisitor.java (+1/-1)
src/proguard/classfile/visitor/MultiClassVisitor.java (+1/-1)
src/proguard/classfile/visitor/MultiMemberVisitor.java (+1/-1)
src/proguard/classfile/visitor/NamedClassVisitor.java (+1/-1)
src/proguard/classfile/visitor/NamedFieldVisitor.java (+1/-1)
src/proguard/classfile/visitor/NamedMethodVisitor.java (+1/-1)
src/proguard/classfile/visitor/ProgramClassFilter.java (+1/-1)
src/proguard/classfile/visitor/ProgramMemberFilter.java (+1/-1)
src/proguard/classfile/visitor/ReferencedClassVisitor.java (+8/-1)
src/proguard/classfile/visitor/ReferencedMemberVisitor.java (+1/-1)
src/proguard/classfile/visitor/SimilarMemberVisitor.java (+1/-1)
src/proguard/classfile/visitor/SimpleClassPrinter.java (+1/-1)
src/proguard/classfile/visitor/SubclassFilter.java (+1/-1)
src/proguard/classfile/visitor/SubclassTraveler.java (+1/-1)
src/proguard/classfile/visitor/VariableClassVisitor.java (+1/-1)
src/proguard/classfile/visitor/VariableMemberVisitor.java (+1/-1)
src/proguard/evaluation/BasicBranchUnit.java (+1/-1)
src/proguard/evaluation/BasicInvocationUnit.java (+46/-1)
src/proguard/evaluation/BranchUnit.java (+1/-1)
src/proguard/evaluation/ClassConstantValueFactory.java (+53/-0)
src/proguard/evaluation/ConstantValueFactory.java (+113/-0)
src/proguard/evaluation/InvocationUnit.java (+1/-1)
src/proguard/evaluation/Processor.java (+15/-86)
src/proguard/evaluation/Stack.java (+4/-5)
src/proguard/evaluation/TracedStack.java (+1/-1)
src/proguard/evaluation/TracedVariables.java (+1/-31)
src/proguard/evaluation/Variables.java (+4/-5)
src/proguard/evaluation/value/Category1Value.java (+1/-1)
src/proguard/evaluation/value/Category2Value.java (+1/-1)
src/proguard/evaluation/value/ComparisonValue.java (+5/-5)
src/proguard/evaluation/value/CompositeDoubleValue.java (+1/-1)
src/proguard/evaluation/value/CompositeFloatValue.java (+5/-5)
src/proguard/evaluation/value/CompositeIntegerValue.java (+1/-1)
src/proguard/evaluation/value/CompositeLongValue.java (+1/-1)
src/proguard/evaluation/value/ConvertedByteValue.java (+1/-1)
src/proguard/evaluation/value/ConvertedCharacterValue.java (+1/-1)
src/proguard/evaluation/value/ConvertedDoubleValue.java (+1/-1)
src/proguard/evaluation/value/ConvertedFloatValue.java (+1/-1)
src/proguard/evaluation/value/ConvertedIntegerValue.java (+1/-1)
src/proguard/evaluation/value/ConvertedLongValue.java (+1/-1)
src/proguard/evaluation/value/ConvertedShortValue.java (+1/-1)
src/proguard/evaluation/value/DoubleValue.java (+1/-6)
src/proguard/evaluation/value/FloatValue.java (+1/-1)
src/proguard/evaluation/value/IdentifiedDoubleValue.java (+1/-1)
src/proguard/evaluation/value/IdentifiedFloatValue.java (+1/-1)
src/proguard/evaluation/value/IdentifiedIntegerValue.java (+1/-1)
src/proguard/evaluation/value/IdentifiedLongValue.java (+1/-1)
src/proguard/evaluation/value/IdentifiedReferenceValue.java (+12/-1)
src/proguard/evaluation/value/IdentifiedValueFactory.java (+1/-1)
src/proguard/evaluation/value/InstructionOffsetValue.java (+1/-1)
src/proguard/evaluation/value/IntegerValue.java (+1/-1)
src/proguard/evaluation/value/LongValue.java (+1/-1)
src/proguard/evaluation/value/NegatedDoubleValue.java (+1/-1)
src/proguard/evaluation/value/NegatedFloatValue.java (+1/-1)
src/proguard/evaluation/value/NegatedIntegerValue.java (+1/-1)
src/proguard/evaluation/value/NegatedLongValue.java (+1/-1)
src/proguard/evaluation/value/ParticularDoubleValue.java (+10/-4)
src/proguard/evaluation/value/ParticularFloatValue.java (+10/-4)
src/proguard/evaluation/value/ParticularIntegerValue.java (+1/-1)
src/proguard/evaluation/value/ParticularLongValue.java (+1/-1)
src/proguard/evaluation/value/ReferenceValue.java (+27/-13)
src/proguard/evaluation/value/SpecificDoubleValue.java (+7/-4)
src/proguard/evaluation/value/SpecificFloatValue.java (+7/-4)
src/proguard/evaluation/value/SpecificIntegerValue.java (+1/-1)
src/proguard/evaluation/value/SpecificLongValue.java (+1/-1)
src/proguard/evaluation/value/SpecificValueFactory.java (+11/-3)
src/proguard/evaluation/value/TopValue.java (+1/-1)
src/proguard/evaluation/value/UnknownDoubleValue.java (+1/-1)
src/proguard/evaluation/value/UnknownFloatValue.java (+1/-1)
src/proguard/evaluation/value/UnknownIntegerValue.java (+1/-1)
src/proguard/evaluation/value/UnknownLongValue.java (+1/-1)
src/proguard/evaluation/value/Value.java (+1/-1)
src/proguard/evaluation/value/ValueFactory.java (+1/-1)
src/proguard/gui/ClassPathPanel.java (+4/-4)
src/proguard/gui/ClassSpecificationDialog.java (+13/-9)
src/proguard/gui/ClassSpecificationsPanel.java (+1/-1)
src/proguard/gui/ExtensionFileFilter.java (+1/-1)
src/proguard/gui/FilterBuilder.java (+1/-1)
src/proguard/gui/FilterDialog.java (+6/-6)
src/proguard/gui/GUIResources.java (+1/-1)
src/proguard/gui/GUIResources.properties (+30/-18)
src/proguard/gui/KeepSpecificationsPanel.java (+1/-1)
src/proguard/gui/ListPanel.java (+1/-1)
src/proguard/gui/MemberSpecificationDialog.java (+13/-1)
src/proguard/gui/MemberSpecificationsPanel.java (+1/-1)
src/proguard/gui/MessageDialogRunnable.java (+1/-1)
src/proguard/gui/OptimizationsDialog.java (+1/-1)
src/proguard/gui/ProGuardGUI.java (+121/-76)
src/proguard/gui/ProGuardRunnable.java (+1/-1)
src/proguard/gui/ReTraceRunnable.java (+1/-1)
src/proguard/gui/SwingUtil.java (+1/-1)
src/proguard/gui/TabbedPane.java (+1/-1)
src/proguard/gui/TextAreaOutputStream.java (+1/-1)
src/proguard/gui/splash/BufferedSprite.java (+1/-1)
src/proguard/gui/splash/CircleSprite.java (+1/-1)
src/proguard/gui/splash/ClipSprite.java (+1/-1)
src/proguard/gui/splash/ColorSprite.java (+1/-1)
src/proguard/gui/splash/CompositeSprite.java (+1/-1)
src/proguard/gui/splash/ConstantColor.java (+1/-1)
src/proguard/gui/splash/ConstantDouble.java (+1/-1)
src/proguard/gui/splash/ConstantFont.java (+1/-1)
src/proguard/gui/splash/ConstantInt.java (+1/-1)
src/proguard/gui/splash/ConstantString.java (+1/-1)
src/proguard/gui/splash/ConstantTiming.java (+1/-1)
src/proguard/gui/splash/FontSprite.java (+1/-1)
src/proguard/gui/splash/ImageSprite.java (+1/-1)
src/proguard/gui/splash/LinearColor.java (+1/-1)
src/proguard/gui/splash/LinearDouble.java (+1/-1)
src/proguard/gui/splash/LinearInt.java (+1/-1)
src/proguard/gui/splash/LinearTiming.java (+1/-1)
src/proguard/gui/splash/OverrideGraphics2D.java (+1/-1)
src/proguard/gui/splash/RectangleSprite.java (+1/-1)
src/proguard/gui/splash/SawToothTiming.java (+1/-1)
src/proguard/gui/splash/ShadowedSprite.java (+1/-1)
src/proguard/gui/splash/SineTiming.java (+1/-1)
src/proguard/gui/splash/SmoothTiming.java (+1/-1)
src/proguard/gui/splash/SplashPanel.java (+1/-1)
src/proguard/gui/splash/Sprite.java (+1/-1)
src/proguard/gui/splash/TextSprite.java (+1/-1)
src/proguard/gui/splash/TimeSwitchSprite.java (+1/-1)
src/proguard/gui/splash/Timing.java (+1/-1)
src/proguard/gui/splash/TypeWriterString.java (+1/-1)
src/proguard/gui/splash/VariableColor.java (+1/-1)
src/proguard/gui/splash/VariableDouble.java (+1/-1)
src/proguard/gui/splash/VariableFont.java (+1/-1)
src/proguard/gui/splash/VariableInt.java (+1/-1)
src/proguard/gui/splash/VariableSizeFont.java (+1/-1)
src/proguard/gui/splash/VariableString.java (+1/-1)
src/proguard/io/CascadingDataEntryWriter.java (+1/-1)
src/proguard/io/ClassFilter.java (+1/-1)
src/proguard/io/ClassReader.java (+2/-2)
src/proguard/io/ClassRewriter.java (+1/-1)
src/proguard/io/DataEntry.java (+1/-1)
src/proguard/io/DataEntryClassWriter.java (+85/-0)
src/proguard/io/DataEntryCopier.java (+1/-1)
src/proguard/io/DataEntryDirectoryFilter.java (+1/-1)
src/proguard/io/DataEntryFilter.java (+1/-1)
src/proguard/io/DataEntryNameFilter.java (+1/-1)
src/proguard/io/DataEntryObfuscator.java (+36/-17)
src/proguard/io/DataEntryParentFilter.java (+1/-1)
src/proguard/io/DataEntryPump.java (+1/-1)
src/proguard/io/DataEntryReader.java (+1/-1)
src/proguard/io/DataEntryRenamer.java (+3/-3)
src/proguard/io/DataEntryRewriter.java (+1/-1)
src/proguard/io/DataEntryWriter.java (+1/-1)
src/proguard/io/DirectoryFilter.java (+1/-1)
src/proguard/io/DirectoryPump.java (+1/-1)
src/proguard/io/DirectoryWriter.java (+1/-1)
src/proguard/io/FileDataEntry.java (+1/-1)
src/proguard/io/FilteredDataEntryReader.java (+1/-1)
src/proguard/io/FilteredDataEntryWriter.java (+1/-1)
src/proguard/io/Finisher.java (+1/-1)
src/proguard/io/JarReader.java (+1/-1)
src/proguard/io/JarWriter.java (+1/-1)
src/proguard/io/ManifestRewriter.java (+34/-39)
src/proguard/io/NameFilter.java (+1/-1)
src/proguard/io/ParentDataEntryWriter.java (+1/-1)
src/proguard/io/RenamedDataEntry.java (+1/-1)
src/proguard/io/ZipDataEntry.java (+1/-1)
src/proguard/obfuscate/AttributeShrinker.java (+4/-5)
src/proguard/obfuscate/AttributeUsageMarker.java (+2/-2)
src/proguard/obfuscate/ClassObfuscator.java (+15/-3)
src/proguard/obfuscate/ClassRenamer.java (+1/-1)
src/proguard/obfuscate/DictionaryNameFactory.java (+1/-1)
src/proguard/obfuscate/MapCleaner.java (+1/-1)
src/proguard/obfuscate/MappingKeeper.java (+1/-1)
src/proguard/obfuscate/MappingPrinter.java (+1/-1)
src/proguard/obfuscate/MappingProcessor.java (+1/-1)
src/proguard/obfuscate/MappingReader.java (+1/-1)
src/proguard/obfuscate/MemberNameCleaner.java (+1/-1)
src/proguard/obfuscate/MemberNameCollector.java (+1/-1)
src/proguard/obfuscate/MemberNameConflictFixer.java (+1/-1)
src/proguard/obfuscate/MemberNameFilter.java (+120/-0)
src/proguard/obfuscate/MemberObfuscator.java (+1/-1)
src/proguard/obfuscate/MemberSpecialNameFilter.java (+6/-6)
src/proguard/obfuscate/MultiMappingProcessor.java (+1/-1)
src/proguard/obfuscate/NameAndTypeShrinker.java (+0/-112)
src/proguard/obfuscate/NameAndTypeUsageMarker.java (+0/-135)
src/proguard/obfuscate/NameFactory.java (+1/-1)
src/proguard/obfuscate/NameFactoryResetter.java (+1/-1)
src/proguard/obfuscate/NameMarker.java (+1/-1)
src/proguard/obfuscate/NumericNameFactory.java (+1/-1)
src/proguard/obfuscate/Obfuscator.java (+43/-14)
src/proguard/obfuscate/ParameterNameMarker.java (+128/-0)
src/proguard/obfuscate/SimpleNameFactory.java (+1/-1)
src/proguard/obfuscate/SourceFileRenamer.java (+1/-1)
src/proguard/obfuscate/SpecialNameFactory.java (+1/-1)
src/proguard/obfuscate/Utf8Shrinker.java (+0/-110)
src/proguard/obfuscate/Utf8UsageMarker.java (+0/-392)
src/proguard/optimize/BootstrapMethodArgumentShrinker.java (+103/-0)
src/proguard/optimize/ChangedCodePrinter.java (+7/-1)
src/proguard/optimize/ConstantMemberFilter.java (+1/-1)
src/proguard/optimize/ConstantParameterFilter.java (+1/-1)
src/proguard/optimize/DuplicateInitializerFixer.java (+21/-13)
src/proguard/optimize/DuplicateInitializerInvocationFixer.java (+24/-13)
src/proguard/optimize/KeepMarker.java (+10/-2)
src/proguard/optimize/KeptClassFilter.java (+69/-0)
src/proguard/optimize/KeptMemberFilter.java (+88/-0)
src/proguard/optimize/MemberDescriptorSpecializer.java (+2/-2)
src/proguard/optimize/MethodDescriptorShrinker.java (+5/-7)
src/proguard/optimize/MethodStaticizer.java (+1/-1)
src/proguard/optimize/OptimizationInfoMemberFilter.java (+1/-1)
src/proguard/optimize/Optimizer.java (+147/-60)
src/proguard/optimize/ParameterShrinker.java (+2/-2)
src/proguard/optimize/TailRecursionSimplifier.java (+65/-40)
src/proguard/optimize/WriteOnlyFieldFilter.java (+1/-1)
src/proguard/optimize/evaluation/EvaluationShrinker.java (+806/-340)
src/proguard/optimize/evaluation/EvaluationSimplifier.java (+27/-7)
src/proguard/optimize/evaluation/LivenessAnalyzer.java (+11/-1)
src/proguard/optimize/evaluation/LoadingInvocationUnit.java (+6/-14)
src/proguard/optimize/evaluation/PartialEvaluator.java (+88/-82)
src/proguard/optimize/evaluation/StoringInvocationUnit.java (+1/-1)
src/proguard/optimize/evaluation/TracedBranchUnit.java (+1/-1)
src/proguard/optimize/evaluation/VariableOptimizer.java (+126/-13)
src/proguard/optimize/info/AccessMethodMarker.java (+17/-2)
src/proguard/optimize/info/BackwardBranchMarker.java (+1/-1)
src/proguard/optimize/info/CatchExceptionMarker.java (+1/-1)
src/proguard/optimize/info/CaughtClassFilter.java (+1/-1)
src/proguard/optimize/info/CaughtClassMarker.java (+4/-3)
src/proguard/optimize/info/ClassOptimizationInfo.java (+15/-1)
src/proguard/optimize/info/ClassOptimizationInfoSetter.java (+1/-1)
src/proguard/optimize/info/DotClassFilter.java (+1/-1)
src/proguard/optimize/info/DotClassMarker.java (+1/-1)
src/proguard/optimize/info/ExceptionInstructionChecker.java (+55/-49)
src/proguard/optimize/info/FieldOptimizationInfo.java (+49/-7)
src/proguard/optimize/info/InstanceofClassFilter.java (+1/-1)
src/proguard/optimize/info/InstanceofClassMarker.java (+1/-1)
src/proguard/optimize/info/InstantiationClassFilter.java (+1/-1)
src/proguard/optimize/info/InstantiationClassMarker.java (+1/-1)
src/proguard/optimize/info/MemberOptimizationInfoSetter.java (+11/-11)
src/proguard/optimize/info/MethodInvocationMarker.java (+1/-1)
src/proguard/optimize/info/MethodOptimizationInfo.java (+3/-3)
src/proguard/optimize/info/NoSideEffectMethodMarker.java (+2/-2)
src/proguard/optimize/info/NonPrivateMemberMarker.java (+5/-11)
src/proguard/optimize/info/PackageVisibleMemberContainingClassMarker.java (+23/-5)
src/proguard/optimize/info/PackageVisibleMemberInvokingClassMarker.java (+61/-13)
src/proguard/optimize/info/ParameterUsageMarker.java (+4/-4)
src/proguard/optimize/info/ReadWriteFieldMarker.java (+1/-1)
src/proguard/optimize/info/SideEffectInstructionChecker.java (+66/-45)
src/proguard/optimize/info/SideEffectMethodMarker.java (+1/-1)
src/proguard/optimize/info/StaticInitializerContainingClassFilter.java (+62/-0)
src/proguard/optimize/info/StaticInitializerContainingClassMarker.java (+65/-0)
src/proguard/optimize/info/SuperInvocationMarker.java (+1/-1)
src/proguard/optimize/info/VariableUsageMarker.java (+6/-5)
src/proguard/optimize/peephole/BranchTargetFinder.java (+12/-16)
src/proguard/optimize/peephole/ClassFinalizer.java (+1/-1)
src/proguard/optimize/peephole/ClassMerger.java (+52/-12)
src/proguard/optimize/peephole/GotoCommonCodeReplacer.java (+1/-1)
src/proguard/optimize/peephole/GotoGotoReplacer.java (+4/-3)
src/proguard/optimize/peephole/GotoReturnReplacer.java (+1/-1)
src/proguard/optimize/peephole/HorizontalClassMerger.java (+1/-1)
src/proguard/optimize/peephole/InstructionSequenceConstants.java (+1552/-91)
src/proguard/optimize/peephole/InstructionSequenceReplacer.java (+153/-11)
src/proguard/optimize/peephole/InstructionSequencesReplacer.java (+1/-1)
src/proguard/optimize/peephole/MemberPrivatizer.java (+1/-1)
src/proguard/optimize/peephole/MethodFinalizer.java (+1/-1)
src/proguard/optimize/peephole/MethodInliner.java (+75/-47)
src/proguard/optimize/peephole/NopRemover.java (+1/-1)
src/proguard/optimize/peephole/PeepholeOptimizer.java (+1/-1)
src/proguard/optimize/peephole/ReachableCodeMarker.java (+4/-5)
src/proguard/optimize/peephole/RetargetedInnerClassAttributeRemover.java (+38/-8)
src/proguard/optimize/peephole/TargetClassChanger.java (+41/-25)
src/proguard/optimize/peephole/UnreachableCodeRemover.java (+1/-1)
src/proguard/optimize/peephole/UnreachableExceptionRemover.java (+1/-1)
src/proguard/optimize/peephole/VariableShrinker.java (+1/-1)
src/proguard/optimize/peephole/VerticalClassMerger.java (+1/-1)
src/proguard/preverify/CodePreverifier.java (+20/-8)
src/proguard/preverify/CodeSubroutineInliner.java (+2/-1)
src/proguard/preverify/Preverifier.java (+3/-4)
src/proguard/preverify/SubroutineInliner.java (+1/-2)
src/proguard/retrace/ReTrace.java (+3/-3)
src/proguard/shrink/AnnotationUsageMarker.java (+7/-33)
src/proguard/shrink/ClassShrinker.java (+31/-21)
src/proguard/shrink/InnerUsageMarker.java (+1/-1)
src/proguard/shrink/InterfaceUsageMarker.java (+1/-1)
src/proguard/shrink/ShortestUsageMark.java (+1/-1)
src/proguard/shrink/ShortestUsageMarker.java (+1/-1)
src/proguard/shrink/ShortestUsagePrinter.java (+1/-1)
src/proguard/shrink/Shrinker.java (+14/-3)
src/proguard/shrink/UsageMarker.java (+145/-29)
src/proguard/shrink/UsagePrinter.java (+1/-1)
src/proguard/shrink/UsedClassFilter.java (+1/-1)
src/proguard/shrink/UsedMemberFilter.java (+2/-2)
src/proguard/util/AndMatcher.java (+1/-1)
src/proguard/util/ClassNameParser.java (+1/-1)
src/proguard/util/ConstantMatcher.java (+1/-1)
src/proguard/util/EmptyStringMatcher.java (+1/-1)
src/proguard/util/ExtensionMatcher.java (+1/-1)
src/proguard/util/FileNameParser.java (+1/-1)
src/proguard/util/FixedStringMatcher.java (+1/-1)
src/proguard/util/ListMatcher.java (+1/-1)
src/proguard/util/ListParser.java (+2/-2)
src/proguard/util/ListUtil.java (+11/-4)
src/proguard/util/NameParser.java (+1/-1)
src/proguard/util/NotMatcher.java (+1/-1)
src/proguard/util/OrMatcher.java (+1/-1)
src/proguard/util/SettableMatcher.java (+1/-1)
src/proguard/util/StringMatcher.java (+1/-1)
src/proguard/util/StringParser.java (+1/-1)
src/proguard/util/VariableStringMatcher.java (+1/-1)
src/proguard/wtk/ProGuardObfuscator.java (+3/-2)
To merge this branch: bzr merge lp:~scarneiro/ubuntu/quantal/proguard/fix-for-888982
Reviewer Review Type Date Requested Status
James Page Approve
Ubuntu branches Pending
Review via email: mp+114547@code.launchpad.net

Description of the change

This is a new upstream version of proguard. It is needed to fix an FTBFS
in mobile-atlas-creator.

Probably the best way is going through Debian, but it is needed to fix
some related FTBFS in Quantal relating Java7 migration.

Please help me to get this in shape, as I'm pretty new to this and I
need the review so I can figure out what needs to be corrected.

Thanks!

Sebastian.

To post a comment you must log in.
Revision history for this message
James Page (james-page) wrote :

Hi Sebastian

Thanks for taking the time to prepare this merge proposal.

I have uploaded with a couple of minor tweaks:

1) You don't need to Depend on build-essential - this is actually a lintian error - I would recommend that you always run lintian both on your source package and the resulting binary package to check for any errors that it can pickup.

See http://lintian.debian.org/manual/index.html for more info.

2) debian/pathes/debian-changes-4.8: this is an auto-generated patch due to the switch in the previous version from source format 1.0 to source format 3.0 - you can read more about these formats here - http://wiki.debian.org/Projects/DebSrc3.0

I renamed the patch and tweaked the headers (as they refer to the upgrade bug which does not make much sense) so things don't get confused later - this should be fed back to Debian but the maintainer is not that active (i.e. leave it with me - I'll need to deal with this for the next Debian release anyway).

Thanks for you contribution!

review: Approve
Revision history for this message
Sebastian Carneiro (scarneiro) wrote :

Hi James,

Thank you very much for such a great review ! That's the kind of advice I need to advance in the quality of my contributions to Ubuntu.

I will take your advice given on this review to get better at this. If I can help in forwarding this to Debian, or anything else you may find I should be doing, just let me know.

Best regards,

Sebastian.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== added directory '.pc'
=== added file '.pc/.quilt_patches'
--- .pc/.quilt_patches 1970-01-01 00:00:00 +0000
+++ .pc/.quilt_patches 2012-07-12 00:24:28 +0000
@@ -0,0 +1,1 @@
1debian/patches
02
=== added file '.pc/.quilt_series'
--- .pc/.quilt_series 1970-01-01 00:00:00 +0000
+++ .pc/.quilt_series 2012-07-12 00:24:28 +0000
@@ -0,0 +1,1 @@
1series
02
=== added file '.pc/.version'
--- .pc/.version 1970-01-01 00:00:00 +0000
+++ .pc/.version 2012-07-12 00:24:28 +0000
@@ -0,0 +1,1 @@
12
02
=== modified file 'README'
--- README 2009-10-09 16:17:49 +0000
+++ README 2012-07-12 00:24:28 +0000
@@ -30,4 +30,4 @@
3030
31http://proguard.sourceforge.net/31http://proguard.sourceforge.net/
3232
33Copyright (c) 2002-2009 Eric Lafortune (eric@graphics.cornell.edu)33Copyright (c) 2002-2012 Eric Lafortune (eric@graphics.cornell.edu)
3434
=== modified file 'bin/proguard.bat'
--- bin/proguard.bat 2009-05-20 08:21:13 +0000
+++ bin/proguard.bat 2012-07-12 00:24:28 +0000
@@ -2,9 +2,13 @@
22
3REM Start-up script for ProGuard -- free class file shrinker, optimizer,3REM Start-up script for ProGuard -- free class file shrinker, optimizer,
4REM obfuscator, and preverifier for Java bytecode.4REM obfuscator, and preverifier for Java bytecode.
5REM
6REM Note: when passing file names containing spaces to this script,
7REM you'll have to add escaped quotes around them, e.g.
8REM "\"C:/My Directory/My File.txt\""
59
6IF EXIST "%PROGUARD_HOME%" GOTO home10IF EXIST "%PROGUARD_HOME%" GOTO home
7SET PROGUARD_HOME=..11SET PROGUARD_HOME=..
8:home12:home
913
10java -jar "%PROGUARD_HOME%"\lib\proguard.jar %1 %2 %3 %4 %5 %6 %7 %8 %914java -jar "%PROGUARD_HOME%"\lib\proguard.jar %*
1115
=== modified file 'bin/proguard.sh'
--- bin/proguard.sh 2009-05-20 08:21:13 +0000
+++ bin/proguard.sh 2012-07-12 00:24:28 +0000
@@ -2,8 +2,11 @@
2#2#
3# Start-up script for ProGuard -- free class file shrinker, optimizer,3# Start-up script for ProGuard -- free class file shrinker, optimizer,
4# obfuscator, and preverifier for Java bytecode.4# obfuscator, and preverifier for Java bytecode.
5#
6# Note: when passing file names containing spaces to this script,
7# you'll have to add escaped quotes around them, e.g.
8# "\"/My Directory/My File.txt\""
59
6PROGUARD_HOME=`dirname "$0"`10PROGUARD_HOME=`dirname "$0"`/..
7PROGUARD_HOME=`dirname "$PROGUARD_HOME"`
811
9java -jar $PROGUARD_HOME/lib/proguard.jar "$@"12java -jar $PROGUARD_HOME/lib/proguard.jar "$@"
1013
=== modified file 'bin/proguardgui.bat'
--- bin/proguardgui.bat 2009-05-20 08:21:13 +0000
+++ bin/proguardgui.bat 2012-07-12 00:24:28 +0000
@@ -2,9 +2,13 @@
22
3REM Start-up script for the GUI of ProGuard -- free class file shrinker,3REM Start-up script for the GUI of ProGuard -- free class file shrinker,
4REM optimizer, obfuscator, and preverifier for Java bytecode.4REM optimizer, obfuscator, and preverifier for Java bytecode.
5REM
6REM Note: when passing file names containing spaces to this script,
7REM you'll have to add escaped quotes around them, e.g.
8REM "\"C:/My Directory/My File.txt\""
59
6IF EXIST "%PROGUARD_HOME%" GOTO home10IF EXIST "%PROGUARD_HOME%" GOTO home
7SET PROGUARD_HOME=..11SET PROGUARD_HOME=..
8:home12:home
913
10java -jar "%PROGUARD_HOME%"\lib\proguardgui.jar %1 %2 %3 %4 %5 %6 %7 %8 %914java -jar "%PROGUARD_HOME%"\lib\proguardgui.jar %*
1115
=== modified file 'bin/proguardgui.sh'
--- bin/proguardgui.sh 2009-05-20 08:21:13 +0000
+++ bin/proguardgui.sh 2012-07-12 00:24:28 +0000
@@ -2,8 +2,14 @@
2#2#
3# Start-up script for the GUI of ProGuard -- free class file shrinker,3# Start-up script for the GUI of ProGuard -- free class file shrinker,
4# optimizer, obfuscator, and preverifier for Java bytecode.4# optimizer, obfuscator, and preverifier for Java bytecode.
55#
6PROGUARD_HOME=`dirname "$0"`6# Note: when passing file names containing spaces to this script,
7PROGUARD_HOME=`dirname "$PROGUARD_HOME"`7# you'll have to add escaped quotes around them, e.g.
88# "\"/My Directory/My File.txt\""
9java -jar $PROGUARD_HOME/lib/proguardgui.jar "$@"9
10PROGUARD_HOME=`dirname "$0"`/..
11
12# On Linux, Java 1.6.0_24 and higher hang when starting the GUI:
13# http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7027598
14# We're using the -D option as a workaround.
15java -DsuppressSwingDropSupport=true -jar $PROGUARD_HOME/lib/proguardgui.jar "$@"
1016
=== modified file 'bin/retrace.bat'
--- bin/retrace.bat 2009-05-20 08:21:13 +0000
+++ bin/retrace.bat 2012-07-12 00:24:28 +0000
@@ -2,9 +2,13 @@
22
3REM Start-up script for Retrace -- companion tool for ProGuard, free class file3REM Start-up script for Retrace -- companion tool for ProGuard, free class file
4REM shrinker, optimizer, obfuscator, and preverifier for Java bytecode.4REM shrinker, optimizer, obfuscator, and preverifier for Java bytecode.
5REM
6REM Note: when passing file names containing spaces to this script,
7REM you'll have to add escaped quotes around them, e.g.
8REM "\"C:/My Directory/My File.txt\""
59
6IF EXIST "%PROGUARD_HOME%" GOTO home10IF EXIST "%PROGUARD_HOME%" GOTO home
7SET PROGUARD_HOME=..11SET PROGUARD_HOME=..
8:home12:home
913
10java -jar "%PROGUARD_HOME%"\lib\retrace.jar %1 %2 %3 %4 %5 %6 %7 %8 %914java -jar "%PROGUARD_HOME%"\lib\retrace.jar %*
1115
=== modified file 'bin/retrace.sh'
--- bin/retrace.sh 2009-05-20 08:21:13 +0000
+++ bin/retrace.sh 2012-07-12 00:24:28 +0000
@@ -2,8 +2,11 @@
2#2#
3# Start-up script for Retrace -- companion tool for ProGuard, free class file3# Start-up script for Retrace -- companion tool for ProGuard, free class file
4# shrinker, optimizer, obfuscator, and preverifier for Java bytecode.4# shrinker, optimizer, obfuscator, and preverifier for Java bytecode.
5#
6# Note: when passing file names containing spaces to this script,
7# you'll have to add escaped quotes around them, e.g.
8# "\"/My Directory/My File.txt\""
59
6PROGUARD_HOME=`dirname "$0"`10PROGUARD_HOME=`dirname "$0"`/..
7PROGUARD_HOME=`dirname "$PROGUARD_HOME"`
811
9java -jar $PROGUARD_HOME/lib/retrace.jar "$@"12java -jar $PROGUARD_HOME/lib/retrace.jar "$@"
1013
=== added file 'build/README'
--- build/README 1970-01-01 00:00:00 +0000
+++ build/README 2012-07-12 00:24:28 +0000
@@ -0,0 +1,34 @@
1ProGuard, Java class file shrinker, optimizer, obfuscator, and preverifier
2==========================================================================
3
4This directory contains a number of alternative ways to build ProGuard:
5
6- build.sh : a shell script for GNU/Linux
7- makefile : a makefile for GNU/Linux
8- build.xml : an Ant build file for all platforms
9
10- As a final alternative, you can also easily compile the code from the
11 command line:
12
13 mkdir classes
14 javac -sourcepath src -d classes src/proguard/ProGuard.java
15 javac -sourcepath src -d classes src/proguard/gui/ProGuardGUI.java
16 javac -sourcepath src -d classes src/proguard/retrace/ReTrace.java
17
18 For the ProGuard Ant task:
19
20 javac -sourcepath src -d classes -classpath lib/ant.jar \
21 src/proguard/ant/ProGuardTask.java
22
23 For the Java Micro Edition Wireless Tool Kit (JME WTK) obfuscator plug-in:
24
25 javac -sourcepath src -d classes -classpath wtklib/kenv.zip \
26 src/proguard/wtk/ProGuardObfuscator.java
27
28Note that you'll have to install Ant and the JME WTK yourself.
29
30Enjoy!
31
32http://proguard.sourceforge.net/
33
34Copyright (c) 2002-2012 Eric Lafortune (eric@graphics.cornell.edu)
035
=== modified file 'debian/changelog'
--- debian/changelog 2009-11-30 10:29:57 +0000
+++ debian/changelog 2012-07-12 00:24:28 +0000
@@ -1,3 +1,13 @@
1proguard (4.8-0ubuntu1) quantal; urgency=low
2
3 * New upstream release. Necessary to fix FTBFS on
4 mobile-atlas-creator package. (LP: #888982)
5 * debian/control: Added build-essential to Build Depends.
6 * debian/pathes/debian-changes-4.8: create proguard and
7 proguardgui shell scripts.
8
9 -- Sebastian Carneiro <scarneiro@fibertel.com.ar> Wed, 11 Jul 2012 20:52:33 -0300
10
1proguard (4.4-2) unstable; urgency=low11proguard (4.4-2) unstable; urgency=low
212
3 * update to source format 3.0 (quilt)13 * update to source format 3.0 (quilt)
414
=== modified file 'debian/control'
--- debian/control 2009-10-09 16:17:49 +0000
+++ debian/control 2012-07-12 00:24:28 +0000
@@ -1,8 +1,9 @@
1Source: proguard1Source: proguard
2Section: devel2Section: devel
3Priority: optional3Priority: optional
4Maintainer: Sam Clegg <samo@debian.org>4Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
5Build-Depends: debhelper (>= 7.0.15), cdbs, default-jdk, ant5XSBC-Original-Maintainer: Sam Clegg <samo@debian.org>
6Build-Depends: debhelper (>= 7.0.15), cdbs, default-jdk, ant, build-essential
6Standards-Version: 3.8.37Standards-Version: 3.8.3
78
8Package: proguard9Package: proguard
910
=== removed file 'debian/patches/debian-changes-4.4-2'
--- debian/patches/debian-changes-4.4-2 2009-11-30 10:29:57 +0000
+++ debian/patches/debian-changes-4.4-2 1970-01-01 00:00:00 +0000
@@ -1,36 +0,0 @@
1Description: Upstream changes introduced in version 4.4-2
2 This patch has been created by dpkg-source during the package build.
3 Here's the last changelog entry, hopefully it gives details on why
4 those changes were made:
5 .
6 proguard (4.4-2) unstable; urgency=low
7 .
8 * update to source format 3.0 (quilt)
9 .
10 The person named in the Author field signed this changelog entry.
11Author: Sam Clegg <samo@debian.org>
12
13---
14The information above should follow the Patch Tagging Guidelines, please
15checkout http://dep.debian.net/deps/dep3/ to learn about the format. Here
16are templates for supplementary fields that you might want to add:
17
18Origin: <vendor|upstream|other>, <url of original patch>
19Bug: <url in upstream bugtracker>
20Bug-Debian: http://bugs.debian.org/<bugnumber>
21Forwarded: <no|not-needed|url proving that it has been forwarded>
22Reviewed-By: <name and email of someone who approved the patch>
23Last-Update: <YYYY-MM-DD>
24
25--- /dev/null
26+++ proguard-4.4/proguard
27@@ -0,0 +1,3 @@
28+#!/bin/sh
29+
30+exec java -Xss300000 -jar /usr/share/java/proguard.jar "$@"
31--- /dev/null
32+++ proguard-4.4/proguardgui
33@@ -0,0 +1,3 @@
34+#!/bin/sh
35+
36+exec java -Xss300000 -cp /usr/share/java/proguard.jar:/usr/share/java/proguardgui.jar proguard.gui.ProGuardGUI "$@"
370
=== added file 'debian/patches/debian-changes-4.8'
--- debian/patches/debian-changes-4.8 1970-01-01 00:00:00 +0000
+++ debian/patches/debian-changes-4.8 2012-07-12 00:24:28 +0000
@@ -0,0 +1,20 @@
1Description: Creates proguard and proguardgui shell scripts
2 This patch adds proguard and proguardgui shell scripts for starting up
3 proguard.
4 .
5Bug-Ubuntu: https://launchpad.net/bugs/888982
6Forwarded: not-needed
7Last-Update: 2012-11-07
8
9--- /dev/null
10+++ proguard-4.8/proguard
11@@ -0,0 +1,3 @@
12+#!/bin/sh
13+
14+exec java -Xss300000 -jar /usr/share/java/proguard.jar "$@"
15--- /dev/null
16+++ proguard-4.8/proguardgui
17@@ -0,0 +1,3 @@
18+#!/bin/sh
19+
20+exec java -Xss300000 -cp /usr/share/java/proguard.jar:/usr/share/java/proguardgui.jar proguard.gui.ProGuardGUI "$@"
021
=== modified file 'debian/patches/series'
--- debian/patches/series 2009-11-30 10:29:57 +0000
+++ debian/patches/series 2012-07-12 00:24:28 +0000
@@ -1,1 +1,1 @@
1debian-changes-4.4-21debian-changes-4.8
22
=== modified file 'docs/FAQ.html'
--- docs/FAQ.html 2009-10-09 16:17:49 +0000
+++ docs/FAQ.html 2012-07-12 00:24:28 +0000
@@ -1,10 +1,21 @@
1<!doctype html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">1<!doctype html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2<html>2<html>
3<head>3<head>
4<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">4<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
5<meta http-equiv="content-style-type" content="text/css">5<meta http-equiv="content-style-type" content="text/css">
6<link rel="stylesheet" type="text/css" href="style.css">6<link rel="stylesheet" type="text/css" href="style.css">
7<title>ProGuard FAQ</title>7<title>ProGuard FAQ</title>
8<script type="text/javascript" language="JavaScript">
9<!--
10if (window.self==window.top)
11 window.top.location.replace("index.html#"+window.location.pathname+window.location.hash);
12else {
13 var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), "");
14 if (window.top.location.hash!=hash)
15 window.top.location.hash=hash;
16}
17//-->
18</script>
8</head>19</head>
9<body>20<body>
1021
@@ -13,35 +24,37 @@
13<h3>Contents</h3>24<h3>Contents</h3>
1425
15<ol>26<ol>
16<li><a href="#shrinking">What is shrinking?</a>27<li><a href="#shrinking">What is shrinking?</a></li>
17<li><a href="#obfuscation">What is obfuscation?</a>28<li><a href="#obfuscation">What is obfuscation?</a></li>
18<li><a href="#preverification">What is preverification?</a>29<li><a href="#preverification">What is preverification?</a></li>
19<li><a href="#optimization">What kind of optimizations does <b>ProGuard</b>30<li><a href="#optimization">What kind of optimizations does <b>ProGuard</b>
20 support?</a>31 support?</a></li>
21<li><a href="#commercial">Can I use <b>ProGuard</b> to process my commercial32<li><a href="#commercial">Can I use <b>ProGuard</b> to process my commercial
22 application?</a>33 application?</a></li>
23<li><a href="#jdk1.4">Does <b>ProGuard</b> work with Java 2? Java 5? Java34<li><a href="#jdk1.4">Does <b>ProGuard</b> work with Java 2? Java 5? Java
24 6?</a>35 6?</a></li>
25<li><a href="#jme">Does <b>ProGuard</b> work with Java Micro Edition?</a>36<li><a href="#jme">Does <b>ProGuard</b> work with Java Micro Edition?</a></li>
26<li><a href="#android">Does <b>ProGuard</b> work for Google Android code?</a>37<li><a href="#android">Does <b>ProGuard</b> work for Google Android
27<li><a href="#blackberry">Does <b>ProGuard</b> work for Blackberry code?</a>38 code?</a></li>
28<li><a href="#ant">Does <b>ProGuard</b> have support for Ant?</a>39<li><a href="#blackberry">Does <b>ProGuard</b> work for Blackberry
29<li><a href="#gui">Does <b>ProGuard</b> come with a GUI?</a>40 code?</a></li>
41<li><a href="#ant">Does <b>ProGuard</b> have support for Ant?</a></li>
42<li><a href="#gui">Does <b>ProGuard</b> come with a GUI?</a></li>
30<li><a href="#forname">Does <b>ProGuard</b> handle <code>Class.forName</code>43<li><a href="#forname">Does <b>ProGuard</b> handle <code>Class.forName</code>
31 calls?</a>44 calls?</a></li>
32<li><a href="#resource">Does <b>ProGuard</b> handle resource files?</a>45<li><a href="#resource">Does <b>ProGuard</b> handle resource files?</a></li>
33<li><a href="#encrypt">Does <b>ProGuard</b> encrypt strings constants?</a>46<li><a href="#encrypt">Does <b>ProGuard</b> encrypt string constants?</a></li>
34<li><a href="#flow">Does <b>ProGuard</b> perform control flow obfuscation?</a>47<li><a href="#flow">Does <b>ProGuard</b> perform control flow
48 obfuscation?</a></li>
35<li><a href="#incremental">Does <b>ProGuard</b> support incremental49<li><a href="#incremental">Does <b>ProGuard</b> support incremental
36 obfuscation?</a>50 obfuscation?</a></li>
37<li><a href="#keywords">Can <b>ProGuard</b> obfuscate using reserved51<li><a href="#keywords">Can <b>ProGuard</b> obfuscate using reserved
38 keywords?</a>52 keywords?</a></li>
39<li><a href="#stacktrace">Can <b>ProGuard</b> reconstruct obfuscated stack53<li><a href="#stacktrace">Can <b>ProGuard</b> reconstruct obfuscated stack
40 traces?</a>54 traces?</a></li>
41</ol>55</ol>
4256
43<a name="shrinking">&nbsp;</a>57<h3><a name="shrinking">What is shrinking?</a></h3>
44<h3>What is shrinking?</h3>
4558
46Java source code (.java files) is typically compiled to bytecode (.class59Java source code (.java files) is typically compiled to bytecode (.class
47files). Bytecode is more compact than Java source code, but it may still60files). Bytecode is more compact than Java source code, but it may still
@@ -50,8 +63,7 @@
50unused classes, fields, and methods. The program remains functionally63unused classes, fields, and methods. The program remains functionally
51equivalent, including the information given in exception stack traces.64equivalent, including the information given in exception stack traces.
5265
53<a name="obfuscation">&nbsp;</a>66<h3><a name="obfuscation">What is obfuscation?</a></h3>
54<h3>What is obfuscation?</h3>
5567
56By default, compiled bytecode still contains a lot of debugging information:68By default, compiled bytecode still contains a lot of debugging information:
57source file names, line numbers, field names, method names, argument names,69source file names, line numbers, field names, method names, argument names,
@@ -63,8 +75,7 @@
63bonus. The program remains functionally equivalent, except for the class75bonus. The program remains functionally equivalent, except for the class
64names, method names, and line numbers given in exception stack traces.76names, method names, and line numbers given in exception stack traces.
6577
66<a name="preverification">&nbsp;</a>78<h3><a name="preverification">What is preverification?</a></h3>
67<h3>What is preverification?</h3>
6879
69When loading class files, the class loader performs some sophisticated80When loading class files, the class loader performs some sophisticated
70verification of the byte code. This analysis makes sure the code can't81verification of the byte code. This analysis makes sure the code can't
@@ -77,8 +88,7 @@
77perform the preverification step too, for instance allowing to retarget older88perform the preverification step too, for instance allowing to retarget older
78class files at Java 6.89class files at Java 6.
7990
80<a name="optimization">&nbsp;</a>91<h3><a name="optimization">What kind of optimizations does <b>ProGuard</b> support?</a></h3>
81<h3>What kind of optimizations does <b>ProGuard</b> support?</h3>
8292
83Apart from removing unused classes, fields, and methods in the shrinking step,93Apart from removing unused classes, fields, and methods in the shrinking step,
84<b>ProGuard</b> can also perform optimizations at the bytecode level, inside94<b>ProGuard</b> can also perform optimizations at the bytecode level, inside
@@ -87,24 +97,24 @@
87and liveness analysis, <b>ProGuard</b> can:97and liveness analysis, <b>ProGuard</b> can:
8898
89<ul>99<ul>
90<li>Evaluate constant expressions.100<li>Evaluate constant expressions.</li>
91<li>Remove unnecessary field accesses and method calls.101<li>Remove unnecessary field accesses and method calls.</li>
92<li>Remove unnecessary branches.102<li>Remove unnecessary branches.</li>
93<li>Remove unnecessary comparisons and instanceof tests.103<li>Remove unnecessary comparisons and instanceof tests.</li>
94<li>Remove unused code blocks.104<li>Remove unused code blocks.</li>
95<li>Merge identical code blocks.105<li>Merge identical code blocks.</li>
96<li>Reduce variable allocation.106<li>Reduce variable allocation.</li>
97<li>Remove write-only fields and unused method parameters.107<li>Remove write-only fields and unused method parameters.</li>
98<li>Inline constant fields, method parameters, and return values.108<li>Inline constant fields, method parameters, and return values.</li>
99<li>Inline methods that are short or only called once.109<li>Inline methods that are short or only called once.</li>
100<li>Simplify tail recursion calls.110<li>Simplify tail recursion calls.</li>
101<li>Merge classes and interfaces.111<li>Merge classes and interfaces.</li>
102<li>Make methods private, static, and final when possible.112<li>Make methods private, static, and final when possible.</li>
103<li>Make classes static and final when possible.113<li>Make classes static and final when possible.</li>
104<li>Replace interfaces that have single implementations.114<li>Replace interfaces that have single implementations.</li>
105<li>Perform over 200 peephole optimizations, like replacing ...*2 by115<li>Perform over 200 peephole optimizations, like replacing ...*2 by
106 ...&lt;&lt;1.116 ...&lt;&lt;1.</li>
107<li>Optionally remove logging code.117<li>Optionally remove logging code.</li>
108</ul>118</ul>
109The positive effects of these optimizations will depend on your code and on119The positive effects of these optimizations will depend on your code and on
110the virtual machine on which the code is executed. Simple virtual machines may120the virtual machine on which the code is executed. Simple virtual machines may
@@ -113,27 +123,28 @@
113<p>123<p>
114Some notable optimizations that aren't supported yet:124Some notable optimizations that aren't supported yet:
115<ul>125<ul>
116<li>Moving constant expressions out of loops.126<li>Moving constant expressions out of loops.</li>
117<li>Optimizations that require escape analysis.127<li>Optimizations that require escape analysis
128 (<a href="http://www.saikoa.com/dexguard" target="_top">DexGuard</a>
129 does).</li>
118</ul>130</ul>
119131
120<a name="commercial">&nbsp;</a>132<h3><a name="commercial">Can I use <b>ProGuard</b> to process my commercial application?</a></h3>
121<h3>Can I use <b>ProGuard</b> to process my commercial application?</h3>
122133
123Yes, you can. <b>ProGuard</b> itself is distributed under the GPL, but this134Yes, you can. <b>ProGuard</b> itself is distributed under the GPL, but this
124doesn't affect the programs that you process. Your code remains yours, and135doesn't affect the programs that you process. Your code remains yours, and
125its license can remain the same.136its license can remain the same.
126137
127<a name="jdk1.4">&nbsp;</a>138<h3><a name="jdk1.4">Does <b>ProGuard</b> work with Java 2? Java 5? Java 6? Java 7?</a></h3>
128<h3>Does <b>ProGuard</b> work with Java 2? Java 5? Java 6?</h3>
129139
130Yes, <b>ProGuard</b> supports all JDKs from 1.1 up to and including 6.0. Java 2140Yes, <b>ProGuard</b> supports all JDKs from 1.1 up to and including 7.0. Java 2
131introduced some small differences in the class file format. Java 5 added141introduced some small differences in the class file format. Java 5 added
132attributes for generics and for annotations. Java 6 introduced preverification142attributes for generics and for annotations. Java 6 introduced optional
133attributes. <b>ProGuard</b> handles all versions correctly.143preverification attributes. Java 7 made preverification obligatory and
144introduced support for dynamic languages. <b>ProGuard</b> handles all versions
145correctly.
134146
135<a name="jme">&nbsp;</a>147<h3><a name="jme">Does <b>ProGuard</b> work with Java Micro Edition?</a></h3>
136<h3>Does <b>ProGuard</b> work with Java Micro Edition?</h3>
137148
138Yes. <b>ProGuard</b> itself runs in Java Standard Edition, but you can freely149Yes. <b>ProGuard</b> itself runs in Java Standard Edition, but you can freely
139specify the run-time environment at which your programs are targeted,150specify the run-time environment at which your programs are targeted,
@@ -144,16 +155,14 @@
144<b>ProGuard</b> also comes with an obfuscator plug-in for the JME Wireless155<b>ProGuard</b> also comes with an obfuscator plug-in for the JME Wireless
145Toolkit.156Toolkit.
146157
147<a name="android">&nbsp;</a>158<h3><a name="android">Does <b>ProGuard</b> work for Google Android code?</a></h3>
148<h3>Does <b>ProGuard</b> work for Google Android code?</h3>
149159
150Yes. Google's <code>dx</code> compiler converts ordinary jar files into files160Yes. Google's <code>dx</code> compiler converts ordinary jar files into files
151that run on Android devices. By preprocessing the original jar files,161that run on Android devices. By preprocessing the original jar files,
152<b>ProGuard</b> can significantly reduce the file sizes and boost the run-time162<b>ProGuard</b> can significantly reduce the file sizes and boost the run-time
153performance of the code.163performance of the code.
154164
155<a name="blackberry">&nbsp;</a>165<h3><a name="blackberry">Does <b>ProGuard</b> work for Blackberry code?</a></h3>
156<h3>Does <b>ProGuard</b> work for Blackberry code?</h3>
157166
158It should. RIM's proprietary <code>rapc</code> compiler converts ordinary JME167It should. RIM's proprietary <code>rapc</code> compiler converts ordinary JME
159jar files into cod files that run on Blackberry devices. The compiler performs168jar files into cod files that run on Blackberry devices. The compiler performs
@@ -163,24 +172,21 @@
163bugs. It sometimes fails on obfuscated code that is valid and accepted by other172bugs. It sometimes fails on obfuscated code that is valid and accepted by other
164JME tools and VMs. Your mileage may therefore vary.173JME tools and VMs. Your mileage may therefore vary.
165174
166<a name="ant">&nbsp;</a>175<h3><a name="ant">Does <b>ProGuard</b> have support for Ant?</a></h3>
167<h3>Does <b>ProGuard</b> have support for Ant?</h3>
168176
169Yes. <b>ProGuard</b> provides an Ant task, so that it integrates seamlessly177Yes. <b>ProGuard</b> provides an Ant task, so that it integrates seamlessly
170into your Ant build processes. You can still use configurations in178into your Ant build processes. You can still use configurations in
171<b>ProGuard</b>'s own readable format. Alternatively, if you prefer XML, you179<b>ProGuard</b>'s own readable format. Alternatively, if you prefer XML, you
172can specify the equivalent XML configuration.180can specify the equivalent XML configuration.
173181
174<a name="gui">&nbsp;</a>182<h3><a name="gui">Does <b>ProGuard</b> come with a GUI?</a></h3>
175<h3>Does <b>ProGuard</b> come with a GUI?</h3>
176183
177Yes. First of all, <b>ProGuard</b> is perfectly usable as a command-line tool184Yes. First of all, <b>ProGuard</b> is perfectly usable as a command-line tool
178that can easily be integrated into any automatic build process. For casual185that can easily be integrated into any automatic build process. For casual
179users, there's also a graphical user interface that simplifies creating,186users, there's also a graphical user interface that simplifies creating,
180loading, editing, executing, and saving ProGuard configurations.187loading, editing, executing, and saving ProGuard configurations.
181188
182<a name="forname">&nbsp;</a>189<h3><a name="forname">Does <b>ProGuard</b> handle <code>Class.forName</code> calls?</a></h3>
183<h3>Does <b>ProGuard</b> handle <code>Class.forName</code> calls?</h3>
184190
185Yes. <b>ProGuard</b> automatically handles constructs like191Yes. <b>ProGuard</b> automatically handles constructs like
186<code>Class.forName("SomeClass")</code> and <code>SomeClass.class</code>. The192<code>Class.forName("SomeClass")</code> and <code>SomeClass.class</code>. The
@@ -195,22 +201,23 @@
195implementations may need to be preserved. The user can adapt his configuration201implementations may need to be preserved. The user can adapt his configuration
196accordingly.202accordingly.
197203
198<a name="resource">&nbsp;</a>204<h3><a name="resource">Does <b>ProGuard</b> handle resource files?</a></h3>
199<h3>Does <b>ProGuard</b> handle resource files?</h3>
200205
201Yes. <b>ProGuard</b> copies all non-class resource files, optionally adapting206Yes. <b>ProGuard</b> copies all non-class resource files, optionally adapting
202their names and their contents to the obfuscation that has been applied.207their names and their contents to the obfuscation that has been applied.
203208
204<a name="encrypt">&nbsp;</a>209<h3><a name="encrypt">Does <b>ProGuard</b> encrypt string constants?</a></h3>
205<h3>Does <b>ProGuard</b> encrypt strings constants?</h3>210
206211No. String encryption in program code has to be perfectly reversible by
207No. Storing encrypted string constants in program code is fairly futile, since212definition, so it only improves the obfuscation level. It increases the
208the encryption has to be perfectly reversible by definition. Moreover, the213footprint of the code. However, by popular demand, ProGuard's sibling for
209decryption costs additional memory and computation at run-time. If this feature214Android <a href="http://www.saikoa.com/dexguard"
210is ever incorporated, I'll provide a tool to decrypt the strings as well.215target="_top"><b>DexGuard</b></a> does support string encryption, along with
211216class encryption and hiding of access to sensitive APIs. <b>DexGuard</b> is
212<a name="flow">&nbsp;</a>217distributed by <a href="http://www.saikoa.com/" target="_top">Saikoa</a> and
213<h3>Does <b>ProGuard</b> perform flow obfuscation?</h3>218is not open source.
219
220<h3><a name="flow">Does <b>ProGuard</b> perform flow obfuscation?</a></h3>
214221
215Not explicitly. Control flow obfuscation injects additional branches into the222Not explicitly. Control flow obfuscation injects additional branches into the
216bytecode, in an attempt to fool decompilers. <b>ProGuard</b> does not do this,223bytecode, in an attempt to fool decompilers. <b>ProGuard</b> does not do this,
@@ -218,15 +225,13 @@
218optimization step often already restructures the code to the point where most225optimization step often already restructures the code to the point where most
219decompilers get confused.226decompilers get confused.
220227
221<a name="incremental">&nbsp;</a>228<h3><a name="incremental">Does <b>ProGuard</b> support incremental obfuscation?</a></h3>
222<h3>Does <b>ProGuard</b> support incremental obfuscation?</h3>
223229
224Yes. This feature allows you to specify a previous obfuscation mapping file in230Yes. This feature allows you to specify a previous obfuscation mapping file in
225a new obfuscation step, in order to produce add-ons or patches for obfuscated231a new obfuscation step, in order to produce add-ons or patches for obfuscated
226code.232code.
227233
228<a name="keywords">&nbsp;</a>234<h3><a name="keywords">Can <b>ProGuard</b> obfuscate using reserved keywords?</a></h3>
229<h3>Can <b>ProGuard</b> obfuscate using reserved keywords?</h3>
230235
231Yes. You can specify your own obfuscation dictionary, such as a list of236Yes. You can specify your own obfuscation dictionary, such as a list of
232reserved key words, identifiers with foreign characters, random source files,237reserved key words, identifiers with foreign characters, random source files,
@@ -234,8 +239,7 @@
234Decent decompilers can automatically replace reserved keywords, and the effect239Decent decompilers can automatically replace reserved keywords, and the effect
235can be undone fairly easily, by obfuscating again with simpler names.240can be undone fairly easily, by obfuscating again with simpler names.
236241
237<a name="stacktrace">&nbsp;</a>242<h3><a name="stacktrace">Can <b>ProGuard</b> reconstruct obfuscated stack traces?</a></h3>
238<h3>Can <b>ProGuard</b> reconstruct obfuscated stack traces?</h3>
239243
240Yes. <b>ProGuard</b> comes with a companion tool, <b>ReTrace</b>, that can244Yes. <b>ProGuard</b> comes with a companion tool, <b>ReTrace</b>, that can
241'de-obfuscate' stack traces produced by obfuscated applications. The245'de-obfuscate' stack traces produced by obfuscated applications. The
@@ -245,10 +249,11 @@
245reverse mapping. Please refer to the <a href="manual/index.html">ProGuard User249reverse mapping. Please refer to the <a href="manual/index.html">ProGuard User
246Manual</a> for more details.250Manual</a> for more details.
247251
248<hr>252<hr />
253<noscript><div><a target="_top" href="index.html" class="button">Show menu</a></div></noscript>
249<address>254<address>
250Copyright &copy; 2002-2009255Copyright &copy; 2002-2012
251<a href="http://www.graphics.cornell.edu/~eric/">Eric Lafortune</a>.256<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>.
252</address>257</address>
253</body>258</body>
254</html>259</html>
255260
=== modified file 'docs/GPL_exception.html'
--- docs/GPL_exception.html 2009-10-09 16:17:49 +0000
+++ docs/GPL_exception.html 2012-07-12 00:24:28 +0000
@@ -7,7 +7,7 @@
7<H1>Special Exception to the GNU General Public License</H1>7<H1>Special Exception to the GNU General Public License</H1>
88
9<P>9<P>
10Copyright &copy; 2002-2009 Eric Lafortune10Copyright &copy; 2002-2012 Eric Lafortune
11</P>11</P>
1212
13<P>13<P>
@@ -33,13 +33,17 @@
33In addition, as a special exception, Eric Lafortune gives permission to link33In addition, as a special exception, Eric Lafortune gives permission to link
34the code of this program with the following stand-alone applications:34the code of this program with the following stand-alone applications:
35<ul>35<ul>
36<li>Apache Ant,36<li>Apache Ant,</li>
37<li>Apache Maven,37<li>Apache Maven,</li>
38<li>the Eclipse ProGuardDT GUI,38<li>the Google Android SDK,</li>
39<li>the EclipseME JME IDE,39<li>the Eclipse ProGuardDT GUI,</li>
40<li>the Sun NetBeans Java IDE,40<li>the EclipseME JME IDE,</li>
41<li>the Sun JME Wireless Toolkit, and41<li>the Oracle NetBeans Java IDE,</li>
42<li>the Javaground Tools,42<li>the Oracle JME Wireless Toolkit,</li>
43<li>the Simple Build Tool for Scala (and its scripts),</li>
44<li>the NeoMAD Tools by Neomades,</li>
45<li>the Javaground Tools, and</li>
46<li>the Sanaware Tools,</li>
43</ul>47</ul>
44and distribute linked combinations including the two. You must obey the GNU48and distribute linked combinations including the two. You must obey the GNU
45General Public License in all respects for all of the code used other than49General Public License in all respects for all of the code used other than
4650
=== modified file 'docs/acknowledgements.html'
--- docs/acknowledgements.html 2009-10-09 16:17:49 +0000
+++ docs/acknowledgements.html 2012-07-12 00:24:28 +0000
@@ -1,10 +1,21 @@
1<!doctype html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">1<!doctype html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2<html>2<html>
3<head>3<head>
4<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">4<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
5<meta http-equiv="content-style-type" content="text/css">5<meta http-equiv="content-style-type" content="text/css">
6<link rel="stylesheet" type="text/css" href="style.css">6<link rel="stylesheet" type="text/css" href="style.css">
7<title>ProGuard Acknowledgements</title>7<title>ProGuard Acknowledgements</title>
8<script type="text/javascript" language="JavaScript">
9<!--
10if (window.self==window.top)
11 window.top.location.replace("index.html#"+window.location.pathname+window.location.hash);
12else {
13 var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), "");
14 if (window.top.location.hash!=hash)
15 window.top.location.hash=hash;
16}
17//-->
18</script>
8</head>19</head>
9<body>20<body>
1021
@@ -12,7 +23,7 @@
1223
13The first versions of <b>ProGuard</b> grew out of <b>RetroGuard</b>, which its24The first versions of <b>ProGuard</b> grew out of <b>RetroGuard</b>, which its
14author Mark Welsh kindly made available under the GNU Lesser General Public25author Mark Welsh kindly made available under the GNU Lesser General Public
15License. <b>RetroGuard</b> is a very nice piece of code, but it only performed26License. RetroGuard is a very nice piece of code, but it only performed
16obfuscation. I started from the class file parsing code and wrote my own27obfuscation. I started from the class file parsing code and wrote my own
17shrinker, optimizer, obfuscator, and preverifier. As of version 4.0, all of the28shrinker, optimizer, obfuscator, and preverifier. As of version 4.0, all of the
18original code has been rewritten, so the most obvious remaining similarity are29original code has been rewritten, so the most obvious remaining similarity are
@@ -33,35 +44,34 @@
33Daniel Sj&ouml;blom, Jan Filipsky, Charles Smith, Gerrit Telkamp, Noel44Daniel Sj&ouml;blom, Jan Filipsky, Charles Smith, Gerrit Telkamp, Noel
34Grandin, Torbj&ouml;rn S&ouml;derstedt, Clemens Eisserer, Clark Bassett,45Grandin, Torbj&ouml;rn S&ouml;derstedt, Clemens Eisserer, Clark Bassett,
35Eduard Welch, Dawid Weiss, Andrew Wilson, Sean Owen, Niels Gron, Ishan Mehta,46Eduard Welch, Dawid Weiss, Andrew Wilson, Sean Owen, Niels Gron, Ishan Mehta,
36Steven Adams, Xavier Kral,47Steven Adams, Xavier Kral, Stefan Martin, Toby Reyelts,
37and many others. Thanks! Your feedback has been invaluable.48and many others. Thanks! Your feedback has been invaluable.
38<p>49<p>
3950
40I am developing ProGuard in my spare time, which is possible thanks to my51<a href="http://www.saikoa.com/" target="_top">Saikoa</a> is providing the
41day-time job at <a href="http://www.luciad.com/" target="other">Luciad</a>.52financial resources for this project. At Saikoa, we're also developing
53ProGuard's sibling for Android,
54<a href="http://www.saikoa.com/dexguard" target="_top">DexGuard</a>.
42<p>55<p>
4356
44<a href="http://sourceforge.net/projects/proguard/"57<a href="http://sourceforge.net/projects/proguard/"
45target="other">SourceForge</a> is generously providing the resources for58target="other">SourceForge</a> is providing the resources for hosting this
46hosting this project and many other projects.59project and many other projects.
47<p>60<p>
4861
49JetBrains is kindly providing a license for its IntelliJ IDEA development62The code and these web pages were written using Oracle/Sun's JDKs, Linux,
50environment.63IntelliJ IDEA, GNU emacs, bash, sed, awk, and a whole host of other tools that
51<p>64continue to make programming interesting.
5265<p>
53The code and these web pages were written using Sun's JDKs, Linux, IntelliJ66
54IDEA, GNU emacs, bash, sed, awk, and a whole host of other tools that continue67And finally, I'm a great fan of Sanaware's <a
55to make programming interesting.
56<p>
57
58And finally, I'm a great fan of the <a
59href="http://www.javadocking.com/" target="other">Java Docking Library</a>.68href="http://www.javadocking.com/" target="other">Java Docking Library</a>.
6069
61<hr>70<hr />
71<noscript><div><a target="_top" href="index.html" class="button">Show menu</a></div></noscript>
62<address>72<address>
63Copyright &copy; 2002-200973Copyright &copy; 2002-2012
64<a href="http://www.graphics.cornell.edu/~eric/">Eric Lafortune</a>.74<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>.
65</address>75</address>
6676
67</body>77</body>
6878
=== modified file 'docs/alternatives.html'
--- docs/alternatives.html 2009-10-09 16:17:49 +0000
+++ docs/alternatives.html 2012-07-12 00:24:28 +0000
@@ -1,10 +1,21 @@
1<!doctype html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">1<!doctype html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2<html>2<html>
3<head>3<head>
4<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">4<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
5<meta http-equiv="content-style-type" content="text/css">5<meta http-equiv="content-style-type" content="text/css">
6<link rel="stylesheet" type="text/css" href="style.css">6<link rel="stylesheet" type="text/css" href="style.css">
7<title>ProGuard Alternatives</title>7<title>ProGuard Alternatives</title>
8<script type="text/javascript" language="JavaScript">
9<!--
10if (window.self==window.top)
11 window.top.location.replace("index.html#"+window.location.pathname+window.location.hash);
12else {
13 var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), "");
14 if (window.top.location.hash!=hash)
15 window.top.location.hash=hash;
16}
17//-->
18</script>
8</head>19</head>
9<body>20<body>
1021
@@ -34,612 +45,682 @@
34</tr>45</tr>
3546
36<tr>47<tr>
37<td><a target="other" href="http://www.graphics.cornell.edu/~eric/">Eric Lafortune</a></td>48<td><a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a></td>
38<td><a target="_top" href="http://proguard.sourceforge.net/">ProGuard</a></td>49<td><a target="_top" href="http://proguard.sourceforge.net/">ProGuard</a></td>
39<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>50<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
40<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>51<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
41<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>52<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
42<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>53<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
43<td>Free (GPL)</td>54<td>Free (GPL)</td>
44</tr>55</tr>
4556
46<tr>57<tr>
47<td><a target="other" rel="nofollow" href="http://www.informatik.uni-oldenburg.de/leute/hoenicke.html">Jochen Hoenicke</a></td>58<td><a target="other" rel="nofollow" href="http://www.informatik.uni-oldenburg.de/leute/hoenicke.html">Jochen Hoenicke</a></td>
48<td><a target="other" href="http://jode.sourceforge.net/">Jode</a></td>59<td><a target="other" href="http://jode.sourceforge.net/">Jode</a></td>
49<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>60<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
50<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>61<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
51<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>62<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
52<td align="center"><br></td>63<td align="center"><br /></td>
53<td>Free (GPL)</td>64<td>Free (GPL)</td>
54</tr>65</tr>
5566
56<tr>67<tr>
57<td><a target="other" rel="nofollow" href="http://www.nq4.de/">NQ4</a></td>
58<td><a target="other" href="http://www.nq4.de/">Joga</a></td>
59<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
60<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
61<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
62<td align="center"><br></td>
63<td>Free (no source)</td>
64</tr>
65
66<tr>
67<td><a target="other" rel="nofollow" href="http://www.cs.cornell.edu/nystrom/">Nate Nystrom</a></td>68<td><a target="other" rel="nofollow" href="http://www.cs.cornell.edu/nystrom/">Nate Nystrom</a></td>
68<td><a target="other" href="http://www.cs.purdue.edu/homes/hosking/bloat/">Bloat</a></td>69<td><a target="other" href="http://www.cs.purdue.edu/homes/hosking/bloat/">Bloat</a></td>
69<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>70<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
70<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>71<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
71<td align="center"><br></td>72<td align="center"><br /></td>
72<td align="center"><br></td>73<td align="center"><br /></td>
73<td>Free</td>74<td>Free</td>
74</tr>75</tr>
7576
76<tr>77<tr>
77<td><a target="other" rel="nofollow" href="http://sourceforge.net/users/hchacha/">Hidetoshi Ohuchi</a></td>78<td><a target="other" rel="nofollow" href="http://sourceforge.net/users/hchacha/">Hidetoshi Ohuchi</a></td>
78<td><a target="other" href="http://jarg.sourceforge.net/">Jarg</a></td>79<td><a target="other" href="http://jarg.sourceforge.net/">Jarg</a></td>
79<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>80<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
80<td align="center"><br></td>81<td align="center"><br /></td>
81<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>82<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
82<td align="center"><br></td>83<td align="center"><br /></td>
83<td>Free (BSD)</td>84<td>Free (BSD)</td>
84</tr>85</tr>
8586
86<tr>87<tr>
87<td><a target="other" rel="nofollow" href="http://www.geocities.com/CapeCanaveral/Hall/2334/resume.html">Alexander Shvets</a></td>
88<td><a target="other" href="http://www.geocities.com/CapeCanaveral/Hall/2334/Programs/cafebabe.html">CafeBabe</a></td>
89<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
90<td align="center"><br></td>
91<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
92<td align="center"><br></td>
93<td>Free</td>
94</tr>
95
96<tr>
97<td><a target="other" rel="nofollow" href="http://www.yworks.com/">yWorks</a></td>88<td><a target="other" rel="nofollow" href="http://www.yworks.com/">yWorks</a></td>
98<td><a target="other" href="http://www.yworks.com/en/products_yguard_about.htm">yGuard</a></td>89<td><a target="other" href="http://www.yworks.com/en/products_yguard_about.htm">yGuard</a></td>
99<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>90<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
100<td align="center"><br></td>91<td align="center"><br /></td>
101<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>92<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
102<td align="center"><br></td>93<td align="center"><br /></td>
103<td>Free (no source)</td>94<td>Free (no source)</td>
104</tr>95</tr>
10596
106<tr>97<tr>
107<td><a target="other" rel="nofollow" href="http://www.cs.purdue.edu/homes/grothoff/">Christian Grothoff</a></td>
108<td><a target="other" href="http://www.ovmj.org/jamit/">Jamit</a></td>
109<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
110<td align="center"><br></td>
111<td align="center"><br></td>
112<td align="center"><br></td>
113<td>Free (GPL)</td>
114</tr>
115
116<tr>
117<td><a target="other" rel="nofollow" href="http://mojo.codehaus.org/">Mojo</a></td>98<td><a target="other" rel="nofollow" href="http://mojo.codehaus.org/">Mojo</a></td>
118<td><a target="other" href="http://mojo.codehaus.org/minijar-maven-plugin/">Minijar</a></td>99<td><a target="other" href="http://mojo.codehaus.org/minijar-maven-plugin/">Minijar</a></td>
119<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>100<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
120<td align="center"><br></td>101<td align="center"><br /></td>
121<td align="center"><br></td>102<td align="center"><br /></td>
122<td align="center"><br></td>103<td align="center"><br /></td>
123<td>Free (Apache)</td>104<td>Free (Apache)</td>
124</tr>105</tr>
125106
126<tr>107<tr>
127<td><a target="other" rel="nofollow" href="http://www.riggshill.com/">RiggsHill Software</a></td>108<td><a target="other" rel="nofollow" href="http://www.riggshill.com/">RiggsHill Software</a></td>
128<td><a target="other" href="http://genjar.sourceforge.net/">GenJar</a></td>109<td><a target="other" href="http://genjar.sourceforge.net/">GenJar</a></td>
129<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>110<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
130<td align="center"><br></td>111<td align="center"><br /></td>
131<td align="center"><br></td>112<td align="center"><br /></td>
132<td align="center"><br></td>113<td align="center"><br /></td>
133<td>Free (Apache)</td>114<td>Free (Apache)</td>
134</tr>115</tr>
135116
136<tr>117<tr>
137<td><a target="other" rel="nofollow" href="http://ant.apache.org/">Apache</a></td>118<td><a target="other" rel="nofollow" href="http://ant.apache.org/">Apache</a></td>
138<td><a target="other" href="http://ant.apache.org/manual/OptionalTypes/classfileset.html">Ant Classfileset</a></td>119<td><a target="other" href="http://ant.apache.org/manual/Types/classfileset.html">Ant Classfileset</a></td>
139<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>120<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
140<td align="center"><br></td>121<td align="center"><br /></td>
141<td align="center"><br></td>122<td align="center"><br /></td>
142<td align="center"><br></td>123<td align="center"><br /></td>
143<td>Free (Apache)</td>124<td>Free (Apache)</td>
125</tr>
126
127<tr>
128<td><a target="other" rel="nofollow" href="http://www.celton.mobi/">Carsten Elton S&oslash;rensen</a></td>
129<td><a target="other" href="http://code.google.com/p/treeshaker/">Treeshaker</a></td>
130<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
131<td align="center"><br /></td>
132<td align="center"><br /></td>
133<td align="center"><br /></td>
134<td>Free (Apache)</td>
135</tr>
136
137<tr>
138<td><a target="other" rel="nofollow" href="http://www.ucdetector.org/">J&ouml;rg Spieler</a></td>
139<td><a target="other" href="http://www.ucdetector.org/">UCDetector</a></td>
140<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
141<td align="center"><br /></td>
142<td align="center"><br /></td>
143<td align="center"><br /></td>
144<td>Free (EPL)</td>
144</tr>145</tr>
145146
146<tr>147<tr>
147<td><a target="other" rel="nofollow" href="http://www.curious-creature.org/">Romain Guy</a></td>148<td><a target="other" rel="nofollow" href="http://www.curious-creature.org/">Romain Guy</a></td>
148<td><a target="other" href="http://www.jroller.com/gfx/entry/get_what_you_need_from">Harvester</a></td>149<td><a target="other" href="http://www.jroller.com/gfx/entry/get_what_you_need_from">Harvester</a></td>
149<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>150<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
150<td align="center"><br></td>151<td align="center"><br /></td>
151<td align="center"><br></td>152<td align="center"><br /></td>
152<td align="center"><br></td>153<td align="center"><br /></td>
153<td>Free (BSD)</td>154<td>Free (BSD)</td>
154</tr>155</tr>
155156
156<tr>157<tr>
157<td><a target="other" rel="nofollow" href="https://dcd.dev.java.net/">Emeric Vernat</a></td>158<td><a target="other" rel="nofollow" href="http://java.net/projects/dcd/">Emeric Vernat</a></td>
158<td><a target="other" href="https://dcd.dev.java.net/">DCD</a></td>159<td><a target="other" href="http://java.net/projects/dcd/">DCD</a></td>
159<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>160<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
160<td align="center"><br></td>161<td align="center"><br /></td>
161<td align="center"><br></td>162<td align="center"><br /></td>
162<td align="center"><br></td>163<td align="center"><br /></td>
163<td>Free (LGPL)</td>164<td>Free (LGPL)</td>
164</tr>165</tr>
165166
166<tr>167<tr>
167<td><a target="other" rel="nofollow" href="http://sadun-util.sourceforge.net/">Cristiano Sadun</a></td>168<td><a target="other" rel="nofollow" href="http://sadun-util.sourceforge.net/">Cristiano Sadun</a></td>
168<td><a target="other" href="http://sadun-util.sourceforge.net/pack.html">Pack</a></td>169<td><a target="other" href="http://sadun-util.sourceforge.net/pack.html">Pack</a></td>
169<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>170<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
170<td align="center"><br></td>171<td align="center"><br /></td>
171<td align="center"><br></td>172<td align="center"><br /></td>
172<td align="center"><br></td>173<td align="center"><br /></td>
173<td>Free (LGPL)</td>
174</tr>
175
176<tr>
177<td><a target="other" rel="nofollow" href="http://darcs.brianweb.net/">Brian Alliet</a></td>
178<td><a target="other" href="http://darcs.brianweb.net/gcclass/">Gcclass</a></td>
179<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
180<td align="center"><br></td>
181<td align="center"><br></td>
182<td align="center"><br></td>
183<td>Free (LGPL)</td>174<td>Free (LGPL)</td>
184</tr>175</tr>
185176
186<tr>177<tr>
187<td><a target="other" rel="nofollow" href="http://www.sable.mcgill.ca/">Sable</a></td>178<td><a target="other" rel="nofollow" href="http://www.sable.mcgill.ca/">Sable</a></td>
188<td><a target="other" href="http://www.sable.mcgill.ca/soot/">Soot</a></td>179<td><a target="other" href="http://www.sable.mcgill.ca/soot/">Soot</a></td>
189<td align="center"><br></td>180<td align="center"><br /></td>
190<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>181<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
191<td align="center"><br></td>182<td align="center"><br /></td>
192<td align="center"><br></td>183<td align="center"><br /></td>
193<td>Free (LGPL)</td>184<td>Free (LGPL)</td>
194</tr>185</tr>
195186
196<tr>187<tr>
197<td><a target="other" rel="nofollow" href="http://www.garret.ru/~knizhnik/">Konstantin Knizhnik</a></td>188<td><a target="other" rel="nofollow" href="http://www.garret.ru/~knizhnik/">Konstantin Knizhnik</a></td>
198<td><a target="other" href="http://www.garret.ru/~knizhnik/javago/ReadMe.htm">JavaGO</a></td>189<td><a target="other" href="http://www.garret.ru/~knizhnik/javago/ReadMe.htm">JavaGO</a></td>
199<td align="center"><br></td>190<td align="center"><br /></td>
200<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>191<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
201<td align="center"><br></td>192<td align="center"><br /></td>
202<td align="center"><br></td>193<td align="center"><br /></td>
203<td>Free</td>
204</tr>
205
206<tr>
207<td><a target="other" rel="nofollow" href="http://donquixote.cafebabe.jp/">Haruaki Tamada</a></td>
208<td><a target="other" href="http://donquixote.cafebabe.jp/">DonQuixote</a></td>
209<td align="center"><br></td>
210<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
211<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
212<td align="center"><br></td>
213<td>Free</td>194<td>Free</td>
214</tr>195</tr>
215196
216<tr>197<tr>
217<td><a target="other" rel="nofollow" href="http://www.sable.mcgill.ca/">Sable</a></td>198<td><a target="other" rel="nofollow" href="http://www.sable.mcgill.ca/">Sable</a></td>
218<td><a target="other" href="http://www.sable.mcgill.ca/JBCO/">JBCO</a></td>199<td><a target="other" href="http://www.sable.mcgill.ca/JBCO/">JBCO</a></td>
219<td align="center"><br></td>200<td align="center"><br /></td>
220<td align="center"><br></td>201<td align="center"><br /></td>
221<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>202<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
222<td align="center"><br></td>203<td align="center"><br /></td>
223<td>Free (LGPL)</td>204<td>Free (LGPL)</td>
224</tr>205</tr>
225206
226<tr>207<tr>
208<td><a target="other" rel="nofollow" href="http://classencrypt.sourceforge.net/">Jeffrey Wheaton</a></td>
209<td><a target="other" href="http://classencrypt.sourceforge.net/">ClassEncrypt</a></td>
210<td align="center"><br /></td>
211<td align="center"><br /></td>
212<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
213<td align="center"><br /></td>
214<td>Free (GPL)</td>
215</tr>
216
217<tr>
227<td><a target="other" rel="nofollow" href="http://sourceforge.net/users/glurk/">Thorsten Heit</a></td>218<td><a target="other" rel="nofollow" href="http://sourceforge.net/users/glurk/">Thorsten Heit</a></td>
228<td><a target="other" href="http://sourceforge.net/projects/javaguard/">JavaGuard</a></td>219<td><a target="other" href="http://sourceforge.net/projects/javaguard/">JavaGuard</a></td>
229<td align="center"><br></td>220<td align="center"><br /></td>
230<td align="center"><br></td>221<td align="center"><br /></td>
231<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>222<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
232<td align="center"><br></td>223<td align="center"><br /></td>
233<td>Free (LGPL)</td>224<td>Free (LGPL)</td>
234</tr>225</tr>
235226
236<tr>227<tr>
237<td><a target="other" rel="nofollow" href="http://mwobfu.sourceforge.net/">Patrick Mueller</a></td>228<td><a target="other" rel="nofollow" href="http://mwobfu.sourceforge.net/">Patrick Mueller</a></td>
238<td><a target="other" href="http://mwobfu.sourceforge.net/">Mwobfu</a></td>229<td><a target="other" href="http://mwobfu.sourceforge.net/">Mwobfu</a></td>
239<td align="center"><br></td>230<td align="center"><br /></td>
240<td align="center"><br></td>231<td align="center"><br /></td>
241<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>232<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
242<td align="center"><br></td>233<td align="center"><br /></td>
243<td>Free (GPL)</td>234<td>Free (GPL)</td>
244</tr>235</tr>
245236
246<tr>237<tr>
247<td><a target="other" rel="nofollow" href="http://www.elegant-software.com/">Elegant Software</a></td>
248<td><a target="other" href="http://www.elegant-software.com/software/jmangle/">JMangle</a></td>
249<td align="center"><br></td>
250<td align="center"><br></td>
251<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
252<td align="center"><br></td>
253<td>Free</td>
254</tr>
255
256<tr>
257<td><a target="other" rel="nofollow" href="http://www.bebbosoft.de/">BebboSoft</a></td>238<td><a target="other" rel="nofollow" href="http://www.bebbosoft.de/">BebboSoft</a></td>
258<td><a target="other" href="http://www.bebbosoft.de/index.html#java/mug/index.html">Bb_mug</a></td>239<td><a target="other" href="http://www.bebbosoft.de/#java/mug/index.wiki">Bb_mug</a></td>
259<td align="center"><br></td>240<td align="center"><br /></td>
260<td align="center"><br></td>241<td align="center"><br /></td>
261<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>242<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
262<td align="center"><br></td>243<td align="center"><br /></td>
263<td>Free (no source)</td>244<td>Free (no source)</td>
264</tr>245</tr>
265246
266<tr>247<tr>
267<td><a target="other" rel="nofollow" href="http://www.drjava.de/">Dr. Java</a></td>248<td><a target="other" rel="nofollow" href="http://github.com/v6ak">V&iacute;t &Scaron;est&aacute;k</a></td>
268<td><a target="other" href="http://www.drjava.de/obfuscator/">Marvin Obfuscator</a></td>249<td><a target="other" href="http://github.com/v6ak/Preverifier/">Preverifier</a></td>
269<td align="center"><br></td>250<td align="center"><br /></td>
270<td align="center"><br></td>251<td align="center"><br /></td>
271<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>252<td align="center"><br /></td>
272<td align="center"><br></td>253<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
273<td>Free (no source)</td>254<td>Free (EPL)</td>
274</tr>255</tr>
275256
276<tr>257<tr>
277<td><a target="other" rel="nofollow" href="http://www.ibm.com/">IBM</a></td>258<td><a target="_top" href="http://www.saikoa.com/">Saikoa</a></td>
278<td><a target="other" href="http://www-306.ibm.com/software/wireless/wsdd/">WSDD</a></td>259<td><a target="_top" href="http://www.saikoa.com/dexguard">DexGuard</a></td>
279<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>260<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
280<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>261<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
281<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>262<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
282<td align="center"><br></td>263<td align="center"><br /></td>
283<td>Commercial</td>264<td>Commercial</td>
284</tr>265</tr>
285266
286<tr>267<tr>
287<td><a target="other" rel="nofollow" href="http://www.preemptive.com/">PreEmptive</a></td>268<td><a target="other" rel="nofollow" href="http://www.preemptive.com/">PreEmptive</a></td>
288<td><a target="other" href="http://www.preemptive.com/products/dasho/index.html">DashOPro</a></td>269<td><a target="other" href="http://www.preemptive.com/products/dasho/index.html">DashOPro</a></td>
289<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>270<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
290<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>271<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
291<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>272<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
292<td align="center"><br></td>273<td align="center"><br /></td>
293<td>Commercial</td>274<td>Commercial</td>
294</tr>275</tr>
295276
296<tr>277<tr>
297<td><a target="other" rel="nofollow" href="http://www.zelix.com/">Zelix</a></td>278<td><a target="other" rel="nofollow" href="http://www.zelix.com/">Zelix</a></td>
298<td><a target="other" href="http://www.zelix.com/klassmaster/index.html">KlassMaster</a></td>279<td><a target="other" href="http://www.zelix.com/klassmaster/index.html">KlassMaster</a></td>
299<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>280<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
300<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>281<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
301<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>282<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
302<td align="center"><br></td>283<td align="center"><br /></td>
303<td>Commercial</td>
304</tr>
305
306<tr>
307<td><a target="other" rel="nofollow" href="http://www.s5systems.com/">S5 Systems</a></td>
308<td><a target="other" href="http://www.s5systems.com/jPresto.htm">jPresto</a></td>
309<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
310<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
311<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
312<td align="center"><br></td>
313<td>Commercial</td>284<td>Commercial</td>
314</tr>285</tr>
315286
316<tr>287<tr>
317<td><a target="other" rel="nofollow" href="http://www.s-cradle.com/english/index.html">Sophia Cradle</a></td>288<td><a target="other" rel="nofollow" href="http://www.s-cradle.com/english/index.html">Sophia Cradle</a></td>
318<td><a target="other" href="http://www.s-cradle.com/english/products/sophiacompress_java/index.html">SophiaCompress</a></td>289<td><a target="other" href="http://www.s-cradle.com/english/products/sophiacompress_java/index.html">SophiaCompress</a></td>
319<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>290<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
320<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>291<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
321<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>292<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
322<td align="center"><br></td>293<td align="center"><br /></td>
323<td>Commercial</td>
324</tr>
325
326<tr>
327<td><a target="other" rel="nofollow" href="http://www.retrologic.com/">RetroLogic</a></td>
328<td><a target="other" href="http://www.retrologic.com/">RetroGuard</a></td>
329<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
330<td align="center"><br></td>
331<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
332<td align="center"><br></td>
333<td>Commercial</td>
334</tr>
335
336<tr>
337<td><a target="other" rel="nofollow" href="http://www.codingart.com/">CodingArt</a></td>
338<td><a target="other" href="http://www.codingart.com/codeshield.html">CodeShield</a></td>
339<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
340<td align="center"><br></td>
341<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
342<td align="center"><br></td>
343<td>Commercial</td>294<td>Commercial</td>
344</tr>295</tr>
345296
346<tr>297<tr>
347<td><a target="other" rel="nofollow" href="http://www.e-t.com/">Eastridge Technology</a></td>298<td><a target="other" rel="nofollow" href="http://www.e-t.com/">Eastridge Technology</a></td>
348<td><a target="other" href="http://www.e-t.com/jshrink.html">Jshrink</a></td>299<td><a target="other" href="http://www.e-t.com/jshrink.html">Jshrink</a></td>
349<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>300<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
350<td align="center"><br></td>301<td align="center"><br /></td>
351<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>302<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
352<td align="center"><br></td>303<td align="center"><br /></td>
353<td>Commercial</td>
354</tr>
355
356<tr>
357<td><a target="other" rel="nofollow" href="http://www.helseth.com/">Helseth</a></td>
358<td><a target="other" href="http://www.helseth.com/HJO.htm">JObfuscator</a></td>
359<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
360<td align="center"><br></td>
361<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
362<td align="center"><br></td>
363<td>Commercial</td>304<td>Commercial</td>
364</tr>305</tr>
365306
366<tr>307<tr>
367<td><a target="other" rel="nofollow" href="http://www.leesw.com/">LeeSoftware</a></td>308<td><a target="other" rel="nofollow" href="http://www.leesw.com/">LeeSoftware</a></td>
368<td><a target="other" href="http://www.leesw.com/">Smokescreen Obfuscator</a></td>309<td><a target="other" href="http://www.leesw.com/">Smokescreen Obfuscator</a></td>
369<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>310<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
370<td align="center"><br></td>311<td align="center"><br /></td>
371<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>312<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
372<td align="center"><br></td>313<td align="center"><br /></td>
373<td>Commercial</td>
374</tr>
375
376<tr>
377<td><a target="other" rel="nofollow" href="http://www.vegatech.com/">Vega Technologies</a></td>
378<td><a target="other" href="http://www.vegatech.com/jzipper/">JZipper</a></td>
379<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
380<td align="center"><br></td>
381<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
382<td align="center"><br></td>
383<td>Commercial</td>314<td>Commercial</td>
384</tr>315</tr>
385316
386<tr>317<tr>
387<td><a target="other" rel="nofollow" href="http://www.innaworks.com/">Innaworks</a></td>318<td><a target="other" rel="nofollow" href="http://www.innaworks.com/">Innaworks</a></td>
388<td><a target="other" href="http://www.innaworks.com/">mBooster</a></td>319<td><a target="other" href="http://www.innaworks.com/mBooster">mBooster</a></td>
389<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>320<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
390<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>321<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
391<td align="center"><br></td>322<td align="center"><br /></td>
392<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>323<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
393<td>Commercial</td>324<td>Commercial</td>
394</tr>325</tr>
395326
396<tr>327<tr>
397<td><a target="other" rel="nofollow" href="http://www.uni-vologda.ac.ru/~c3c/">Sergey Sverdlov</a></td>328<td><a target="other" rel="nofollow" href="http://www.uni-vologda.ac.ru/~c3c/">Sergey Sverdlov</a></td>
398<td><a target="other" href="http://www.uni-vologda.ac.ru/~c3c/jco/">J.Class Optimizer</a></td>329<td><a target="other" href="http://www.uni-vologda.ac.ru/~c3c/jco/">J.Class Optimizer</a></td>
399<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>330<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
400<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>331<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
401<td align="center"><br></td>332<td align="center"><br /></td>
402<td align="center"><br></td>333<td align="center"><br /></td>
403<td>Commercial</td>334<td>Commercial</td>
404</tr>335</tr>
405336
406<tr>337<tr>
407<td><a target="other" rel="nofollow" href="http://www.smardec.com/">Smardec</a></td>338<td><a target="other" rel="nofollow" href="http://www.smardec.com/">Smardec</a></td>
408<td><a target="other" href="//www.allatori.com/">Allatori</a></td>339<td><a target="other" href="http://www.allatori.com/">Allatori</a></td>
409<td align="center"><br></td>340<td align="center"><br /></td>
410<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>341<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
411<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>342<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
412<td align="center"><br></td>343<td align="center"><br /></td>
413<td>Commercial</td>344<td>Commercial</td>
414</tr>345</tr>
415346
416<tr>347<tr>
417<td><a target="other" rel="nofollow" href="http://cs.arizona.edu/">U. of Arizona</a></td>348<td><a target="other" rel="nofollow" href="http://cs.arizona.edu/">U. of Arizona</a></td>
418<td><a target="other" href="http://sandmark.cs.arizona.edu/">SandMark</a></td>349<td><a target="other" href="http://sandmark.cs.arizona.edu/">SandMark</a></td>
419<td align="center"><br></td>350<td align="center"><br /></td>
420<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>351<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
421<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>352<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
422<td align="center"><br></td>353<td align="center"><br /></td>
354<td>Commercial</td>
355</tr>
356
357<tr>
358<td><a target="other" rel="nofollow" href="http://zenofx.com/">Zenofx</a></td>
359<td><a target="other" href="http://zenofx.com/classguard/">ClassGuard</a></td>
360<td align="center"><br /></td>
361<td align="center"><br /></td>
362<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
363<td align="center"><br /></td>
364<td>Commercial</td>
365</tr>
366
367<tr>
368<td><a target="other" rel="nofollow" href="http://www.bisguard.com/">BIS Guard &amp; Co.</a></td>
369<td><a target="other" href="http://www.bisguard.com/java.html">Java Antidecompiler</a></td>
370<td align="center"><br /></td>
371<td align="center"><br /></td>
372<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
373<td align="center"><br /></td>
423<td>Commercial</td>374<td>Commercial</td>
424</tr>375</tr>
425376
426<tr>377<tr>
427<td><a target="other" rel="nofollow" href="http://www.force5.com/">Force 5</a></td>378<td><a target="other" rel="nofollow" href="http://www.force5.com/">Force 5</a></td>
428<td><a target="other" href="http://www.force5.com/">JCloak</a></td>379<td><a target="other" href="http://www.force5.com/JCloak/ProductJCloak.html">JCloak</a></td>
429<td align="center"><br></td>380<td align="center"><br /></td>
430<td align="center"><br></td>381<td align="center"><br /></td>
431<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>382<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
432<td align="center"><br></td>383<td align="center"><br /></td>
433<td>Commercial</td>384<td>Commercial</td>
434</tr>385</tr>
435386
436<tr>387<tr>
437<td><a target="other" rel="nofollow" href="http://www.semdesigns.com/">Semantic Designs</a></td>388<td><a target="other" rel="nofollow" href="http://www.semdesigns.com/">Semantic Designs</a></td>
438<td><a target="other" href="http://www.semdesigns.com/Products/Obfuscators/JavaObfuscator.html">Obfuscator</a></td>389<td><a target="other" href="http://www.semdesigns.com/Products/Obfuscators/JavaObfuscator.html">Obfuscator</a></td>
439<td align="center"><br></td>390<td align="center"><br /></td>
440<td align="center"><br></td>391<td align="center"><br /></td>
441<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>392<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
442<td align="center"><br></td>393<td align="center"><br /></td>
443<td>Commercial</td>394<td>Commercial</td>
444</tr>395</tr>
445396
446<tr>397<tr>
447<td><a target="other" rel="nofollow" href="http://www.duckware.com/">Duckware</a></td>398<td><a target="other" rel="nofollow" href="http://www.duckware.com/">Duckware</a></td>
448<td><a target="other" href="http://www.duckware.com/jobfuscate/">Jobfuscate</a></td>399<td><a target="other" href="http://www.duckware.com/jobfuscate/">Jobfuscate</a></td>
449<td align="center"><br></td>400<td align="center"><br /></td>
450<td align="center"><br></td>401<td align="center"><br /></td>
451<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>402<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
452<td align="center"><br></td>403<td align="center"><br /></td>
453<td>Commercial</td>404<td>Commercial</td>
454</tr>405</tr>
455406
456<tr>407<tr>
457<td><a target="other" rel="nofollow" href="http://www.jproof.com/">JProof</a></td>408<td><a target="other" rel="nofollow" href="http://www.arxan.com/">Arxan</a></td>
458<td><a target="other" href="http://www.jproof.com/">JProof</a></td>409<td><a target="other" href="http://www.arxan.com/software-protection-products/java-GuardIt/index.php">GuardIT</a></td>
459<td align="center"><br></td>410<td align="center"><br /></td>
460<td align="center"><br></td>411<td align="center"><br /></td>
461<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>412<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
462<td align="center"><br></td>413<td align="center"><br /></td>
463<td>Commercial</td>414<td>Commercial</td>
464</tr>
465
466<tr>
467<td><a target="other" rel="nofollow" href="http://www.solutia.ro/">GITS</a></td>
468<td><a target="other" href="http://www.solutia.ro/pages/javadc/">Blurfuscator</a></td>
469<td align="center"><br></td>
470<td align="center"><br></td>
471<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
472<td align="center"><br></td>
473<td>Commercial</td>
474</tr>
475
476<tr>
477<td><a target="other" rel="nofollow" href="http://www.chainkey.com/">ChainKey</a></td>
478<td><a target="other" href="http://www.chainkey.com/en/jcp/">Java Code Protector</a></td>
479<td align="center"><br></td>
480<td align="center"><br></td>
481<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
482<td align="center"><br></td>
483<td>Commercial</td>
484</tr>
485
486<tr>
487<td><a target="other" rel="nofollow" href="http://sourceforge.net/projects/flmobf/">Alain Moran</a></td>
488<td><a target="other" href="http://sourceforge.net/projects/flmobf/">flmObf</a></td>
489<td align="center"><br></td>
490<td align="center"><br></td>
491<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
492<td align="center"><br></td>
493<td>Free (BSD)</td>
494</tr>415</tr>
495416
496<tr>417<tr>
497<td><a target="other" rel="nofollow" href="http://www.chez.com/vasile/">Vasile Calmatui</a></td>418<td><a target="other" rel="nofollow" href="http://www.chez.com/vasile/">Vasile Calmatui</a></td>
498<td><a target="other" href="http://www.chez.com/vasile/obfu/VasObfuLite.html">VasObfuLite</a></td>419<td><a target="other" href="http://www.chez.com/vasile/obfu/VasObfuLite.html">VasObfuLite</a></td>
499<td align="center"><br></td>420<td align="center"><br /></td>
500<td align="center"><br></td>421<td align="center"><br /></td>
501<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>422<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
502<td align="center"><br></td>423<td align="center"><br /></td>
503<td>Free</td>424<td>Free</td>
504</tr>425</tr>
505426
506<tr class="disappeared">427<tr class="disappeared">
507<td><a target="other" rel="nofollow" href="http://www.alphaworks.ibm.com/">IBM AlphaWorks</a></td>428<td><a target="other" rel="nofollow" href="http://www.alphaworks.ibm.com/">IBM AlphaWorks</a></td>
508<td><a target="other" href="http://www.research.ibm.com/jax/">JAX</a></td>429<td><a target="other" href="http://www.research.ibm.com/jax/">JAX</a></td>
509<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>430<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
510<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>431<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
511<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>432<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
512<td align="center"><br></td>433<td align="center"><br /></td>
513<td>(discontinued)</td>434<td>(discontinued)</td>
514</tr>435</tr>
515436
516<tr class="disappeared">437<tr class="disappeared">
438<td><a target="other" rel="nofollow" href="http://www.nq4.de/">NQ4</a></td>
439<td><a target="other" rel="nofollow" href="http://www.nq4.de/">Joga</a></td>
440<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
441<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
442<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
443<td align="center"><br /></td>
444<td>(discontinued?)</td>
445</tr>
446
447<tr class="disappeared">
517<td><a target="other" rel="nofollow" href="http://www-i2.informatik.rwth-aachen.de/~markusj/">Markus Jansen</a></td>448<td><a target="other" rel="nofollow" href="http://www-i2.informatik.rwth-aachen.de/~markusj/">Markus Jansen</a></td>
518<td><a target="other" rel="nofollow" href="http://www-i2.informatik.rwth-aachen.de/~markusj/jopt/">Jopt</a></td>449<td><a target="other" rel="nofollow" href="http://www-i2.informatik.rwth-aachen.de/~markusj/jopt/">Jopt</a></td>
519<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>450<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
520<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>451<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
521<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>452<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
522<td align="center"><br></td>453<td align="center"><br /></td>
454<td>(disappeared?)</td>
455</tr>
456
457<tr class="disappeared">
458<td><a target="other" rel="nofollow" href="http://www.geocities.com/CapeCanaveral/Hall/2334/resume.html">Alexander Shvets</a></td>
459<td><a target="other" rel="nofollow" href="http://www.geocities.com/CapeCanaveral/Hall/2334/Programs/cafebabe.html">CafeBabe</a></td>
460<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
461<td align="center"><br /></td>
462<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
463<td align="center"><br /></td>
464<td>(disappeared?)</td>
465</tr>
466
467<tr class="disappeared">
468<td><a target="other" rel="nofollow" href="http://darcs.brianweb.net/">Brian Alliet</a></td>
469<td><a target="other" rel="nofollow" href="http://darcs.brianweb.net/gcclass/">Gcclass</a></td>
470<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
471<td align="center"><br /></td>
472<td align="center"><br /></td>
473<td align="center"><br /></td>
474<td>(disappeared?)</td>
475</tr>
476
477<tr class="disappeared">
478<td><a target="other" rel="nofollow" href="http://www.cs.purdue.edu/homes/grothoff/">Christian Grothoff</a></td>
479<td><a target="other" rel="nofollow" href="http://www.ovmj.org/jamit/">Jamit</a></td>
480<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
481<td align="center"><br /></td>
482<td align="center"><br /></td>
483<td align="center"><br /></td>
484<td>(disappeared?)</td>
485</tr>
486
487<tr class="disappeared">
488<td><a target="other" rel="nofollow" href="http://donquixote.cafebabe.jp/">Haruaki Tamada</a></td>
489<td><a target="other" rel="nofollow" href="http://donquixote.cafebabe.jp/">DonQuixote</a></td>
490<td align="center"><br /></td>
491<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
492<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
493<td align="center"><br /></td>
494<td>(disappeared?)</td>
495</tr>
496
497<tr class="disappeared">
498<td><a target="other" rel="nofollow" href="http://www.utdallas.edu/~gxz014000/">Bajie</a></td>
499<td><a target="other" rel="nofollow" href="http://www.utdallas.edu/~gxz014000/jcmp/">JCMP</a></td>
500<td align="center"><br /></td>
501<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
502<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
503<td align="center"><br /></td>
504<td>(disappeared?)</td>
505</tr>
506
507<tr class="disappeared">
508<td><a target="other" rel="nofollow" href="http://www.elegant-software.com/">Elegant Software</a></td>
509<td><a target="other" rel="nofollow" href="http://www.elegant-software.com/software/jmangle/">JMangle</a></td>
510<td align="center"><br /></td>
511<td align="center"><br /></td>
512<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
513<td align="center"><br /></td>
523<td>(disappeared?)</td>514<td>(disappeared?)</td>
524</tr>515</tr>
525516
526<tr class="disappeared">517<tr class="disappeared">
527<td><a target="other" rel="nofollow" href="http://www.primenet.com/~ej">Eron Jokipii</a></td>518<td><a target="other" rel="nofollow" href="http://www.primenet.com/~ej">Eron Jokipii</a></td>
528<td><a target="other" rel="nofollow" href="http://www.primenet.com/~ej">Jobe</a></td>519<td><a target="other" rel="nofollow" href="http://www.primenet.com/~ej">Jobe</a></td>
529<td align="center"><br></td>520<td align="center"><br /></td>
530<td align="center"><br></td>521<td align="center"><br /></td>
531<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>522<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
532<td align="center"><br></td>523<td align="center"><br /></td>
533<td>(disappeared?)</td>524<td>(disappeared?)</td>
534</tr>525</tr>
535526
536<tr class="disappeared">527<tr class="disappeared">
537<td><a target="other" rel="nofollow" href="http://jrc.krdl.org.sg/">JRC</a></td>528<td><a target="other" rel="nofollow" href="http://jrc.krdl.org.sg/">JRC</a></td>
538<td><a target="other" rel="nofollow" href="http://jrc.krdl.org.sg/decaf/">DeCaf</a></td>529<td><a target="other" rel="nofollow" href="http://jrc.krdl.org.sg/decaf/">DeCaf</a></td>
539<td align="center"><br></td>530<td align="center"><br /></td>
540<td align="center"><br></td>531<td align="center"><br /></td>
541<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>532<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
542<td align="center"><br></td>533<td align="center"><br /></td>
543<td>(disappeared?)</td>534<td>(disappeared?)</td>
544</tr>535</tr>
545536
546<tr class="disappeared">537<tr class="disappeared">
547<td><a target="other" rel="nofollow" href="http://www.utdallas.edu/~gxz014000/">Bajie</a></td>538<td><a target="other" rel="nofollow" href="http://www.drjava.de/">Dr. Java</a></td>
548<td><a target="other" rel="nofollow" href="http://www.utdallas.edu/~gxz014000/jcmp/">JCMP</a></td>539<td><a target="other" rel="nofollow" href="http://www.drjava.de/obfuscator/">Marvin Obfuscator</a></td>
549<td align="center"><br></td>540<td align="center"><br /></td>
550<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>541<td align="center"><br /></td>
551<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>542<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
552<td align="center"><br></td>543<td align="center"><br /></td>
553<td>(disappeared?)</td>544<td>(disappeared?)</td>
545</tr>
546
547<tr class="disappeared">
548<td><a target="other" rel="nofollow" href="http://www.ibm.com/">IBM</a></td>
549<td><a target="other" rel="nofollow" href="http://www-306.ibm.com/software/wireless/wsdd/">WSDD</a></td>
550<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
551<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
552<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
553<td align="center"><br /></td>
554<td>Commercial (discontinued?)</td>
555</tr>
556
557<tr class="disappeared">
558<td><a target="other" rel="nofollow" href="http://www.s5systems.com/">S5 Systems</a></td>
559<td><a target="other" rel="nofollow" href="http://www.s5systems.com/jPresto.htm">jPresto</a></td>
560<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
561<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
562<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
563<td align="center"><br /></td>
564<td>Commercial (discontinued?)</td>
554</tr>565</tr>
555566
556<tr class="disappeared">567<tr class="disappeared">
557<td><a target="other" rel="nofollow" href="http://www.plumbdesign.com/">Plumb Design</a></td>568<td><a target="other" rel="nofollow" href="http://www.plumbdesign.com/">Plumb Design</a></td>
558<td><a target="other" rel="nofollow" href="http://www.condensity.com/">Condensity</a></td>569<td><a target="other" rel="nofollow" href="http://www.condensity.com/">Condensity</a></td>
559<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>570<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
560<td align="center"><br></td>571<td align="center"><br /></td>
561<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>572<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
562<td align="center"><br></td>573<td align="center"><br /></td>
563<td>Commercial (discontinued)</td>574<td>Commercial (discontinued)</td>
564</tr>575</tr>
565576
566<tr class="disappeared">577<tr class="disappeared">
567<td><a target="other" rel="nofollow" href="http://www.4thpass.com/">4th Pass</a></td>578<td><a target="other" rel="nofollow" href="http://www.4thpass.com/">4th Pass</a></td>
568<td><a target="other" rel="nofollow" href="http://www.4thpass.com/">SourceGuard</a></td>579<td><a target="other" rel="nofollow" href="http://www.4thpass.com/">SourceGuard</a></td>
569<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>580<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
570<td align="center"><br></td>581<td align="center"><br /></td>
571<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>582<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
572<td align="center"><br></td>583<td align="center"><br /></td>
584<td>Commercial (discontinued?)</td>
585</tr>
586
587<tr class="disappeared">
588<td><a target="other" rel="nofollow" href="http://www.codingart.com/">CodingArt</a></td>
589<td><a target="other" rel="nofollow" href="http://www.codingart.com/codeshield.html">CodeShield</a></td>
590<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
591<td align="center"><br /></td>
592<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
593<td align="center"><br /></td>
573<td>Commercial (discontinued?)</td>594<td>Commercial (discontinued?)</td>
574</tr>595</tr>
575596
576<tr class="disappeared">597<tr class="disappeared">
577<td><a target="other" rel="nofollow" href="http://www.software4j.com/">Software4j</a></td>598<td><a target="other" rel="nofollow" href="http://www.software4j.com/">Software4j</a></td>
578<td><a target="other" rel="nofollow" href="http://www.software4j.com/obfuscate4j/">Obfuscate4j</a></td>599<td><a target="other" rel="nofollow" href="http://www.software4j.com/obfuscate4j/">Obfuscate4j</a></td>
579<td align="center"><br></td>600<td align="center"><br /></td>
580<td align="center"><br></td>601<td align="center"><br /></td>
581<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>602<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
582<td align="center"><br></td>603<td align="center"><br /></td>
583<td>Commercial (discontinued?)</td>604<td>Commercial (discontinued?)</td>
584</tr>605</tr>
585606
586<tr class="disappeared">607<tr class="disappeared">
587<td><a target="other" rel="nofollow" href="http://www.jammconsulting.com/">JAMM Consulting</a></td>608<td><a target="other" rel="nofollow" href="http://www.jammconsulting.com/">JAMM Consulting</a></td>
588<td><a target="other" rel="nofollow" href="http://www.jammconsulting.com/jamm/servlet/com.jammconsulting.servlet.JAMMServlet?pageId=ObfuscateProPage">ObfuscatePro</a></td>609<td><a target="other" rel="nofollow" href="http://www.jammconsulting.com/jamm/servlet/com.jammconsulting.servlet.JAMMServlet?pageId=ObfuscateProPage">ObfuscatePro</a></td>
589<td align="center"><br></td>610<td align="center"><br /></td>
590<td align="center"><br></td>611<td align="center"><br /></td>
591<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>612<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
592<td align="center"><br></td>613<td align="center"><br /></td>
593<td>Commercial (discontinued?)</td>614<td>Commercial (discontinued?)</td>
594</tr>615</tr>
595616
596<tr class="disappeared">617<tr class="disappeared">
597<td><a target="other" rel="nofollow" href="http://www.jdevelop.com/">JDevelop</a></td>618<td><a target="other" rel="nofollow" href="http://www.jdevelop.com/">JDevelop</a></td>
598<td><a target="other" rel="nofollow" href="http://www.jdevelop.com/best-java-obfuscator.html">JSCO</a></td>619<td><a target="other" rel="nofollow" href="http://www.jdevelop.com/best-java-obfuscator.html">JSCO</a></td>
599<td align="center"><br></td>620<td align="center"><br /></td>
600<td align="center"><br></td>621<td align="center"><br /></td>
601<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>622<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
602<td align="center"><br></td>623<td align="center"><br /></td>
603<td>Commercial (discontinued?)</td>624<td>Commercial (discontinued?)</td>
604</tr>625</tr>
605626
606<tr class="disappeared">627<tr class="disappeared">
607<td><a target="other" rel="nofollow" href="http://www.4fang.net/">4Fang</a></td>628<td><a target="other" rel="nofollow" href="http://www.4fang.net/">4Fang</a></td>
608<td><a target="other" rel="nofollow" href="http://www.4fang.net/jmix/">JMix</a></td>629<td><a target="other" rel="nofollow" href="http://www.4fang.net/jmix/">JMix</a></td>
609<td align="center"><br></td>630<td align="center"><br /></td>
610<td align="center"><br></td>631<td align="center"><br /></td>
611<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>632<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
612<td align="center"><br></td>633<td align="center"><br /></td>
613<td>Commercial (discontinued?)</td>634<td>Commercial (discontinued?)</td>
614</tr>635</tr>
615636
616<tr class="disappeared">637<tr class="disappeared">
638<td><a target="other" rel="nofollow" href="http://www.retrologic.com/">RetroLogic</a></td>
639<td><a target="other" rel="nofollow" href="http://www.retrologic.com/">RetroGuard</a></td>
640<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
641<td align="center"><br /></td>
642<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
643<td align="center"><br /></td>
644<td>Commercial (disappeared?)</td>
645</tr>
646
647<tr class="disappeared">
648<td><a target="other" rel="nofollow" href="http://www.helseth.com/">Helseth</a></td>
649<td><a target="other" rel="nofollow" href="http://www.helseth.com/HJO.htm">JObfuscator</a></td>
650<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
651<td align="center"><br /></td>
652<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
653<td align="center"><br /></td>
654<td>Commercial (disappeared?)</td>
655</tr>
656
657<tr class="disappeared">
658<td><a target="other" rel="nofollow" href="http://www.vegatech.com/">Vega Technologies</a></td>
659<td><a target="other" rel="nofollow" href="http://www.vegatech.com/jzipper/">JZipper</a></td>
660<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
661<td align="center"><br /></td>
662<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
663<td align="center"><br /></td>
664<td>Commercial (disappeared?)</td>
665</tr>
666
667<tr class="disappeared">
668<td><a target="other" rel="nofollow" href="http://www.jproof.com/">JProof</a></td>
669<td><a target="other" rel="nofollow" href="http://www.jproof.com/">JProof</a></td>
670<td align="center"><br /></td>
671<td align="center"><br /></td>
672<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
673<td align="center"><br /></td>
674<td>Commercial (disappeared?)</td>
675</tr>
676
677<tr class="disappeared">
678<td><a target="other" rel="nofollow" href="http://www.chainkey.com/">ChainKey</a></td>
679<td><a target="other" rel="nofollow" href="http://www.chainkey.com/en/jcp/">Java Code Protector</a></td>
680<td align="center"><br /></td>
681<td align="center"><br /></td>
682<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
683<td align="center"><br /></td>
684<td>Commercial (disappeared?)</td>
685</tr>
686
687<tr class="disappeared">
617<td><a target="other" rel="nofollow" href="http://www.2lkit.com/">2LKit</a></td>688<td><a target="other" rel="nofollow" href="http://www.2lkit.com/">2LKit</a></td>
618<td><a target="other" rel="nofollow" href="http://www.2lkit.com/products/2LKitObf/index.htm">2LKit Obfuscator</a></td>689<td><a target="other" rel="nofollow" href="http://www.2lkit.com/products/2LKitObf/index.htm">2LKit Obfuscator</a></td>
619<td align="center"><br></td>690<td align="center"><br /></td>
620<td align="center"><br></td>691<td align="center"><br /></td>
621<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>692<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
622<td align="center"><br></td>693<td align="center"><br /></td>
623<td>Commercial (disappeared?)</td>694<td>Commercial (disappeared?)</td>
624</tr>695</tr>
625696
626<tr class="disappeared">697<tr class="disappeared">
627<td><a target="other" rel="nofollow" href="http://www.wingsoft.com/">WingSoft</a></td>698<td><a target="other" rel="nofollow" href="http://www.wingsoft.com/">WingSoft</a></td>
628<td><a target="other" rel="nofollow" href="http://www.wingsoft.com/wingguard.html">WingGuard</a></td>699<td><a target="other" rel="nofollow" href="http://www.wingsoft.com/wingguard.html">WingGuard</a></td>
629<td align="center"><br></td>700<td align="center"><br /></td>
630<td align="center"><br></td>701<td align="center"><br /></td>
631<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>702<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
632<td align="center"><br></td>703<td align="center"><br /></td>
633<td>Commercial (disappeared?)</td>704<td>Commercial (disappeared?)</td>
634</tr>705</tr>
635706
636<tr class="disappeared">707<tr class="disappeared">
637<td><a target="other" rel="nofollow" href="http://www.sbktech.org/">HashJava</a></td>708<td><a target="other" rel="nofollow" href="http://www.sbktech.org/">HashJava</a></td>
638<td><a target="other" rel="nofollow" href="http://www.sbktech.org/">HashJava</a></td>709<td><a target="other" rel="nofollow" href="http://www.sbktech.org/">HashJava</a></td>
639<td align="center"><br></td>710<td align="center"><br /></td>
640<td align="center"><br></td>711<td align="center"><br /></td>
641<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>712<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
642<td align="center"><br></td>713<td align="center"><br /></td>
714<td>Commercial (disappeared?)</td>
715</tr>
716
717<tr class="disappeared">
718<td><a target="other" rel="nofollow" href="http://www.solutia.ro/">GITS</a></td>
719<td><a target="other" rel="nofollow" href="http://www.solutia.ro/pages/javadc/">Blurfuscator</a></td>
720<td align="center"><br /></td>
721<td align="center"><br /></td>
722<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
723<td align="center"><br /></td>
643<td>Commercial (disappeared?)</td>724<td>Commercial (disappeared?)</td>
644</tr>725</tr>
645726
@@ -647,10 +728,11 @@
647<p>728<p>
648All trademarks are property of their respective holders.729All trademarks are property of their respective holders.
649730
650<hr>731<hr />
732<noscript><div><a target="_top" href="index.html" class="button">Show menu</a></div></noscript>
651<address>733<address>
652Copyright &copy; 2002-2009734Copyright &copy; 2002-2012
653<a href="http://www.graphics.cornell.edu/~eric/">Eric Lafortune</a>.735<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>.
654</address>736</address>
655737
656</body>738</body>
657739
=== modified file 'docs/downloads.html'
--- docs/downloads.html 2009-10-09 16:17:49 +0000
+++ docs/downloads.html 2012-07-12 00:24:28 +0000
@@ -1,11 +1,22 @@
11
2<!doctype html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">2<!doctype html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
3<html>3<html>
4<head>4<head>
5<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">5<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
6<meta http-equiv="content-style-type" content="text/css">6<meta http-equiv="content-style-type" content="text/css">
7<link rel="stylesheet" type="text/css" href="style.css">7<link rel="stylesheet" type="text/css" href="style.css">
8<title>ProGuard Downloads</title>8<title>ProGuard Downloads</title>
9<script type="text/javascript" language="JavaScript">
10<!--
11if (window.self==window.top)
12 window.top.location.replace("index.html#"+window.location.pathname+window.location.hash);
13else {
14 var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), "");
15 if (window.top.location.hash!=hash)
16 window.top.location.hash=hash;
17}
18//-->
19</script>
9</head>20</head>
10<body>21<body>
1122
@@ -44,6 +55,123 @@
44collected since the previous release.55collected since the previous release.
45<p>56<p>
4657
58<h3><div>May 2012</div> Version 4.8</h3>
59<ul>
60<li>Added more peephole optimizations for strings.
61<li>Added support for multiple external configuration files in Ant
62 configurations.
63<li>Added support for Ant properties in external configuration files.
64<li>Fixed parsing of empty file filters on input and output.
65<li>Fixed parsing of '*' wildcard for file filters and name filters.
66<li>Fixed obfuscation of private methods that are overridden in concrete
67 classes with intermediary abstract classes and interfaces (workaround
68 for Oracle bugs #6691741 and #6684387).
69<li>Fixed optimization of complex finally blocks, compiled with JDK 1.4 or
70 earlier.
71<li>Fixed optimizing signatures of methods that are marked as not having
72 side effects.
73<li>Fixed optimization of long local variables possibly causing verification
74 error for register pairs.
75<li>Fixed merging of classes defined inside methods.
76<li>Fixed stack consistency in optimization step.
77<li>No longer removing debug information about unused parameters, for
78 <code>-keepparameternames</code> or <code>-keepattributes</code>.
79<li>Fixed updating manifest files with carriage return characters.
80<li>Now removing unreachable code in preverification step.
81<li>Improved default regular expression for stack traces in ReTrace.
82<li>Updated documentation and examples.
83</ul>
84
85<h3><div>Dec 2011</div> Version 4.7</h3>
86<ul>
87<li>Added support for Java 7.
88<li>Parsing unquoted file names with special characters more leniently.
89<li>Added support for instance methods overriding class methods.
90<li>Added removal of unused parameterless constructors.
91<li>Added removal of empty class initializers.
92<li>Added peephole optimizations for constant strings.
93<li>Avoiding idle optimization passes.
94<li>Improved removal of unused constants after obfuscation.
95<li>Fixed removal of unused classes referenced by annotations.
96<li>Fixed simplifying parameters of constructors that should actually be
97 preserved.
98<li>Fixed simplifying parameters of large numbers of similar constructors.
99<li>Fixed exceptions in optimization of unusual obfuscated code.
100<li>Fixed NullPointerException when specifying <code>-keepclassmembers</code>
101 without specific class or class members.
102<li>Fixed potential problems with mixed-case class name dictionaries when not
103 allowing mixed-case class names.
104<li>Fixed obfuscation of classes with EnclosingMethod attributes that don't
105 specify methods.
106<li>Fixed preverification of returning try blocks with finally blocks, inside
107 try blocks, when compiled with JDK 1.4.
108<li>Fixed sorting of interfaces containing generics.
109<li>Fixed paths in shell scripts.
110<li>Fixed filling in of text fields showing class obfuscation dictionary and
111 package obfuscation dictionary from configuration in GUI.
112<li>Worked around Oracle Java 6/7 bug #7027598 that locked the GUI on Linux.
113<li>Updated documentation and examples.
114</ul>
115
116<h3><div>Feb 2011</div> Version 4.6</h3>
117<ul>
118<li>Added support for synthetic, bridge, and varargs modifiers in configuration.
119<li>Added detection of atomic updater construction with constant arguments.
120<li>Fixed merging of package visible classes.
121<li>Fixed optimization of fields that are only accessed by reflection.
122<li>Fixed optimization of read-only or write-only fields that are volatile.
123<li>Fixed handling of side-effects due to static initializers.
124<li>Fixed handling of bridge flags in obfuscation step.
125<li>Fixed handling of super flag when merging classes.
126<li>Fixed updating of variable tables when optimizing variables.
127<li>Fixed removal of unused parameters with 32 or more parameters.
128<li>Fixed incorrect removal of exception handler for instanceof instruction.
129<li>Fixed inlining of methods with unusual exception handlers.
130<li>Fixed optimization of unusual code causing stack underflow.
131<li>Fixed keeping of constructor parameter names.
132<li>Fixed unwanted wrapping of non-standard META-INF files.
133<li>Fixed filtering of warnings about references to array types.
134<li>Fixed overriding of warning option and note option in Ant task.
135<li>Improved detection of file name extensions for canonical paths.
136<li>Improved printing of seeds specified by <code>-keep</code> options.
137<li>Improved printing of notes about unkept classes.
138<li>Improved checking whether output is up to date.
139<li>Updated documentation and examples.
140</ul>
141
142<h3><div>Jun 2010</div> Version 4.5</h3>
143<ul>
144<li>Added option <code>-keepparameternames</code>.
145<li><code>-dontskipnonpubliclibraryclasses</code> is now set by default. Added
146 <code>-skipnonpubliclibraryclasses</code> as an option.
147<li>Made processing independent of order of input classes to get even more
148 deterministic output.
149<li>Improved constant field propagation.
150<li>Improved renaming of resource files in subdirectories of packages.
151<li>Avoiding making fields in interfaces private.
152<li>Optimizing exception handlers for monitorexit instruction.
153<li>Reduced maximum allowed code length after inlining from 8000 bytes to
154 7000 bytes.
155<li>Fixed missing warnings about missing library classes.
156<li>Fixed shrinking of annotations with arrays of length 0.
157<li>Fixed handling of -0.0 and NaN values when simplifying expressions.
158<li>Fixed copying of exception handlers when simplifying tail recursion calls.
159<li>Fixed optimization of introspected fields.
160<li>Fixed simplification of unnecessary variable initializations.
161<li>Fixed evaluation of subroutines in pre-JDK 1.5 code.
162<li>Fixed updating of access flags in inner classes information.
163<li>Fixed disabling of field privatization.
164<li>Fixed invocations of privatized methods.
165<li>Fixed updating of local variable debug information in optimization step.
166<li>Fixed print settings without file name in GUI.
167<li>Fixed field privatization setting in GUI.
168<li>Fixed saving incorrectly quoted arguments in GUI.
169<li>Fixed handling of regular expressions with only negators.
170<li>Fixed unwanted wrapping of non-standard META-INF files.
171<li>Fixed regular expression pattern for constructors in ReTrace.
172<li>Updated documentation and examples.
173</ul>
174
47<h3><div>Jul 2009</div> Version 4.4</h3>175<h3><div>Jul 2009</div> Version 4.4</h3>
48<ul>176<ul>
49<li>Added new peephole optimizations.177<li>Added new peephole optimizations.
@@ -511,10 +639,11 @@
511 <b>RetroGuard</b>.639 <b>RetroGuard</b>.
512</ul>640</ul>
513641
514<hr>642<hr />
643<noscript><div><a target="_top" href="index.html" class="button">Show menu</a></div></noscript>
515<address>644<address>
516Copyright &copy; 2002-2009645Copyright &copy; 2002-2012
517<a href="http://www.graphics.cornell.edu/~eric/">Eric Lafortune</a>.646<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>.
518</address>647</address>
519648
520</body>649</body>
521650
=== modified file 'docs/feedback.html'
--- docs/feedback.html 2009-10-09 16:17:49 +0000
+++ docs/feedback.html 2012-07-12 00:24:28 +0000
@@ -1,4 +1,4 @@
1<!doctype html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">1<!doctype html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2<html>2<html>
3<head>3<head>
4<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">4<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
@@ -6,6 +6,17 @@
6<meta http-equiv="content-style-type" content="text/css">6<meta http-equiv="content-style-type" content="text/css">
7<link rel="stylesheet" type="text/css" href="style.css">7<link rel="stylesheet" type="text/css" href="style.css">
8<title>ProGuard Feedback</title>8<title>ProGuard Feedback</title>
9<script type="text/javascript" language="JavaScript">
10<!--
11if (window.self==window.top)
12 window.top.location.replace("index.html#"+window.location.pathname+window.location.hash);
13else {
14 var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), "");
15 if (window.top.location.hash!=hash)
16 window.top.location.hash=hash;
17}
18//-->
19</script>
9</head>20</head>
10<body>21<body>
1122
@@ -13,28 +24,32 @@
1324
14By now, I've invested a fair amount of time in <b>ProGuard</b>. You can help25By now, I've invested a fair amount of time in <b>ProGuard</b>. You can help
15by providing feedback! If you have problems, bugs, bug fixes, ideas,26by providing feedback! If you have problems, bugs, bug fixes, ideas,
16encouragements, etc., please let me know:27encouragements, etc., please get in touch:
17<p>28<p>
18<ul>29<ul class="spacious">
19<li>The <a href="http://sourceforge.net/forum/forum.php?forum_id=182456"30<li>Through
31 <a href="http://www.saikoa.com/proguard/support" target="_top">Saikoa</a>,
32 we provide professional support for ProGuard. If you find ProGuard useful
33 and you would like to have some professional backing, this is the place to
34 go.</li>
35
36<li>The <a href="https://sourceforge.net/projects/proguard/forums/forum/182456"
20 target="other">help forum</a> (at SourceForge) is the right place to ask37 target="other">help forum</a> (at SourceForge) is the right place to ask
21 questions about any problems you might have configuring and running38 questions about any problems you might have configuring and running
22 <b>ProGuard</b>.39 ProGuard. At this time, I can generally only assist other open source
23 <p>40 projects though. If you're working on commercial software, please consider
41 our professional support above.</li>
2442
25<li>The <a href="http://sourceforge.net/forum/forum.php?forum_id=182455"43<li>The <a href="https://sourceforge.net/projects/proguard/forums/forum/182455"
26 target="other">open discussion forum</a> (at SourceForge) offers a place44 target="other">open discussion forum</a> (at SourceForge) offers a place
27 to share your thoughts and discuss new ideas.45 to share your thoughts and discuss new ideas.</li>
28 <p>
2946
30<li>The <a47<li>The <a
31
32 href="http://sourceforge.net/tracker/?atid=474704&group_id=54750&func=browse"48 href="http://sourceforge.net/tracker/?atid=474704&group_id=54750&func=browse"
33 target="other">bug tracking page</a> (at SourceForge) allows you to submit49 target="other">bug tracking page</a> (at SourceForge) allows you to submit
34 and consult bug reports. Please make sure the reports are complete and50 and consult bug reports. Please make sure the reports are complete and
35 concise. If I can't reproduce the problem, I most likely can't fix it51 concise. If I can't reproduce the problem, I most likely can't fix it
36 either.52 either.</li>
37 <p>
3853
39<li>The <a54<li>The <a
4055
@@ -42,16 +57,14 @@
42 target="other">feature request page</a> (at SourceForge) allows you to57 target="other">feature request page</a> (at SourceForge) allows you to
43 submit and consult feature requests. I generally have my own road map in58 submit and consult feature requests. I generally have my own road map in
44 mind, but this is the place express your interest in new and existing59 mind, but this is the place express your interest in new and existing
45 ideas.60 ideas.</li>
46 <p>
4761
48<li>The <a href="http://sourceforge.net/project/showfiles.php?group_id=54750"62<li>The <a href="https://sourceforge.net/projects/proguard/files/"
49 target="other">download section</a> at SourceForge and the <a63 target="other">download section</a> at SourceForge and the <a
50 href="http://software.freshmeat.net/projects/proguard/"64 href="http://software.freecode.com/projects/proguard"
51 target="other">project page</a> at FreshMeat offer the possibility to65 target="other">project page</a> at Freecode (Freshmeat) offer the
52 subscribe to the announcements of new releases. They are the most66 possibility to subscribe to the announcements of new releases. They are
53 efficient way to stay abreast of the latest developments.67 the most efficient way to stay abreast of the latest developments.</li>
54 <p>
5568
56<li>For anything that doesn't fall in the above categories, you can mail me69<li>For anything that doesn't fall in the above categories, you can mail me
57 directly at70 directly at
@@ -84,7 +97,7 @@
84<em>or</em> at97<em>or</em> at
85&lt;&nbsp;eric&nbsp;&#64;&nbsp;graphics&nbsp;.&nbsp;cornell&nbsp;.&nbsp;edu&nbsp;&gt; (please remove the spaces)98&lt;&nbsp;eric&nbsp;&#64;&nbsp;graphics&nbsp;.&nbsp;cornell&nbsp;.&nbsp;edu&nbsp;&gt; (please remove the spaces)
86</noscript>99</noscript>
87.100.</li>
88</ul>101</ul>
89<p>102<p>
90I can't promise a swift answer, or any answer at all, for that matter, but I103I can't promise a swift answer, or any answer at all, for that matter, but I
@@ -96,10 +109,11 @@
96do things my way, without the overhead and compromises associated with larger109do things my way, without the overhead and compromises associated with larger
97projects.110projects.
98111
99<hr>112<hr />
113<noscript><div><a target="_top" href="index.html" class="button">Show menu</a></div></noscript>
100<address>114<address>
101Copyright &copy; 2002-2009115Copyright &copy; 2002-2012
102<a href="http://www.graphics.cornell.edu/~eric/">Eric Lafortune</a>.116<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>.
103</address>117</address>
104118
105</body>119</body>
106120
=== modified file 'docs/index.html'
--- docs/index.html 2009-10-09 16:17:49 +0000
+++ docs/index.html 2012-07-12 00:24:28 +0000
@@ -1,4 +1,4 @@
1<!doctype html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">1<!doctype html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2<html>2<html>
3<head>3<head>
4<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">4<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
@@ -11,18 +11,34 @@
11<link rel="shortcut icon" type="image/x-icon" href="favicon.ico">11<link rel="shortcut icon" type="image/x-icon" href="favicon.ico">
12<title>ProGuard</title>12<title>ProGuard</title>
13</head>13</head>
14
15<script type="text/javascript" language="JavaScript">
16<!--
17var main="main.html";
18if (window.location.hash.length > 1)
19 main=window.location.hash.substr(1);
20var sections="sections.html";
21if (main.search(/manual\//) >= 0)
22 sections="manual/sections.html";
23
24document.write("<frameset rows=\"50,*\" framespacing=\"0\" frameborder=\"no\"><frame id=\"title\" name=\"title\" src=\"title.html\" scrolling=\"no\" marginwidth=\"0\" marginheight=\"0\" noresize /><frameset cols=\"120,*\" framespacing=\"0\" frameborder=\"no\"><frame id=\"sections\" name=\"sections\" src=\""+sections+"\" scrolling=\"no\" marginwidth=\"0\" marginheight=\"0\" noresize /><frame id=\"main\" name=\"main\" src=\""+main+"\" scrolling=\"auto\" marginwidth=\"10\" marginheight=\"10\" noresize /></frameset></frameset>");
25//-->
26</script>
27
28<noscript>
14<frameset29<frameset
15 rows="50,*"30 rows="50,*"
16 framespacing="0"31 framespacing="0"
17 frameborder="no">32 frameborder="no">
1833
19<frame34<frame
35 id="title"
20 name="title"36 name="title"
21 src="title.html"37 src="title.html"
22 scrolling="no"38 scrolling="no"
23 marginwidth="0"39 marginwidth="0"
24 marginheight="0"40 marginheight="0"
25 noresize>41 noresize />
2642
27<frameset43<frameset
28 cols="120,*"44 cols="120,*"
@@ -30,42 +46,46 @@
30 frameborder="no">46 frameborder="no">
3147
32<frame48<frame
49 id="sections"
33 name="sections"50 name="sections"
34 src="sections.html"51 src="sections.html"
35 scrolling="no"52 scrolling="no"
36 marginwidth="0"53 marginwidth="0"
37 marginheight="0"54 marginheight="0"
38 noresize>55 noresize />
3956
40<frame57<frame
58 id="main"
41 name="main"59 name="main"
42 src="main.html"60 src="main.html"
43 scrolling="auto"61 scrolling="auto"
44 marginwidth="10"62 marginwidth="10"
45 marginheight="10"63 marginheight="10"
46 noresize>64 noresize />
4765
48</frameset>66</frameset>
49</frameset>67</frameset>
68</noscript>
5069
51<noframes>70<noframes>
52<body>71<body>
53<p class="intro">72<p class="intro">
54<b>ProGuard</b> is a free Java class file shrinker, optimizer, and obfuscator.73<b>ProGuard</b> is a free Java class file shrinker, optimizer, obfuscator, and
55It can detect and remove unused classes, fields, methods, and attributes. It74preverifier. It detects and removes unused classes, fields, methods, and
56can then optimize bytecode and remove unused instructions. Finally, it can75attributes. It optimizes bytecode and removes unused instructions. It renames
57rename the remaining classes, fields, and methods using short meaningless76the remaining classes, fields, and methods using short meaningless names.
58names. The resulting jars are smaller and harder to reverse-engineer.77Finally, it preverifies the processed code for Java 6 or for Java Micro
78Edition.
59</p>79</p>
60<p>80<p>
61Your browser doesn't support frames, but that's cool.81Your browser doesn't support frames, but that's cool.
62<p>82<p>
63You can go straight to the <a href="main.html">main page</a>.83You can go straight to the <a href="main.html">main page</a>.
6484
65<hr>85<hr />
66<address>86<address>
67Copyright &copy; 2002-200987Copyright &copy; 2002-2012
68<a href="http://www.graphics.cornell.edu/~eric/">Eric Lafortune</a>.88<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>.
69</address>89</address>
70</body>90</body>
71</noframes>91</noframes>
7292
=== modified file 'docs/license.html'
--- docs/license.html 2009-10-09 16:17:49 +0000
+++ docs/license.html 2012-07-12 00:24:28 +0000
@@ -1,10 +1,21 @@
1<!doctype html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">1<!doctype html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2<html>2<html>
3<head>3<head>
4<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">4<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
5<meta http-equiv="content-style-type" content="text/css">5<meta http-equiv="content-style-type" content="text/css">
6<link rel="stylesheet" type="text/css" href="style.css">6<link rel="stylesheet" type="text/css" href="style.css">
7<title>ProGuard License</title>7<title>ProGuard License</title>
8<script type="text/javascript" language="JavaScript">
9<!--
10if (window.self==window.top)
11 window.top.location.replace("index.html#"+window.location.pathname+window.location.hash);
12else {
13 var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), "");
14 if (window.top.location.hash!=hash)
15 window.top.location.hash=hash;
16}
17//-->
18</script>
8</head>19</head>
9<body>20<body>
1021
@@ -29,19 +40,21 @@
29exception</a> to the latter clause (in wording suggested by40exception</a> to the latter clause (in wording suggested by
30the <a href="http://www.gnu.org/copyleft/gpl-faq.html#GPLIncompatibleLibs"41the <a href="http://www.gnu.org/copyleft/gpl-faq.html#GPLIncompatibleLibs"
31target="other">FSF</a>), for combinations with the following stand-alone42target="other">FSF</a>), for combinations with the following stand-alone
32applications: Apache Ant, Apache Maven, the Eclipse ProGuardDT GUI, the43applications: Apache Ant, Apache Maven, the Google Android SDK, the Eclipse
33EclipseME JME IDE, the Sun NetBeans Java IDE, the Sun JME Wireless Toolkit,44ProGuardDT GUI, the EclipseME JME IDE, the Oracle NetBeans Java IDE, the Oracle
34and the Javaground Tools.45JME Wireless Toolkit, the Simple Build Tool for Scala, the NeoMAD Tools by
46Neomades, the Javaground Tools, and the Sanaware Tools.
3547
36<p>48<p>
37The <b>ProGuard user documentation</b> represents an important part of this49The <b>ProGuard user documentation</b> represents an important part of this
38work. It may only be redistributed without changes, along with the unmodified50work. It may only be redistributed without changes, along with the unmodified
39version of the code.51version of the code.
4052
41<hr>53<hr />
54<noscript><div><a target="_top" href="index.html" class="button">Show menu</a></div></noscript>
42<address>55<address>
43Copyright &copy; 2002-200956Copyright &copy; 2002-2012
44<a href="http://www.graphics.cornell.edu/~eric/">Eric Lafortune</a>.57<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>.
45</address>58</address>
46</body>59</body>
47</html>60</html>
4861
=== removed file 'docs/luciadlogo.png'
49Binary files docs/luciadlogo.png 2005-06-17 14:25:24 +0000 and docs/luciadlogo.png 1970-01-01 00:00:00 +0000 differ62Binary files docs/luciadlogo.png 2005-06-17 14:25:24 +0000 and docs/luciadlogo.png 1970-01-01 00:00:00 +0000 differ
=== modified file 'docs/main.html'
--- docs/main.html 2009-10-09 16:17:49 +0000
+++ docs/main.html 2012-07-12 00:24:28 +0000
@@ -1,4 +1,4 @@
1<!doctype html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">1<!doctype html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2<html>2<html>
3<head>3<head>
4<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">4<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
@@ -8,6 +8,16 @@
8<meta name="keywords" content="java obfuscator, optimizer, shrinker, preverfier">8<meta name="keywords" content="java obfuscator, optimizer, shrinker, preverfier">
9<link rel="stylesheet" type="text/css" href="style.css">9<link rel="stylesheet" type="text/css" href="style.css">
10<title>ProGuard Main</title>10<title>ProGuard Main</title>
11<script type="text/javascript" language="JavaScript">
12<!--
13if (window.self==window.top)
14 window.top.location.replace("index.html#"+window.location.pathname+window.location.hash);
15else {
16 if (window.top.location.hash!="")
17 window.top.location.hash="";
18}
19//-->
20</script>
11</head>21</head>
12<body>22<body>
1323
@@ -25,25 +35,21 @@
25<ul>35<ul>
2636
27<li>Creating more compact code, for smaller code archives, faster transfer37<li>Creating more compact code, for smaller code archives, faster transfer
28 across networks, faster loading, and smaller memory footprints.38 across networks, faster loading, and smaller memory footprints.</li>
2939
30<li>Making programs and libraries harder to reverse-engineer.40<li>Making programs and libraries harder to reverse-engineer.</li>
3141
32<li>Listing dead code, so it can be removed from the source code.42<li>Listing dead code, so it can be removed from the source code.</li>
3343
34<li>Retargeting and preverifying existing class files for Java 6, to take full44<li>Retargeting and preverifying existing class files for Java 6, to take full
35 advantage of Java 6's faster class loading.45 advantage of Java 6's faster class loading.</li>
3646
37</ul>47</ul>
38<p>48<p>
39<b>ProGuard</b>'s main advantage compared to other Java obfuscators is49<b>ProGuard</b>'s main advantage compared to other Java obfuscators is
40probably its compact template-based configuration. A few intuitive command50probably its compact template-based configuration. A few intuitive command
41line options or a simple configuration file are usually sufficient. For51line options or a simple configuration file are usually sufficient.
42instance, the following configuration option preserves all applets in a jar:52The user manual explains all available options and shows examples of this
43<pre>
44 -keep public class * extends java.applet.Applet
45</pre>
46The user manual explains all available options and shows more examples of this
47powerful configuration style.53powerful configuration style.
48<p>54<p>
49<b>ProGuard</b> is fast. It only takes seconds to process programs and55<b>ProGuard</b> is fast. It only takes seconds to process programs and
@@ -55,38 +61,42 @@
55Toolkit.61Toolkit.
56<p>62<p>
57<p class="intro">63<p class="intro">
58Version 4.0 introduced preverification and more bytecode optimizations. Please64<b>ProGuard</b> now has a sibling optimizer and obfuscator for Android,
59report any problems, so they can be fixed soon.65<a href="http://www.saikoa.com/dexguard" target="_top"><b>DexGuard</b></a>. It
66is compatible with ProGuard, but it goes further. It directly targets Dalvik
67bytecode and it provides additional features like string encryption, class
68encryption, and hiding access to sensitive APIs.
60</p>69</p>
61The following sections provide more detailed information:70The following sections provide more detailed information:
62<ul>71<ul>
63<li><a href="main.html">Main</a>: this overview page.72<li><a href="main.html">Main</a>: this overview page.</li>
64<li><a href="results.html">Results</a>: some results obtained with73<li><a href="results.html">Results</a>: some results obtained with
65 <b>ProGuard</b>, including timings and memory usage.74 <b>ProGuard</b>, including timings and memory usage.</li>
66<li><a href="FAQ.html">FAQ</a>: answers to some Frequently Asked Questions.75<li><a href="FAQ.html">FAQ</a>: answers to some Frequently Asked Questions.</li>
67<li><a href="manual/index.html">Manual</a>: the complete <b>ProGuard</b> user76<li><a href="manual/index.html">Manual</a>: the complete <b>ProGuard</b> user
68 manual, with examples and troubleshooting tips.77 manual, with examples and troubleshooting tips.</li>
69<li><a href="quality.html">Quality</a>: a discussion of the (excellent) quality78<li><a href="quality.html">Quality</a>: a discussion of the (excellent) quality
70 of <b>ProGuard</b>'s code.79 of <b>ProGuard</b>'s code.</li>
71<li><a href="screenshots.html">Screenshots</a>: some impressions of what <b>ProGuard</b> looks like.80<li><a href="screenshots.html">Screenshots</a>: some impressions of what <b>ProGuard</b> looks like.</li>
72<li><a href="testimonials.html">Testimonials</a>: what users think of81<li><a href="testimonials.html">Testimonials</a>: what users think of
73 <b>ProGuard</b>.82 <b>ProGuard</b>.</li>
74<li><a href="license.html">License</a>: <b>ProGuard</b> is free, under a GPL83<li><a href="license.html">License</a>: <b>ProGuard</b> is free, under a GPL
75 license.84 license.</li>
76<li><a href="downloads.html">Downloads</a>: download the <b>ProGuard</b>85<li><a href="downloads.html">Downloads</a>: download the <b>ProGuard</b>
77 package yourself.86 package yourself.</li>
78<li><a href="feedback.html">Feedback</a>: tell me about your experiences, or87<li><a href="feedback.html">Feedback</a>: tell me about your experiences, or
79 learn from others on our forums.88 learn from others on our forums.</li>
80<li><a href="acknowledgements.html">Acknowledgements</a>: people who have been89<li><a href="acknowledgements.html">Acknowledgements</a>: people who have been
81 helpful.90 helpful.</li>
82<li><a href="alternatives.html">Alternatives</a>: other Java obfuscators,91<li><a href="alternatives.html">Alternatives</a>: other Java obfuscators,
83 optimizers, and shrinkers.92 optimizers, and shrinkers.</li>
84</ul>93</ul>
8594
86<hr>95<hr />
96<noscript><div><a target="_top" href="index.html" class="button">Show menu</a></div></noscript>
87<address>97<address>
88Copyright &copy; 2002-200998Copyright &copy; 2002-2012
89<a href="http://www.graphics.cornell.edu/~eric/">Eric Lafortune</a>.99<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>.
90</address>100</address>
91</body>101</body>
92</html>102</html>
93103
=== modified file 'docs/manual/ant.html'
--- docs/manual/ant.html 2009-10-09 16:17:49 +0000
+++ docs/manual/ant.html 2012-07-12 00:24:28 +0000
@@ -1,10 +1,21 @@
1<!doctype html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">1<!doctype html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2<html>2<html>
3<head>3<head>
4<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">4<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
5<meta http-equiv="content-style-type" content="text/css">5<meta http-equiv="content-style-type" content="text/css">
6<link rel="stylesheet" type="text/css" href="style.css">6<link rel="stylesheet" type="text/css" href="style.css">
7<title>Ant Task</title>7<title>Ant Task</title>
8<script type="text/javascript" language="JavaScript">
9<!--
10if (window.self==window.top)
11 window.top.location.replace("../index.html#"+window.location.pathname+window.location.hash);
12else {
13 var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), "");
14 if (window.top.location.hash!=hash)
15 window.top.location.hash=hash;
16}
17//-->
18</script>
8</head>19</head>
9<body>20<body>
1021
@@ -89,11 +100,11 @@
89<p>100<p>
90101
91Secondly, the use of <code>&lt;</code> and <code>&gt;</code> characters would102Secondly, the use of <code>&lt;</code> and <code>&gt;</code> characters would
92upset the structure of the XML build file. Environment variables are now103upset the structure of the XML build file. Environment variables can be
93enclosed by an opening <code>${</code> and a closing <code>}</code>. This104specified with the usual Ant style <code>${...}</code>, instead of the ProGuard
94syntax also allows you to use Ant properties within the ProGuard105style <code>&lt;...&gt;</code>. Other occurrences of <code>&lt;</code> and
95configuration. Other occurrences of <code>&lt;</code> and <code>&gt;</code>106<code>&gt;</code> have to be encoded as <code>&amp;lt;</code> and
96have to be encoded as <code>&amp;lt;</code> and <code>&amp;gt;</code>.107<code>&amp;gt;</code> respectively.
97<p>108<p>
98109
99<h3>3. XML configuration tags</h3>110<h3>3. XML configuration tags</h3>
@@ -107,8 +118,7 @@
107files in the <code>examples/ant</code> directory of the ProGuard distribution.118files in the <code>examples/ant</code> directory of the ProGuard distribution.
108<p>119<p>
109120
110<a name="proguard">&nbsp;</a>121<h2><a name="proguard">Task Attributes and Nested Elements</a></h2>
111<h2>Task Attributes and Nested Elements</h2>
112122
113The <code><b>&lt;proguard&gt;</b></code> task and the123The <code><b>&lt;proguard&gt;</b></code> task and the
114<code><b>&lt;proguardconfiguration&gt;</b></code> task can have the following124<code><b>&lt;proguardconfiguration&gt;</b></code> task can have the following
@@ -120,13 +130,14 @@
120<dt><a name="configuration_attribute"><code><b>configuration</b></code></a>130<dt><a name="configuration_attribute"><code><b>configuration</b></code></a>
121 = "<i>filename</i>"</dt>131 = "<i>filename</i>"</dt>
122<dd>Read and merge options from the given ProGuard-style configuration132<dd>Read and merge options from the given ProGuard-style configuration
123 file. Note: for reading XML-style configurations, use the <a133 file. Note: for reading multiple configuration files or XML-style
134 configurations, use the <a
124 href="#configuration_element"><code>configuration</code></a>135 href="#configuration_element"><code>configuration</code></a>
125 <i>element</i>.</dd>136 <i>element</i>.</dd>
126137
127<dt><a href="usage.html#dontskipnonpubliclibraryclasses"><code><b>skipnonpubliclibraryclasses</b></code></a>138<dt><a href="usage.html#skipnonpubliclibraryclasses"><code><b>skipnonpubliclibraryclasses</b></code></a>
128 = "<i>boolean</i>"139 = "<i>boolean</i>"
129 (default = true)</dt>140 (default = false)</dt>
130<dd>Ignore non-public library classes.</dd>141<dd>Ignore non-public library classes.</dd>
131142
132<dt><a href="usage.html#dontskipnonpubliclibraryclassmembers"><code><b>skipnonpubliclibraryclassmembers</b></code></a>143<dt><a href="usage.html#dontskipnonpubliclibraryclassmembers"><code><b>skipnonpubliclibraryclassmembers</b></code></a>
@@ -242,6 +253,11 @@
242<dd>Repackage all class files that are renamed into the single given253<dd>Repackage all class files that are renamed into the single given
243 package.</dd>254 package.</dd>
244255
256<dt><a href="usage.html#keepparameternames"><code><b>keepparameternames</b></code></a>
257 = "<i>boolean</i>"
258 (default = false)</dt>
259<dd>Keep the parameter names and types of methods that are kept.</dd>
260
245<dt><a href="usage.html#renamesourcefileattribute"><code><b>renamesourcefileattribute</b></code></a>261<dt><a href="usage.html#renamesourcefileattribute"><code><b>renamesourcefileattribute</b></code></a>
246 = "<i>string</i>"262 = "<i>string</i>"
247 (default = none)</dt>263 (default = none)</dt>
@@ -257,7 +273,7 @@
257<dt><a href="usage.html#microedition"><code><b>microedition</b></code></a>273<dt><a href="usage.html#microedition"><code><b>microedition</b></code></a>
258 = "<i>boolean</i>"274 = "<i>boolean</i>"
259 (default = false)</dt>275 (default = false)</dt>
260<dd>Targets the processed class files at Java Micro Edition.</dd>276<dd>Target the processed class files at Java Micro Edition.</dd>
261277
262<dt><a href="usage.html#verbose"><code><b>verbose</b></code></a>278<dt><a href="usage.html#verbose"><code><b>verbose</b></code></a>
263 = "<i>boolean</i>"279 = "<i>boolean</i>"
@@ -305,7 +321,7 @@
305<dt><a href="usage.html#outjars"><code><b>&lt;outjar</b></code></a>321<dt><a href="usage.html#outjars"><code><b>&lt;outjar</b></code></a>
306 <a href="#classpath"><i>class_path</i></a>322 <a href="#classpath"><i>class_path</i></a>
307 <code><b>/&gt;</b></code></dt>323 <code><b>/&gt;</b></code></dt>
308<dd>Specifies the name of the output jars (or wars, ears, zips, or324<dd>Specifies the names of the output jars (or wars, ears, zips, or
309 directories).</dd>325 directories).</dd>
310326
311<dt><a href="usage.html#libraryjars"><code><b>&lt;libraryjar</b></code></a>327<dt><a href="usage.html#libraryjars"><code><b>&lt;libraryjar</b></code></a>
@@ -436,23 +452,27 @@
436 filter. <i>Only use this option if you know what you're doing!</i></dd>452 filter. <i>Only use this option if you know what you're doing!</i></dd>
437453
438<dt><a name="configuration_element"><code><b>&lt;configuration refid = </b></code></a>"<i>ref_id</i>"454<dt><a name="configuration_element"><code><b>&lt;configuration refid = </b></code></a>"<i>ref_id</i>"
455 <code><b>/&gt;</b></code><br/>
456 <code><b>&lt;configuration file = </b></code>"<i>name</i>"
439 <code><b>/&gt;</b></code></dt>457 <code><b>/&gt;</b></code></dt>
440<dd>Includes the configuration specified in the458<dd>The first form includes the XML-style configuration specified in a
441 <code>&lt;proguardconfiguration&gt;</code> task (or459 <code>&lt;proguardconfiguration&gt;</code> task (or
442 <code>&lt;proguard&gt;</code> task) with the attribute <code>id</code> =460 <code>&lt;proguard&gt;</code> task) with attribute <code>id</code> =
443 "<i>ref_id</i>". Note that only the nested elements of this configuration461 "<i>ref_id</i>". Only the nested elements of this configuration are
444 are considered, not the attributes. Also note: for reading ProGuard-style462 considered, not the attributes.
445 configuration files, use the <a463 <p>
446 href="#configuration_attribute"><code>configuration</code></a>464 The second form includes the ProGuard-style configuration from the specified
447 <i>attribute</i>.</dd>465 file. The element is actually a <code>fileset</code> element and supports
466 all of its attributes and nested elements, including multiple files.
467 </dd>
448468
449</dl>469</dl>
450470
451<a name="classpath">&nbsp;</a>471<h2><a name="classpath">Class Path Attributes and Nested Elements</a></h2>
452<h2>Class Path Attributes and Nested Elements</h2>
453472
454The jar tags are path tags, so they can have any of the path attributes (or473The jar elements are <code>path</code> elements, so they can have any of the
455nested elements). The most common attributes are:474standard <code>path</code> attributes and nested elements. The most common
475attributes are:
456476
457<dl>477<dl>
458478
@@ -472,7 +492,7 @@
472492
473</dl>493</dl>
474494
475In addition, the jar tags can have ProGuard-style filter attributes:495In addition, the jar elements can have ProGuard-style filter attributes:
476496
477<dl>497<dl>
478498
@@ -499,8 +519,7 @@
499519
500</dl>520</dl>
501521
502<a name="keepmodifier">&nbsp;</a>522<h2><a name="keepmodifier">Keep Modifier Attributes</a></h2>
503<h2>Keep Modifier Attributes</h2>
504523
505The keep tags can have the following <i>modifier</i> attributes:524The keep tags can have the following <i>modifier</i> attributes:
506525
@@ -526,8 +545,7 @@
526545
527</dl>546</dl>
528547
529<a name="classspecification">&nbsp;</a>548<h2><a name="classspecification">Class Specification Attributes and Nested Elements</a></h2>
530<h2>Class Specification Attributes and Nested Elements</h2>
531549
532The keep tags can have the following <i>class_specification</i> attributes and550The keep tags can have the following <i>class_specification</i> attributes and
533<i>class_member_specifications</i> nested elements:551<i>class_member_specifications</i> nested elements:
@@ -538,6 +556,10 @@
538<dd>The optional access modifiers of the class. Any space-separated list of556<dd>The optional access modifiers of the class. Any space-separated list of
539 "public", "final", and "abstract", with optional negators "!".</dd>557 "public", "final", and "abstract", with optional negators "!".</dd>
540558
559<dt><code><b>annotation</b></code> = "<i>annotation_name</i>"</dt>
560<dd>The optional fully qualified name of an annotation of the class, with
561 optional wildcards.</dd>
562
541<dt><code><b>type</b></code> = "<i>type</i>"</dt>563<dt><code><b>type</b></code> = "<i>type</i>"</dt>
542<dd>The optional type of the class: one of "class", "interface", or564<dd>The optional type of the class: one of "class", "interface", or
543 "!interface".</dd>565 "!interface".</dd>
@@ -546,6 +568,10 @@
546<dd>The optional fully qualified name of the class, with optional568<dd>The optional fully qualified name of the class, with optional
547 wildcards.</dd>569 wildcards.</dd>
548570
571<dt><code><b>extendsannotation</b></code> = "<i>annotation_name</i>"</dt>
572<dd>The optional fully qualified name of an annotation of the the class that
573 the specified classes must extend, with optional wildcards.</dd>
574
549<dt><code><b>extends</b></code> = "<i>class_name</i>"</dt>575<dt><code><b>extends</b></code> = "<i>class_name</i>"</dt>
550<dd>The optional fully qualified name of the class the specified classes576<dd>The optional fully qualified name of the class the specified classes
551 must extend, with optional wildcards.</dd>577 must extend, with optional wildcards.</dd>
@@ -571,8 +597,7 @@
571597
572</dl>598</dl>
573599
574<a name="classmemberspecification">&nbsp;</a>600<h2><a name="classmemberspecification">Class Member Specification Attributes</a></h2>
575<h2>Class Member Specification Attributes</h2>
576601
577The class member tags can have the following <i>class_member_specification</i>602The class member tags can have the following <i>class_member_specification</i>
578attributes:603attributes:
@@ -584,6 +609,10 @@
584 "public", "protected", "private", "static", etc., with optional negators609 "public", "protected", "private", "static", etc., with optional negators
585 "!".</dd>610 "!".</dd>
586611
612<dt><code><b>annotation</b></code> = "<i>annotation_name</i>"</dt>
613<dd>The optional fully qualified name of an annotation of the class member,
614 with optional wildcards.</dd>
615
587<dt><code><b>type</b></code> = "<i>type</i>"</dt>616<dt><code><b>type</b></code> = "<i>type</i>"</dt>
588<dd>The optional fully qualified type of the class member, with optional617<dd>The optional fully qualified type of the class member, with optional
589 wildcards. Not applicable for constructors, but required for methods for618 wildcards. Not applicable for constructors, but required for methods for
@@ -601,10 +630,11 @@
601630
602</dl>631</dl>
603632
604<hr>633<hr />
634<noscript><div><a target="_top" href="../index.html" class="button">Show menu</a></div></noscript>
605<address>635<address>
606Copyright &copy; 2002-2009636Copyright &copy; 2002-2012
607<a href="http://www.graphics.cornell.edu/~eric/">Eric Lafortune</a>.637<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>.
608</address>638</address>
609</body>639</body>
610</html>640</html>
611641
=== modified file 'docs/manual/examples.html'
--- docs/manual/examples.html 2009-10-09 16:17:49 +0000
+++ docs/manual/examples.html 2012-07-12 00:24:28 +0000
@@ -1,10 +1,21 @@
1<!doctype html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">1<!doctype html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2<html>2<html>
3<head>3<head>
4<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">4<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
5<meta http-equiv="content-style-type" content="text/css">5<meta http-equiv="content-style-type" content="text/css">
6<link rel="stylesheet" type="text/css" href="style.css">6<link rel="stylesheet" type="text/css" href="style.css">
7<title>ProGuard Examples</title>7<title>ProGuard Examples</title>
8<script type="text/javascript" language="JavaScript">
9<!--
10if (window.self==window.top)
11 window.top.location.replace("../index.html#"+window.location.pathname+window.location.hash);
12else {
13 var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), "");
14 if (window.top.location.hash!=hash)
15 window.top.location.hash=hash;
16}
17//-->
18</script>
8</head>19</head>
9<body>20<body>
1021
@@ -12,76 +23,83 @@
1223
13Some typical useful configurations:24Some typical useful configurations:
14<ol>25<ol>
15<li><a href="#application">A typical application</a>26<li><a href="#application">A typical application</a></li>
16<li><a href="#applet">A typical applet</a>27<li><a href="#applet">A typical applet</a></li>
17<li><a href="#midlet">A typical midlet</a>28<li><a href="#midlet">A typical midlet</a></li>
18<li><a href="#jcapplet">A typical Java Card applet</a>29<li><a href="#jcapplet">A typical Java Card applet</a></li>
19<li><a href="#xlet">A typical xlet</a>30<li><a href="#xlet">A typical xlet</a></li>
20<li><a href="#androidapplication">A typical Android application</a>31<li><a href="#androidactivity">A simple Android activity</a></li>
21<li><a href="#library">A typical library</a>32<li><a href="#androidapplication">A complete Android application</a></li>
22<li><a href="#applications">All possible applications in the input jars</a>33<li><a href="#library">A typical library</a></li>
23<li><a href="#applets">All possible applets in the input jars</a>34<li><a href="#applications">All possible applications in the input jars</a></li>
24<li><a href="#midlets">All possible midlets in the input jars</a>35<li><a href="#applets">All possible applets in the input jars</a></li>
25<li><a href="#jcapplets">All possible Java Card applets in the input jars</a>36<li><a href="#midlets">All possible midlets in the input jars</a></li>
26<li><a href="#xlets">All possible xlets in the input jars</a>37<li><a href="#jcapplets">All possible Java Card applets in the input jars</a></li>
27<li><a href="#androidapplications">All possible Android applications in the input jars</a>38<li><a href="#xlets">All possible xlets in the input jars</a></li>
28<li><a href="#servlets">All possible servlets in the input jars</a>39<li><a href="#servlets">All possible servlets in the input jars</a></li>
29<li><a href="#native">Processing native methods</a>40<li><a href="#scala">Scala applications with the Scala runtime</a></li>
30<li><a href="#callback">Processing callback methods</a>41<li><a href="#native">Processing native methods</a></li>
31<li><a href="#enumerations">Processing enumeration classes</a>42<li><a href="#callback">Processing callback methods</a></li>
32<li><a href="#serializable">Processing serializable classes</a>43<li><a href="#enumerations">Processing enumeration classes</a></li>
33<li><a href="#beans">Processing bean classes</a>44<li><a href="#serializable">Processing serializable classes</a></li>
34<li><a href="#annotations">Processing annotations</a>45<li><a href="#beans">Processing bean classes</a></li>
35<li><a href="#database">Processing database drivers</a>46<li><a href="#annotations">Processing annotations</a></li>
36<li><a href="#componentui">Processing ComponentUI classes</a>47<li><a href="#database">Processing database drivers</a></li>
37<li><a href="#rmi">Processing RMI code</a>48<li><a href="#componentui">Processing ComponentUI classes</a></li>
38<li><a href="#resourcefiles">Processing resource files</a>49<li><a href="#rmi">Processing RMI code</a></li>
39<li><a href="#stacktrace">Producing useful obfuscated stack traces</a>50<li><a href="#injection">Processing resource injection</a></li>
40<li><a href="#repackaging">Obfuscating package names</a>51<li><a href="#resourcefiles">Processing resource files</a></li>
41<li><a href="#restructuring">Restructuring the output archives</a>52<li><a href="#manifestfiles">Processing manifest files</a></li>
42<li><a href="#filtering">Filtering the input and the output</a>53<li><a href="#stacktrace">Producing useful obfuscated stack traces</a></li>
43<li><a href="#multiple">Processing multiple applications at once</a>54<li><a href="#repackaging">Obfuscating package names</a></li>
44<li><a href="#incremental">Incremental obfuscation</a>55<li><a href="#restructuring">Restructuring the output archives</a></li>
45<li><a href="#microedition">Preverifying class files for Java Micro Edition</a>56<li><a href="#filtering">Filtering the input and the output</a></li>
46<li><a href="#upgrade">Upgrading class files to Java 6</a>57<li><a href="#multiple">Processing multiple applications at once</a></li>
47<li><a href="#deadcode">Finding dead code</a>58<li><a href="#incremental">Incremental obfuscation</a></li>
48<li><a href="#structure">Printing out the internal structure of class files</a>59<li><a href="#microedition">Preverifying class files for Java Micro Edition</a></li>
49<li><a href="#annotated">Using annotations to configure ProGuard</a>60<li><a href="#upgrade">Upgrading class files to Java 6</a></li>
61<li><a href="#deadcode">Finding dead code</a></li>
62<li><a href="#structure">Printing out the internal structure of class files</a></li>
63<li><a href="#annotated">Using annotations to configure ProGuard</a></li>
50</ol>64</ol>
5165
52You can find some sample configuration files in the <code>examples</code>66You can find some sample configuration files in the <code>examples</code>
53directory of the ProGuard distribution.67directory of the ProGuard distribution.
5468
55<a name="application">&nbsp;</a>69<h3><a name="application">A typical application</a></h3>
56<h3>A typical application</h3>70
57To shrink, optimize, and obfuscate the ProGuard application itself, one would71To shrink, optimize, and obfuscate a simple Java application, you typically
58typically create a configuration file <code>proguard.pro</code> and then type:72create a configuration file like <code>myconfig.pro</code>, which can be used
73with
59<pre>74<pre>
60java -jar proguard.jar @proguard.pro75bin/proguard @myconfig.pro
61</pre>76</pre>
62<p>77<p>
63The configuration file would contain the following options:78The configuration file specifies the input, the output, and the entry points
79of the application:
64<pre>80<pre>
65-injars proguard.jar81-injars myapplication.jar
66-outjars proguard_out.jar82-outjars myapplication_out.jar
67-libraryjars &lt;java.home&gt;/lib/rt.jar83-libraryjars &lt;java.home&gt;/lib/rt.jar
68-printmapping proguard.map84-printmapping myapplication.map
6985
70-keep public class proguard.ProGuard {86-keep public class mypackage.MyMain {
71 public static void main(java.lang.String[]);87 public static void main(java.lang.String[]);
72}88}
73</pre>89</pre>
74<p>90<p>
75Note the use of the <code>&lt;java.home&gt;</code> system property; it is91Note the use of the <code>&lt;java.home&gt;</code> system property. ProGuard
76replaced automatically.92automatically replaces it when parsing the file.
77<p>93<p>
78Also note that all type names are fully specified:94The <a href="usage.html#keep"><code>-keep</code></a> option specifies the
79<code>proguard.ProGuard</code> and <code>java.lang.String[]</code>.95entry point of the application that has to be preserved.
80<p>
81The access modifiers <code>public</code> and <code>static</code> are not96The access modifiers <code>public</code> and <code>static</code> are not
82really required in this case, since we know a priori that the specified class97really required in this case, since we know a priori that the specified class
83and method have the proper access flags. It just looks more familiar this way.98and method have the proper access flags. It just looks more familiar this way.
84<p>99<p>
100Note that all type names are fully specified:
101<code>mypackage.MyMain</code> and <code>java.lang.String[]</code>.
102<p>
85We're writing out an obfuscation mapping file with <a103We're writing out an obfuscation mapping file with <a
86href="usage.html#printmapping"><code>-printmapping</code></a>, for104href="usage.html#printmapping"><code>-printmapping</code></a>, for
87de-obfuscating any stack traces later on, or for incremental obfuscation of105de-obfuscating any stack traces later on, or for incremental obfuscation of
@@ -103,11 +121,10 @@
103<a href="#enumerations">enumerations</a>, <a href="#serializable">serializable121<a href="#enumerations">enumerations</a>, <a href="#serializable">serializable
104classes</a>, <a href="#beans">bean classes</a>, <a122classes</a>, <a href="#beans">bean classes</a>, <a
105href="#annotations">annotations</a>, and <a href="#resourcefiles">resource123href="#annotations">annotations</a>, and <a href="#resourcefiles">resource
106files</a>. For processing 'simple' applications like ProGuard, that is not124files</a>.
107required.125
108126<h3><a name="applet">A typical applet</a></h3>
109<a name="applet">&nbsp;</a>127
110<h3>A typical applet</h3>
111These options shrink, optimize, and obfuscate the applet128These options shrink, optimize, and obfuscate the applet
112<code>mypackage.MyApplet</code>:129<code>mypackage.MyApplet</code>:
113<pre>130<pre>
@@ -129,15 +146,15 @@
129href="#annotations">annotations</a>, and <a href="#resourcefiles">resource146href="#annotations">annotations</a>, and <a href="#resourcefiles">resource
130files</a>.147files</a>.
131148
132<a name="midlet">&nbsp;</a>149<h3><a name="midlet">A typical midlet</a></h3>
133<h3>A typical midlet</h3>150
134These options shrink, optimize, obfuscate, and preverify the midlet151These options shrink, optimize, obfuscate, and preverify the midlet
135<code>mypackage.MyMIDlet</code>:152<code>mypackage.MyMIDlet</code>:
136<pre>153<pre>
137-injars in.jar154-injars in.jar
138-outjars out.jar155-outjars out.jar
139-libraryjars /usr/local/java/wtk2.1/lib/midpapi20.jar156-libraryjars /usr/local/java/wtk2.5.2/lib/midpapi20.jar
140-libraryjars /usr/local/java/wtk2.1/lib/cldcapi11.jar157-libraryjars /usr/local/java/wtk2.5.2/lib/cldcapi11.jar
141-overloadaggressively158-overloadaggressively
142-repackageclasses ''159-repackageclasses ''
143-allowaccessmodification160-allowaccessmodification
@@ -172,8 +189,8 @@
172Note that you will still have to adapt the midlet jar size in the189Note that you will still have to adapt the midlet jar size in the
173corresponding jad file; ProGuard doesn't do that for you.190corresponding jad file; ProGuard doesn't do that for you.
174191
175<a name="jcapplet">&nbsp;</a>192<h3><a name="jcapplet">A typical Java Card applet</a></h3>
176<h3>A typical Java Card applet</h3>193
177These options shrink, optimize, and obfuscate the Java Card applet194These options shrink, optimize, and obfuscate the Java Card applet
178<code>mypackage.MyApplet</code>:195<code>mypackage.MyApplet</code>:
179<pre>196<pre>
@@ -192,8 +209,8 @@
192it now targets the Java Card run-time environment. This environment doesn't209it now targets the Java Card run-time environment. This environment doesn't
193have java.lang.Class, so we're telling ProGuard not to worry about it.210have java.lang.Class, so we're telling ProGuard not to worry about it.
194211
195<a name="xlet">&nbsp;</a>212<h3><a name="xlet">A typical xlet</a></h3>
196<h3>A typical xlet</h3>213
197These options shrink, optimize, and obfuscate the xlet214These options shrink, optimize, and obfuscate the xlet
198<code>mypackage.MyXlet</code>:215<code>mypackage.MyXlet</code>:
199<pre>216<pre>
@@ -212,15 +229,16 @@
212The configuration is very similar to the configuration for midlets, except that229The configuration is very similar to the configuration for midlets, except that
213it now targets the CDC run-time environment with the Java TV API.230it now targets the CDC run-time environment with the Java TV API.
214231
215<a name="androidapplication">&nbsp;</a>232<h3><a name="androidactivity">A simple Android activity</a></h3>
216<h3>A typical Android application</h3>233
217These options shrink, optimize, and obfuscate the simple Android application234These options shrink, optimize, and obfuscate the single Android
218based on a single activity <code>mypackage.MyActivity</code>:235activity <code>mypackage.MyActivity</code>:
219<pre>236<pre>
220-injars in.jar237-injars bin/classes
221-outjars out.jar238-outjars bin/classes-processed.jar
222-libraryjars /usr/local/java/android-1.5_r1/platforms/android-1.5/android.jar239-libraryjars /usr/local/java/android-sdk/platforms/android-9/android.jar
223-overloadaggressively240
241-dontpreverify
224-repackageclasses ''242-repackageclasses ''
225-allowaccessmodification243-allowaccessmodification
226-optimizations !code/simplification/arithmetic244-optimizations !code/simplification/arithmetic
@@ -228,27 +246,157 @@
228-keep public class mypackage.MyActivity246-keep public class mypackage.MyActivity
229</pre>247</pre>
230<p>248<p>
231The configuration is very similar to the configuration for midlets, except that249We're targeting the Android run-time and keeping the activity as an entry
232it now targets the Android run-time environment.250point.
251<p>
252Preverification is irrelevant for the dex compiler and the Dalvik VM, so we
253can switch it off with the
254<a href="usage.html#dontpreverify"><code>-dontpreverify</code></a> option.
233<p>255<p>
234The <a href="usage.html#optimizations"><code>-optimizations</code></a> option256The <a href="usage.html#optimizations"><code>-optimizations</code></a> option
235disables some arithmetic simplifications that Dalvik 1.0 and 1.5 can't handle.257disables some arithmetic simplifications that Dalvik 1.0 and 1.5 can't handle.
236<p>258Note that the Dalvik VM also can't
237If applicable, you should add options for processing <a href="#native">native259handle <a href="usage.html#overloadaggressively">aggressive overloading</a>
238methods</a>, <a href="#callback">callback methods</a>, and <a260(of static fields).
239href="#resourcefiles">resource files</a>.261<p>
240262If applicable, you should add options for processing <a href="#native">native
241<a name="library">&nbsp;</a>263methods</a>, <a href="#callback">callback methods</a>,
242<h3>A typical library</h3>264<a href="#enumerations">enumerations</a>,
265<a href="#annotations">annotations</a>, and
266<a href="#resourcefiles">resource files</a>.
267
268<h3><a name="androidapplication">A complete Android application</a></h3>
269
270These options shrink, optimize, and obfuscate all public activities, services,
271broadcast receivers, and content providers from the compiled classes and
272external libraries:
273<pre>
274-injars bin/classes
275-injars libs
276-outjars bin/classes-processed.jar
277-libraryjars /usr/local/java/android-sdk/platforms/android-9/android.jar
278
279-dontpreverify
280-repackageclasses ''
281-allowaccessmodification
282-optimizations !code/simplification/arithmetic
283-keepattributes *Annotation*
284
285-keep public class * extends android.app.Activity
286-keep public class * extends android.app.Application
287-keep public class * extends android.app.Service
288-keep public class * extends android.content.BroadcastReceiver
289-keep public class * extends android.content.ContentProvider
290
291-keep public class * extends android.view.View {
292 public &lt;init&gt;(android.content.Context);
293 public &lt;init&gt;(android.content.Context, android.util.AttributeSet);
294 public &lt;init&gt;(android.content.Context, android.util.AttributeSet, int);
295 public void set*(...);
296}
297
298-keepclasseswithmembers class * {
299 public &lt;init&gt;(android.content.Context, android.util.AttributeSet);
300}
301
302-keepclasseswithmembers class * {
303 public &lt;init&gt;(android.content.Context, android.util.AttributeSet, int);
304}
305
306-keepclassmembers class * extends android.content.Context {
307 public void *(android.view.View);
308 public void *(android.view.MenuItem);
309}
310
311-keepclassmembers class * implements android.os.Parcelable {
312 static android.os.Parcelable$Creator CREATOR;
313}
314
315-keepclassmembers class **.R$* {
316 public static &lt;fields&gt;;
317}
318</pre>
319<p>
320Most importantly, we're keeping all fundamental classes that may be referenced
321by the <code>AndroidManifest.xml</code> file of the application. If your
322manifest file contains other classes and methods, you may have to specify
323those as well.
324<p>
325We're keeping annotations, since they might be used by custom
326<code>RemoteViews</code>.
327<p>
328We're keeping any custom <code>View</code> extensions and other classes with
329typical constructors, since they might be referenced from XML layout files.
330<p>
331We're also keeping possible <code>onClick</code> handlers in
332custom <code>Context</code> extensions, since they might be referenced from
333XML layout files.
334<p>
335We're also keeping the required static fields in <code>Parcelable</code>
336implementations, since they are accessed by introspection.
337<p>
338Finally, we're keeping the static fields of referenced inner classes of
339auto-generated <code>R</code> classes, just in case your code is accessing
340those fields by introspection. Note that the compiler already inlines
341primitive fields, so ProGuard can generally remove all these classes entirely
342anyway (because the classes are not referenced and therefore not required).
343<p>
344If you're using additional Google APIs, you'll have to specify
345those as well, for instance:
346<pre>
347-libraryjars /usr/local/android-sdk/add-ons/google_apis-7_r01/libs/maps.jar
348</pre>
349<p>
350If you're using Google's optional License Verification Library, you can
351obfuscate its code along with your own code. You do have to preserve
352its <code>ILicensingService</code> interface for the library to work:
353<pre>
354-keep public interface com.android.vending.licensing.ILicensingService
355</pre>
356<p>
357If you're using the Android Compatibility library, you should add the
358following line, to let ProGuard know it's ok that the library references some
359classes that are not available in all versions of the API:
360<pre>
361-dontwarn android.support.**
362</pre>
363<p>
364If applicable, you should add options for processing <a href="#native">native
365methods</a>, <a href="#callback">callback methods</a>,
366<a href="#enumerations">enumerations</a>,
367and <a href="#resourcefiles">resource files</a>. You may also want to add
368options for producing <a href="#stacktrace">useful stack traces</a>. You can
369find a complete sample configuration in <code>examples/android.pro</code> in
370the ProGuard distribution.
371<p>
372The Ant and Eclipse build processes of the Android SDK already integrate
373ProGuard by default, with all the proper settings. You only need to enable
374ProGuard (for release builds) by uncommenting the line
375"<code>proguard.config=.....</code>" in the file
376<code>project.properties</code> (created or updated by Android SDK revision 17
377or higher). In case of problems, you may want to check if the configuration
378files that are listed on this line (<code>proguard-project.txt</code>,...)
379contain the necessary settings for your application. Note that the build
380processes are already setting the necessary program jars, library jars, and
381output jars for you.
382<p>
383For more information, you can consult the official <a target="other"
384href="http://developer.android.com/guide/developing/tools/proguard.html">Developer
385Guide</a> in the Android SDK.
386
387<h3><a name="library">A typical library</a></h3>
388
243These options shrink, optimize, and obfuscate an entire library, keeping all389These options shrink, optimize, and obfuscate an entire library, keeping all
244public and protected classes and class members, native method names, and390public and protected classes and class members, native method names, and
245serialization code:391serialization code. The processed version of the library can then still be
392used as such, for developing code based on its public API.
246<pre>393<pre>
247-injars in.jar394-injars in.jar
248-outjars out.jar395-outjars out.jar
249-libraryjars &lt;java.home&gt;/lib/rt.jar396-libraryjars &lt;java.home&gt;/lib/rt.jar
250-printmapping out.map397-printmapping out.map
251398
399-keepparameternames
252-renamesourcefileattribute SourceFile400-renamesourcefileattribute SourceFile
253-keepattributes Exceptions,InnerClasses,Signature,Deprecated,401-keepattributes Exceptions,InnerClasses,Signature,Deprecated,
254 SourceFile,LineNumberTable,*Annotation*,EnclosingMethod402 SourceFile,LineNumberTable,*Annotation*,EnclosingMethod
@@ -273,6 +421,7 @@
273421
274-keepclassmembers class * implements java.io.Serializable {422-keepclassmembers class * implements java.io.Serializable {
275 static final long serialVersionUID;423 static final long serialVersionUID;
424 private static final java.io.ObjectStreamField[] serialPersistentFields;
276 private void writeObject(java.io.ObjectOutputStream);425 private void writeObject(java.io.ObjectOutputStream);
277 private void readObject(java.io.ObjectInputStream);426 private void readObject(java.io.ObjectInputStream);
278 java.lang.Object writeReplace();427 java.lang.Object writeReplace();
@@ -289,12 +438,12 @@
289href="usage.html#keepclassmembernames"><code>-keepclassmembernames</code></a>438href="usage.html#keepclassmembernames"><code>-keepclassmembernames</code></a>
290option for the <code>class$</code> methods is not strictly necessary. These439option for the <code>class$</code> methods is not strictly necessary. These
291methods are inserted by the <code>javac</code> compiler and the440methods are inserted by the <code>javac</code> compiler and the
292<code>jikes</code> compiler respectively, to implement the <code>.class</code>441<code>jikes</code> compiler respectively, in JDK 1.2 and older, to implement
293construct. ProGuard will automatically detect them and deal with them, even442the <code>.class</code> construct. ProGuard will automatically detect them and
294when their names have been obfuscated. However, older versions of ProGuard and443deal with them, even when their names have been obfuscated. However, other
295other obfuscators may rely on the original method names. It may therefore be444obfuscators may rely on the original method names. It may therefore be helpful
296helpful to preserve them, in case these other obfuscators are ever used for445to preserve them, in case these other obfuscators are ever used for further
297further obfuscation of the library.446obfuscation of the library.
298<p>447<p>
299The "Exceptions" attribute has to be preserved, so the compiler knows which448The "Exceptions" attribute has to be preserved, so the compiler knows which
300exceptions methods may throw.449exceptions methods may throw.
@@ -307,6 +456,11 @@
307The "Signature" attribute is required to be able to access generic types when456The "Signature" attribute is required to be able to access generic types when
308compiling in JDK 5.0 and higher.457compiling in JDK 5.0 and higher.
309<p>458<p>
459The <a href="usage.html#keepparameternames"><code>-keepparameternames</code></a>
460option keeps the parameter names in the "LocalVariableTable" and
461"LocalVariableTypeTable" attributes of public library methods. Some IDEs can
462present these names to the developers who use the library.
463<p>
310Finally, we're keeping the "Deprecated" attribute and the attributes for464Finally, we're keeping the "Deprecated" attribute and the attributes for
311producing <a href="#stacktrace">useful stack traces</a>.465producing <a href="#stacktrace">useful stack traces</a>.
312<p>466<p>
@@ -316,8 +470,8 @@
316href="#annotations">annotations</a>, which are all discussed in their470href="#annotations">annotations</a>, which are all discussed in their
317respective examples.471respective examples.
318472
319<a name="applications">&nbsp;</a>473<h3><a name="applications">All possible applications in the input jars</a></h3>
320<h3>All possible applications in the input jars</h3>474
321These options shrink, optimize, and obfuscate all public applications in475These options shrink, optimize, and obfuscate all public applications in
322<code>in.jar</code>:476<code>in.jar</code>:
323<pre>477<pre>
@@ -347,8 +501,8 @@
347href="#annotations">annotations</a>, and <a href="#resourcefiles">resource501href="#annotations">annotations</a>, and <a href="#resourcefiles">resource
348files</a>.502files</a>.
349503
350<a name="applets">&nbsp;</a>504<h3><a name="applets">All possible applets in the input jars</a></h3>
351<h3>All possible applets in the input jars</h3>505
352These options shrink, optimize, and obfuscate all public applets in506These options shrink, optimize, and obfuscate all public applets in
353<code>in.jar</code>:507<code>in.jar</code>:
354<pre>508<pre>
@@ -372,15 +526,15 @@
372href="#annotations">annotations</a>, and <a href="#resourcefiles">resource526href="#annotations">annotations</a>, and <a href="#resourcefiles">resource
373files</a>.527files</a>.
374528
375<a name="midlets">&nbsp;</a>529<h3><a name="midlets">All possible midlets in the input jars</a></h3>
376<h3>All possible midlets in the input jars</h3>530
377These options shrink, optimize, obfuscate, and preverify all public midlets in531These options shrink, optimize, obfuscate, and preverify all public midlets in
378<code>in.jar</code>:532<code>in.jar</code>:
379<pre>533<pre>
380-injars in.jar534-injars in.jar
381-outjars out.jar535-outjars out.jar
382-libraryjars /usr/local/java/wtk2.1/lib/midpapi20.jar536-libraryjars /usr/local/java/wtk2.5.2/lib/midpapi20.jar
383-libraryjars /usr/local/java/wtk2.1/lib/cldcapi11.jar537-libraryjars /usr/local/java/wtk2.5.2/lib/cldcapi11.jar
384-overloadaggressively538-overloadaggressively
385-repackageclasses ''539-repackageclasses ''
386-allowaccessmodification540-allowaccessmodification
@@ -412,8 +566,8 @@
412Note that you will still have to adapt the midlet jar size in the566Note that you will still have to adapt the midlet jar size in the
413corresponding jad file; ProGuard doesn't do that for you.567corresponding jad file; ProGuard doesn't do that for you.
414568
415<a name="jcapplets">&nbsp;</a>569<h3><a name="jcapplets">All possible Java Card applets in the input jars</a></h3>
416<h3>All possible Java Card applets in the input jars</h3>570
417These options shrink, optimize, and obfuscate all public Java Card applets in571These options shrink, optimize, and obfuscate all public Java Card applets in
418<code>in.jar</code>:572<code>in.jar</code>:
419<pre>573<pre>
@@ -435,8 +589,8 @@
435The <a href="usage.html#printseeds"><code>-printseeds</code></a> option prints589The <a href="usage.html#printseeds"><code>-printseeds</code></a> option prints
436out which applets exactly will be preserved.590out which applets exactly will be preserved.
437591
438<a name="xlets">&nbsp;</a>592<h3><a name="xlets">All possible xlets in the input jars</a></h3>
439<h3>All possible xlets in the input jars</h3>593
440These options shrink, optimize, and obfuscate all public xlets in594These options shrink, optimize, and obfuscate all public xlets in
441<code>in.jar</code>:595<code>in.jar</code>:
442<pre>596<pre>
@@ -458,38 +612,8 @@
458The <a href="usage.html#printseeds"><code>-printseeds</code></a> option prints612The <a href="usage.html#printseeds"><code>-printseeds</code></a> option prints
459out which xlets exactly will be preserved.613out which xlets exactly will be preserved.
460614
461<a name="androidapplications">&nbsp;</a>615<h3><a name="servlets">All possible servlets in the input jars</a></h3>
462<h3>All possible Android applications in the input jars</h3>616
463These options shrink, optimize, and obfuscate all public activities, services,
464broadcast receivers, and content providers in <code>in.jar</code>:
465<pre>
466-injars in.jar
467-outjars out.jar
468-libraryjars /usr/local/java/android-1.5_r1/platforms/android-1.5/android.jar
469-overloadaggressively
470-repackageclasses ''
471-allowaccessmodification
472-optimizations !code/simplification/arithmetic
473-printseeds
474
475-keep public class * extends android.app.Activity
476-keep public class * extends android.app.Service
477-keep public class * extends android.content.BroadcastReceiver
478-keep public class * extends android.content.ContentProvider
479</pre>
480<p>
481We're keeping all classes that extend the base classes that may be referenced
482by the <code>AndroidManifest.xml</code> file of the application.
483<p>
484The <a href="usage.html#printseeds"><code>-printseeds</code></a> option prints
485out which implementations exactly will be preserved.
486<p>
487If applicable, you should add options for processing <a href="#native">native
488methods</a>, <a href="#callback">callback methods</a>, and <a
489href="#resourcefiles">resource files</a>.
490
491<a name="servlets">&nbsp;</a>
492<h3>All possible servlets in the input jars</h3>
493These options shrink, optimize, and obfuscate all public servlets in617These options shrink, optimize, and obfuscate all public servlets in
494<code>in.jar</code>:618<code>in.jar</code>:
495<pre>619<pre>
@@ -521,8 +645,77 @@
521href="#annotations">annotations</a>, and <a href="#resourcefiles">resource645href="#annotations">annotations</a>, and <a href="#resourcefiles">resource
522files</a>.646files</a>.
523647
524<a name="native">&nbsp;</a>648<h3><a name="scala">Scala applications with the Scala runtime</a></h3>
525<h3>Processing native methods</h3>649
650These options shrink, optimize, and obfuscate all public Scala applications in
651<code>in.jar</code>:
652<pre>
653-injars in.jar
654-injars /usr/local/java/scala-2.9.1/lib/scala-library.jar
655-outjars out.jar
656-libraryjars &lt;java.home&gt;/lib/rt.jar
657
658-dontwarn scala.**
659
660-keepclasseswithmembers public class * {
661 public static void main(java.lang.String[]);
662}
663
664-keep class * implements org.xml.sax.EntityResolver
665
666-keepclassmembers class * {
667 ** MODULE$;
668}
669
670-keepclassmembernames class scala.concurrent.forkjoin.ForkJoinPool {
671 long eventCount;
672 int workerCounts;
673 int runControl;
674 scala.concurrent.forkjoin.ForkJoinPool$WaitQueueNode syncStack;
675 scala.concurrent.forkjoin.ForkJoinPool$WaitQueueNode spareStack;
676}
677
678-keepclassmembernames class scala.concurrent.forkjoin.ForkJoinWorkerThread {
679 int base;
680 int sp;
681 int runState;
682}
683
684-keepclassmembernames class scala.concurrent.forkjoin.ForkJoinTask {
685 int status;
686}
687
688-keepclassmembernames class scala.concurrent.forkjoin.LinkedTransferQueue {
689 scala.concurrent.forkjoin.LinkedTransferQueue$PaddedAtomicReference head;
690 scala.concurrent.forkjoin.LinkedTransferQueue$PaddedAtomicReference tail;
691 scala.concurrent.forkjoin.LinkedTransferQueue$PaddedAtomicReference cleanMe;
692}
693</pre>
694<p>
695The configuration is essentially the same as
696for <a href="#applications">processing applications</a>, because Scala is
697compiled to ordinary Java bytecode. However, the example processes the Scala
698runtime library as well. The processed jar can be an order of magnitude
699smaller and a few times faster than the original code (for the Scala code
700examples, for instance).
701<p>
702The <a href="usage.html#dontwarn"><code>-dontwarn</code></a> option tells
703ProGuard not to complain about some artefacts in the Scala runtime, the way it
704is compiled by the <code>scalac</code> compiler (at least in Scala 2.9.1 and
705older). Note that this option should always be used with care.
706<p>
707The additional <a href="usage.html#keepoverview"><code>-keep</code></a>
708options make sure that some classes and some fields that are accessed by means
709of introspection are not removed or renamed.
710<p>
711If applicable, you should add options for processing <a href="#native">native
712methods</a>, <a href="#callback">callback methods</a>, <a
713href="#enumerations">enumerations</a>, <a href="#serializable">serializable
714classes</a>, <a href="#beans">bean classes</a>, <a
715href="#annotations">annotations</a>, and <a href="#resourcefiles">resource
716files</a>.
717<h3><a name="native">Processing native methods</a></h3>
718
526If your application, applet, servlet, library, etc., contains native methods,719If your application, applet, servlet, library, etc., contains native methods,
527you'll want to preserve their names and their classes' names, so they can720you'll want to preserve their names and their classes' names, so they can
528still be linked to the native library. The following additional option will721still be linked to the native library. The following additional option will
@@ -543,8 +736,8 @@
543entry points, which you'll have to specify explicitly. <a736entry points, which you'll have to specify explicitly. <a
544href="callback">Callback methods</a> are discussed below as a typical example.737href="callback">Callback methods</a> are discussed below as a typical example.
545738
546<a name="callback">&nbsp;</a>739<h3><a name="callback">Processing callback methods</a></h3>
547<h3>Processing callback methods</h3>740
548If your application, applet, servlet, library, etc., contains callback741If your application, applet, servlet, library, etc., contains callback
549methods, which are called from external code (native code, scripts,...),742methods, which are called from external code (native code, scripts,...),
550you'll want to preserve them, and probably their classes too. They are just743you'll want to preserve them, and probably their classes too. They are just
@@ -559,8 +752,8 @@
559<p>752<p>
560This will preserve the given class and method from being removed or renamed.753This will preserve the given class and method from being removed or renamed.
561754
562<a name="enumerations">&nbsp;</a>755<h3><a name="enumerations">Processing enumeration classes</a></h3>
563<h3>Processing enumeration classes</h3>756
564If your application, applet, servlet, library, etc., contains enumeration757If your application, applet, servlet, library, etc., contains enumeration
565classes, you'll have to preserve some special methods. Enumerations were758classes, you'll have to preserve some special methods. Enumerations were
566introduced in Java 5. The java compiler translates enumerations into classes759introduced in Java 5. The java compiler translates enumerations into classes
@@ -576,8 +769,8 @@
576}769}
577</pre>770</pre>
578771
579<a name="serializable">&nbsp;</a>772<h3><a name="serializable">Processing serializable classes</a></h3>
580<h3>Processing serializable classes</h3>773
581More complex applications, applets, servlets, libraries, etc., may contain774More complex applications, applets, servlets, libraries, etc., may contain
582classes that are serialized. Depending on the way in which they are used, they775classes that are serialized. Depending on the way in which they are used, they
583may require special attention:776may require special attention:
@@ -589,6 +782,7 @@
589782
590<pre>783<pre>
591-keepclassmembers class * implements java.io.Serializable {784-keepclassmembers class * implements java.io.Serializable {
785 private static final java.io.ObjectStreamField[] serialPersistentFields;
592 private void writeObject(java.io.ObjectOutputStream);786 private void writeObject(java.io.ObjectOutputStream);
593 private void readObject(java.io.ObjectInputStream);787 private void readObject(java.io.ObjectInputStream);
594 java.lang.Object writeReplace();788 java.lang.Object writeReplace();
@@ -602,8 +796,7 @@
602 option makes sure that any serialization methods are kept. By using this796 option makes sure that any serialization methods are kept. By using this
603 option instead of the basic <code>-keep</code> option, we're not797 option instead of the basic <code>-keep</code> option, we're not
604 forcing preservation of <i>all</i> serializable classes, just preservation798 forcing preservation of <i>all</i> serializable classes, just preservation
605 of the listed members of classes that are actually used.799 of the listed members of classes that are actually used.</li>
606 <p>
607800
608<li>Sometimes, the serialized data are stored, and read back later into newer801<li>Sometimes, the serialized data are stored, and read back later into newer
609 versions of the serializable classes. One then has to take care the classes802 versions of the serializable classes. One then has to take care the classes
@@ -617,7 +810,7 @@
617810
618-keepclassmembers class * implements java.io.Serializable {811-keepclassmembers class * implements java.io.Serializable {
619 static final long serialVersionUID;812 static final long serialVersionUID;
620 static final java.io.ObjectStreamField[] serialPersistentFields;813 private static final java.io.ObjectStreamField[] serialPersistentFields;
621 !static !transient &lt;fields&gt;;814 !static !transient &lt;fields&gt;;
622 private void writeObject(java.io.ObjectOutputStream);815 private void writeObject(java.io.ObjectOutputStream);
623 private void readObject(java.io.ObjectInputStream);816 private void readObject(java.io.ObjectInputStream);
@@ -632,7 +825,7 @@
632 The <code>&lt;fields&gt;</code> line preserves all non-static,825 The <code>&lt;fields&gt;</code> line preserves all non-static,
633 non-transient fields, with their original names. The introspection of the826 non-transient fields, with their original names. The introspection of the
634 serialization process and the de-serialization process will then find827 serialization process and the de-serialization process will then find
635 consistent names.828 consistent names.</li>
636829
637<li>Occasionally, the serialized data have to remain compatible, but the830<li>Occasionally, the serialized data have to remain compatible, but the
638 classes involved lack <code>serialVersionUID</code> fields. I imagine the831 classes involved lack <code>serialVersionUID</code> fields. I imagine the
@@ -651,7 +844,7 @@
651844
652-keepclassmembers class * implements java.io.Serializable {845-keepclassmembers class * implements java.io.Serializable {
653 static final long serialVersionUID;846 static final long serialVersionUID;
654 static final java.io.ObjectStreamField[] serialPersistentFields;847 private static final java.io.ObjectStreamField[] serialPersistentFields;
655 !static !transient &lt;fields&gt;;848 !static !transient &lt;fields&gt;;
656 !private &lt;fields&gt;;849 !private &lt;fields&gt;;
657 !private &lt;methods&gt;;850 !private &lt;methods&gt;;
@@ -668,7 +861,7 @@
668 interfaces of the serializable classes (using something like "<code>-keep861 interfaces of the serializable classes (using something like "<code>-keep
669 interface MyInterface</code>"), since these names are also used when862 interface MyInterface</code>"), since these names are also used when
670 computing the UID. A fast but sub-optimal alternative would be simply863 computing the UID. A fast but sub-optimal alternative would be simply
671 keeping all interfaces with "<code>-keep interface *</code>".864 keeping all interfaces with "<code>-keep interface *</code>".</li>
672865
673</ul>866</ul>
674<p>867<p>
@@ -679,8 +872,8 @@
679ever be serialized. Knowing your application and tuning the configuration872ever be serialized. Knowing your application and tuning the configuration
680often produces more compact results.873often produces more compact results.
681874
682<a name="beans">&nbsp;</a>875<h3><a name="beans">Processing bean classes</a></h3>
683<h3>Processing bean classes</h3>876
684If your application, applet, servlet, library, etc., makes extensive use of877If your application, applet, servlet, library, etc., makes extensive use of
685introspection on bean classes to find bean editor classes, or getter and878introspection on bean classes to find bean editor classes, or getter and
686setter methods, then configuration may become painful. There's not much else879setter methods, then configuration may become painful. There's not much else
@@ -715,8 +908,8 @@
715array or non-array). The methods with the '<code>int</code>' arguments matches908array or non-array). The methods with the '<code>int</code>' arguments matches
716properties that are lists.909properties that are lists.
717910
718<a name="annotations">&nbsp;</a>911<h3><a name="annotations">Processing annotations</a></h3>
719<h3>Processing annotations</h3>912
720If your application, applet, servlet, library, etc., uses annotations, you may913If your application, applet, servlet, library, etc., uses annotations, you may
721want to preserve them in the processed output. Annotations are represented by914want to preserve them in the processed output. Annotations are represented by
722attributes that have no direct effect on the execution of the code. However,915attributes that have no direct effect on the execution of the code. However,
@@ -744,8 +937,8 @@
744-keepattributes EnclosingMethod937-keepattributes EnclosingMethod
745</pre>938</pre>
746939
747<a name="database">&nbsp;</a>940<h3><a name="database">Processing database drivers</a></h3>
748<h3>Processing database drivers</h3>941
749Database drivers are implementations of the <code>Driver</code> interface.942Database drivers are implementations of the <code>Driver</code> interface.
750Since they are often created dynamically, you may want to preserve any943Since they are often created dynamically, you may want to preserve any
751implementations that you are processing as entry points:944implementations that you are processing as entry points:
@@ -758,8 +951,8 @@
758instantiating a driver in your code (without necessarily implementing any951instantiating a driver in your code (without necessarily implementing any
759drivers yourself).952drivers yourself).
760953
761<a name="componentui">&nbsp;</a>954<h3><a name="componentui">Processing ComponentUI classes</a></h3>
762<h3>Processing ComponentUI classes</h3>955
763Swing UI look and feels are implemented as extensions of the956Swing UI look and feels are implemented as extensions of the
764<code>ComponentUI</code> class. For some reason, these have to contain a957<code>ComponentUI</code> class. For some reason, these have to contain a
765static method <code>createUI</code>, which the Swing API invokes using958static method <code>createUI</code>, which the Swing API invokes using
@@ -773,8 +966,8 @@
773<p>966<p>
774This option also keeps the classes themselves.967This option also keeps the classes themselves.
775968
776<a name="rmi">&nbsp;</a>969<h3><a name="rmi">Processing RMI code</a></h3>
777<h3>Processing RMI code</h3>970
778Reportedly, the easiest way to handle RMI code is to process the code with971Reportedly, the easiest way to handle RMI code is to process the code with
779ProGuard first and then invoke the <code>rmic</code> tool. If that is not972ProGuard first and then invoke the <code>rmic</code> tool. If that is not
780possible, you may want to try something like this:973possible, you may want to try something like this:
@@ -798,8 +991,29 @@
798handling code performs introspection to check whether the method signatures991handling code performs introspection to check whether the method signatures
799are compatible.992are compatible.
800993
801<a name="resourcefiles">&nbsp;</a>994<h3><a name="injection">Processing resource injection</a></h3>
802<h3>Processing resource files</h3>995
996If your application is using JEE-style resource injection, the application
997container will automatically assign instances of resource classes to fields and
998methods that are annotated with <code>@Resource</code>. The container applies
999introspection, even accessing private class members directly. It typically
1000constructs a resource name based on the type name and the class member name.
1001We then have to avoid that such class members are removed or renamed:
1002<pre>
1003-keepclassmembers class * {
1004 @javax.annotation.Resource *;
1005}
1006</pre>
1007<p>
1008The Spring framework has another similar annotation <code>@Autowired</code>:
1009<pre>
1010-keepclassmembers class * {
1011 @org.springframework.beans.factory.annotation.Autowired *;
1012}
1013</pre>
1014
1015<h3><a name="resourcefiles">Processing resource files</a></h3>
1016
803If your application, applet, servlet, library, etc., contains resource files,1017If your application, applet, servlet, library, etc., contains resource files,
804it may be necessary to adapt their names and/or their contents when the1018it may be necessary to adapt their names and/or their contents when the
805application is obfuscated. The following two options can achieve this1019application is obfuscated. The following two options can achieve this
@@ -818,8 +1032,31 @@
818replaces these names by the obfuscated names (if any). You'll probably want to1032replaces these names by the obfuscated names (if any). You'll probably want to
819adapt the filters to suit your application.1033adapt the filters to suit your application.
8201034
821<a name="stacktrace">&nbsp;</a>1035<h3><a name="manifestfiles">Processing manifest files</a></h3>
822<h3>Producing useful obfuscated stack traces</h3>1036
1037As illustrated in the previous section, manifest files can be treated like
1038ordinary resource files. ProGuard can adapt obfuscated class names in the
1039files, but it won't make any other changes. If you want anything else, you
1040should apply an external tool. For instance, if a manifest file contains
1041signing information, you should sign the jar again after it has been
1042processed.
1043<p>
1044If you're merging several input jars into a single output jar, you'll have to
1045pick one, typically by specifying <a href="usage.html#filters">filters</a>:
1046<pre>
1047-injars in1.jar
1048-injars in2.jar(!META-INF/MANIFEST.MF)
1049-injars in3.jar(!META-INF/MANIFEST.MF)
1050-outjars out.jar
1051</pre>
1052<p>
1053The filters will let ProGuard copy the manifest file from the first jar and
1054ignore any manifest files in the second and third input jars. Note that
1055ProGuard will leave the order of the files in the jars unchanged; manifest
1056files are not necessarily put first.
1057
1058<h3><a name="stacktrace">Producing useful obfuscated stack traces</a></h3>
1059
823These options let obfuscated applications or libraries produce stack traces1060These options let obfuscated applications or libraries produce stack traces
824that can still be deciphered later on:1061that can still be deciphered later on:
825<pre>1062<pre>
@@ -844,8 +1081,8 @@
844<code>out.map</code>. The information can then be used by the <a1081<code>out.map</code>. The information can then be used by the <a
845href="retrace/index.html">ReTrace</a> tool to restore the original stack trace.1082href="retrace/index.html">ReTrace</a> tool to restore the original stack trace.
8461083
847<a name="repackaging">&nbsp;</a>1084<h3><a name="repackaging">Obfuscating package names</a></h3>
848<h3>Obfuscating package names</h3>1085
849Package names can be obfuscated in various ways, with increasing levels of1086Package names can be obfuscated in various ways, with increasing levels of
850obfuscation and compactness. For example, consider the following classes:1087obfuscation and compactness. For example, consider the following classes:
851<pre>1088<pre>
@@ -951,8 +1188,8 @@
951all code. Notably, you may have to take into account that your application may1188all code. Notably, you may have to take into account that your application may
952contain <a href="#resourcefiles">resource files</a> that have to be adapted.1189contain <a href="#resourcefiles">resource files</a> that have to be adapted.
9531190
954<a name="restructuring">&nbsp;</a>1191<h3><a name="restructuring">Restructuring the output archives</a></h3>
955<h3>Restructuring the output archives</h3>1192
956In simple applications, all output classes and resources files are merged into1193In simple applications, all output classes and resources files are merged into
957a single jar. For example:1194a single jar. For example:
958<pre>1195<pre>
@@ -1022,12 +1259,12 @@
1022always tries to package output archives in a sensible way, reconstructing the1259always tries to package output archives in a sensible way, reconstructing the
1023input entries as much as required.1260input entries as much as required.
10241261
1025<a name="filtering">&nbsp;</a>1262<h3><a name="filtering">Filtering the input and the output</a></h3>
1026<h3>Filtering the input and the output</h3>
10271263
1028If you want even greater control, you can add filters to the input and the1264If you want even greater control, you can add
1029output, filtering out zips, ears, wars, jars, and/or ordinary files. For1265<a href="usage.html#filters">filters</a> to the input and the output,
1030example, if you want to disregard certain files from an input jar:1266filtering out zips, ears, wars, jars, and/or ordinary files. For example, if
1267you want to disregard certain files from an input jar:
1031<pre>1268<pre>
1032-injars in.jar(!images/**)1269-injars in.jar(!images/**)
1033-outjars out.jar1270-outjars out.jar
@@ -1080,10 +1317,10 @@
1080<code>resources_out.jar</code>.1317<code>resources_out.jar</code>.
1081<p>1318<p>
1082Again, the filtering can be arbitrarily complex, especially when combined with1319Again, the filtering can be arbitrarily complex, especially when combined with
1083the grouping of input and output.1320grouping input and output.
10841321
1085<a name="multiple">&nbsp;</a>1322<h3><a name="multiple">Processing multiple applications at once</a></h3>
1086<h3>Processing multiple applications at once</h3>1323
1087You can process several dependent or independent applications (or applets,1324You can process several dependent or independent applications (or applets,
1088midlets,...) in one go, in order to save time and effort. ProGuard's input and1325midlets,...) in one go, in order to save time and effort. ProGuard's input and
1089output handling offers various ways to keep the output nicely structured.1326output handling offers various ways to keep the output nicely structured.
@@ -1100,10 +1337,10 @@
1100</pre>1337</pre>
1101<p>1338<p>
1102After processing, the directory <code>processed_applications</code> will1339After processing, the directory <code>processed_applications</code> will
1103contain the processed application jars, with their original names.1340contain processed versions of application jars, with their original names.
11041341
1105<a name="incremental">&nbsp;</a>1342<h3><a name="incremental">Incremental obfuscation</a></h3>
1106<h3>Incremental obfuscation</h3>1343
1107After having <a href="#application">processed an application</a>, e.g.1344After having <a href="#application">processed an application</a>, e.g.
1108ProGuard itself, you can still incrementally add other pieces of code that1345ProGuard itself, you can still incrementally add other pieces of code that
1109depend on it, e.g. the ProGuard GUI:1346depend on it, e.g. the ProGuard GUI:
@@ -1149,18 +1386,18 @@
1149}1386}
1150</pre>1387</pre>
11511388
1152<a name="microedition">&nbsp;</a>1389<h3><a name="microedition">Preverifying class files for Java Micro Edition</a></h3>
1153<h3>Preverifying class files for Java Micro Edition</h3>1390
1154Even if you're not interested in shrinking, optimizing, and obfuscating your1391Even if you're not interested in shrinking, optimizing, and obfuscating your
1155midlets, as shown in the <a href="#midlets">midlets example</a>, you can still1392midlets, as shown in the <a href="#midlets">midlets example</a>, you can still
1156use ProGuard to preverify the class files for Java Micro Edition. ProGuard1393use ProGuard to preverify the class files for Java Micro Edition. ProGuard
1157produces slightly more compact results compared to the traditional external1394produces slightly more compact results than the traditional external
1158preverifier.1395preverifier.
1159<pre>1396<pre>
1160-injars in.jar1397-injars in.jar
1161-outjars out.jar1398-outjars out.jar
1162-libraryjars /usr/local/java/wtk2.1/lib/midpapi20.jar1399-libraryjars /usr/local/java/wtk2.5.2/lib/midpapi20.jar
1163-libraryjars /usr/local/java/wtk2.1/lib/cldcapi11.jar1400-libraryjars /usr/local/java/wtk2.5.2/lib/cldcapi11.jar
11641401
1165-dontshrink1402-dontshrink
1166-dontoptimize1403-dontoptimize
@@ -1175,8 +1412,8 @@
1175that we don't need any <code>-keep</code> options to specify entry points; all1412that we don't need any <code>-keep</code> options to specify entry points; all
1176class files are simply preverified.1413class files are simply preverified.
11771414
1178<a name="upgrade">&nbsp;</a>1415<h3><a name="upgrade">Upgrading class files to Java 6</a></h3>
1179<h3>Upgrading class files to Java 6</h3>1416
1180The following options upgrade class files to Java 6, by updating their1417The following options upgrade class files to Java 6, by updating their
1181internal version numbers and preverifying them. The class files can then be1418internal version numbers and preverifying them. The class files can then be
1182loaded more efficiently by the Java 6 Virtual Machine.1419loaded more efficiently by the Java 6 Virtual Machine.
@@ -1198,8 +1435,8 @@
1198any <code>-keep</code> options to specify entry points; all class files are1435any <code>-keep</code> options to specify entry points; all class files are
1199simply updated and preverified.1436simply updated and preverified.
12001437
1201<a name="deadcode">&nbsp;</a>1438<h3><a name="deadcode">Finding dead code</a></h3>
1202<h3>Finding dead code</h3>1439
1203These options list unused classes, fields, and methods in the application1440These options list unused classes, fields, and methods in the application
1204<code>mypackage.MyApplication</code>:1441<code>mypackage.MyApplication</code>:
1205<pre>1442<pre>
@@ -1232,8 +1469,8 @@
1232}1469}
1233</pre>1470</pre>
12341471
1235<a name="structure">&nbsp;</a>1472<h3><a name="structure">Printing out the internal structure of class files</a></h3>
1236<h3>Printing out the internal structure of class files</h3>1473
1237These options print out the internal structure of all class files in the input1474These options print out the internal structure of all class files in the input
1238jar:1475jar:
1239<pre>1476<pre>
@@ -1250,8 +1487,7 @@
1250Note how we don't need to specify the Java run-time jar, because we're not1487Note how we don't need to specify the Java run-time jar, because we're not
1251processing the input jar at all.1488processing the input jar at all.
12521489
1253<a name="annotated">&nbsp;</a>1490<h3><a name="annotated">Using annotations to configure ProGuard</a></h3>
1254<h3>Using annotations to configure ProGuard</h3>
12551491
1256The traditional ProGuard configuration allows to keep a clean separation1492The traditional ProGuard configuration allows to keep a clean separation
1257between the code and the configuration for shrinking, optimization, and1493between the code and the configuration for shrinking, optimization, and
@@ -1291,12 +1527,12 @@
1291<p>1527<p>
1292The directory <code>examples/annotations</code> contains more examples that1528The directory <code>examples/annotations</code> contains more examples that
1293illustrate some of the possibilities.1529illustrate some of the possibilities.
1294<p>
12951530
1296<hr>1531<hr />
1532<noscript><div><a target="_top" href="../index.html" class="button">Show menu</a></div></noscript>
1297<address>1533<address>
1298Copyright &copy; 2002-20091534Copyright &copy; 2002-2012
1299<a href="http://www.graphics.cornell.edu/~eric/">Eric Lafortune</a>.1535<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>.
1300</address>1536</address>
1301</body>1537</body>
1302</html>1538</html>
13031539
=== modified file 'docs/manual/gui.html'
--- docs/manual/gui.html 2009-10-09 16:17:49 +0000
+++ docs/manual/gui.html 2012-07-12 00:24:28 +0000
@@ -1,10 +1,21 @@
1<!doctype html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">1<!doctype html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2<html>2<html>
3<head>3<head>
4<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">4<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
5<meta http-equiv="content-style-type" content="text/css">5<meta http-equiv="content-style-type" content="text/css">
6<link rel="stylesheet" type="text/css" href="style.css">6<link rel="stylesheet" type="text/css" href="style.css">
7<title>ProGuard GUI</title>7<title>ProGuard GUI</title>
8<script type="text/javascript" language="JavaScript">
9<!--
10if (window.self==window.top)
11 window.top.location.replace("../index.html#"+window.location.pathname+window.location.hash);
12else {
13 var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), "");
14 if (window.top.location.hash!=hash)
15 window.top.location.hash=hash;
16}
17//-->
18</script>
8</head>19</head>
9<body>20<body>
1021
@@ -15,10 +26,12 @@
15<p class="code">26<p class="code">
16<code><b>java -jar proguardgui.jar</b> [-nosplash] </code>[<i>configuration_file</i>]27<code><b>java -jar proguardgui.jar</b> [-nosplash] </code>[<i>configuration_file</i>]
17</p>28</p>
18The GUI will pop up in a window. With the <code>-nosplash</code> option, you29Alternatively, the <code>bin</code> directory contains some short Linux and
19can switch off the short opening animation. If you have specified a ProGuard30Windows scripts containing this command. The GUI will pop up in a window. With
20configuration file, it will be loaded. The GUI works like a wizard. You can31the <code>-nosplash</code> option, you can switch off the short opening
21edit the configuration and execute ProGuard through a few tabs:32animation. If you have specified a ProGuard configuration file, it will be
33loaded. The GUI works like a wizard. You can edit the configuration and
34execute ProGuard through a few tabs:
22<p>35<p>
2336
24<table cellspacing="5" cellpadding="5">37<table cellspacing="5" cellpadding="5">
@@ -57,8 +70,7 @@
57href="introduction.html">Introduction</a> of this manual.70href="introduction.html">Introduction</a> of this manual.
58<p>71<p>
5972
60<a name="proguard">&nbsp;</a>73<h2><a name="proguard">The ProGuard Tab</a></h2>
61<h2>The ProGuard Tab</h2>
6274
63The <i>ProGuard</i> tab presents a welcome message and one important button at75The <i>ProGuard</i> tab presents a welcome message and one important button at
64the bottom:76the bottom:
@@ -75,8 +87,7 @@
75creating a new configuration from scratch.87creating a new configuration from scratch.
76<p>88<p>
7789
78<a name="inputoutput">&nbsp;</a>90<h2><a name="inputoutput">The Input/Output Tab</a></h2>
79<h2>The Input/Output Tab</h2>
8091
81The <i>Input/Output</i> tab contains two lists, respectively to specify the92The <i>Input/Output</i> tab contains two lists, respectively to specify the
82program jars (or wars, ears, zips, or directories), and the library jars (or93program jars (or wars, ears, zips, or directories), and the library jars (or
@@ -88,12 +99,12 @@
88 entries specify the destinations to which the processed results will be99 entries specify the destinations to which the processed results will be
89 written. They are preceded by arrows, to distinguish them from input100 written. They are preceded by arrows, to distinguish them from input
90 entries. The results of each consecutive list of input entries will be101 entries. The results of each consecutive list of input entries will be
91 written to the subsequent consecutive list of output entries.102 written to the subsequent consecutive list of output entries.</li>
92103
93<li>The library jars are not copied to the output jars; they contain class104<li>The library jars are not copied to the output jars; they contain class
94 files that are used by class files in the program jars and that are105 files that are used by class files in the program jars and that are
95 necessary for correct processing. This list typically at least contains the106 necessary for correct processing. This list typically at least contains the
96 targeted Java runtime jar.107 targeted Java runtime jar.</li>
97</ul>108</ul>
98<p>109<p>
99110
@@ -145,16 +156,15 @@
145156
146Corresponding configuration options:157Corresponding configuration options:
147<ul type="none">158<ul type="none">
148<li>-<a href="usage.html#injars">injars</a>159<li>-<a href="usage.html#injars">injars</a></li>
149<li>-<a href="usage.html#outjars">outjars</a>160<li>-<a href="usage.html#outjars">outjars</a></li>
150<li>-<a href="usage.html#libraryjars">libraryjars</a>161<li>-<a href="usage.html#libraryjars">libraryjars</a></li>
151<li><a href="usage.html#classpath"><i>class_path</i></a>162<li><a href="usage.html#classpath"><i>class_path</i></a></li>
152<li><a href="usage.html#filters"><i>filters</i></a>163<li><a href="usage.html#filters"><i>filters</i></a></li>
153</ul>164</ul>
154<p>165<p>
155166
156<a name="shrinking">&nbsp;</a>167<h2><a name="shrinking">The Shrinking Tab</a></h2>
157<h2>The Shrinking Tab</h2>
158168
159The <i>Shrinking</i> tab presents a number of options that affect the169The <i>Shrinking</i> tab presents a number of options that affect the
160shrinking step. The basic options are followed by a few lists of classes and170shrinking step. The basic options are followed by a few lists of classes and
@@ -224,41 +234,41 @@
224<ul>234<ul>
225<li>The <b>Comments</b> text field allows to add optional comments to this235<li>The <b>Comments</b> text field allows to add optional comments to this
226 entry. The comments will identify the entry in the list and they will236 entry. The comments will identify the entry in the list and they will
227 appear as comments in the configuration file.237 appear as comments in the configuration file.</li>
228238
229<li>The <b>Keep</b> selection allows to specify whether you want to protect239<li>The <b>Keep</b> selection allows to specify whether you want to protect
230 the specified classes and their specified class members, or just the240 the specified classes and their specified class members, or just the
231 specified class members from the specified classes, or the specified241 specified class members from the specified classes, or the specified
232 classes and the specified class members, if the class members are present.242 classes and the specified class members, if the class members are present.
233 Note that class members will only be protected if they are explicitly243 Note that class members will only be protected if they are explicitly
234 specified, even if only by means of a wildcard.244 specified, even if only by means of a wildcard.</li>
235245
236<li>The <b>Allow</b> selection allows to specify whether you want to allow the246<li>The <b>Allow</b> selection allows to specify whether you want to allow the
237 the specified classes and their specified class members to be shrunk,247 the specified classes and their specified class members to be shrunk,
238 optimized and/or obfuscated.248 optimized and/or obfuscated.</li>
239249
240<li>The <b>Access</b> selections allows to specify constraints on the class or250<li>The <b>Access</b> selections allows to specify constraints on the class or
241 classes, based on their access modifiers.251 classes, based on their access modifiers.</li>
242252
243<li>The <b>Annotation</b> text field takes the fully-qualified name of an253<li>The <b>Annotation</b> text field takes the fully-qualified name of an
244 annotation that is required for matching classes. The annotation name can254 annotation that is required for matching classes. The annotation name can
245 contain wildcards. This is an advanced option for defining <i>keep</i>255 contain wildcards. This is an advanced option for defining <i>keep</i>
246 annotations.256 annotations.</li>
247257
248<li>The <b>Class</b> text field takes the fully-qualified name of the class or258<li>The <b>Class</b> text field takes the fully-qualified name of the class or
249 classes. The class name can contain wildcards.259 classes. The class name can contain wildcards.</li>
250260
251<li>The <b>Annotation</b> text field takes the fully-qualified name of an261<li>The <b>Annotation</b> text field takes the fully-qualified name of an
252 annotation that is required for the class or interface that the above262 annotation that is required for the class or interface that the above
253 class must extend. The annotation name can contain wildcards. This is an263 class must extend. The annotation name can contain wildcards. This is an
254 advanced option for defining <i>keep</i> annotations.264 advanced option for defining <i>keep</i> annotations.</li>
255265
256<li>The <b>Extends/implements class</b> text field takes the fully-qualified266<li>The <b>Extends/implements class</b> text field takes the fully-qualified
257 name of the class or interface that the above classes must extend.267 name of the class or interface that the above classes must extend.</li>
258268
259<li>The <b>Class members</b> list allows to specify a list of fields and269<li>The <b>Class members</b> list allows to specify a list of fields and
260 methods to keep. It can be edited by means of a list of buttons on the270 methods to keep. It can be edited by means of a list of buttons on the
261 right-hand side.271 right-hand side.</li>
262</ul>272</ul>
263<p>273<p>
264274
@@ -270,18 +280,18 @@
270280
271<ul>281<ul>
272<li>The <b>Access</b> selections allows to specify constraints on the field or282<li>The <b>Access</b> selections allows to specify constraints on the field or
273 fields, based on their access modifiers.283 fields, based on their access modifiers.</li>
274284
275<li>The <b>Annotation</b> text field takes the fully-qualified name of an285<li>The <b>Annotation</b> text field takes the fully-qualified name of an
276 annotation that is required for matching fields. The annotation name can286 annotation that is required for matching fields. The annotation name can
277 contain wildcards. This is an advanced option for defining <i>keep</i>287 contain wildcards. This is an advanced option for defining <i>keep</i>
278 annotations.288 annotations.</li>
279289
280<li>The <b>Return type</b> text field takes the fully-qualified type of the290<li>The <b>Return type</b> text field takes the fully-qualified type of the
281 field or fields. The type can contain wildcards.291 field or fields. The type can contain wildcards.</li>
282292
283<li>The <b>Name</b> text field takes the name of the field or fields. The field293<li>The <b>Name</b> text field takes the name of the field or fields. The field
284 name can contain wildcards.294 name can contain wildcards.</li>
285</ul>295</ul>
286<p>296<p>
287297
@@ -293,36 +303,35 @@
293303
294<ul>304<ul>
295<li>The <b>Access</b> selections allows to specify constraints on the method or305<li>The <b>Access</b> selections allows to specify constraints on the method or
296 methods, based on their access modifiers.306 methods, based on their access modifiers.</li>
297307
298<li>The <b>Annotation</b> text field takes the fully-qualified name of an308<li>The <b>Annotation</b> text field takes the fully-qualified name of an
299 annotation that is required for matching methods. The annotation name can309 annotation that is required for matching methods. The annotation name can
300 contain wildcards. This is an advanced option for defining <i>keep</i>310 contain wildcards. This is an advanced option for defining <i>keep</i>
301 annotations.311 annotations.</li>
302312
303<li>The <b>Return type</b> text field takes the fully-qualified type of the method or methods. The type can contain wildcards.313<li>The <b>Return type</b> text field takes the fully-qualified type of the method or methods. The type can contain wildcards.</li>
304314
305<li>The <b>Name</b> text field takes the name of the method or methods. The315<li>The <b>Name</b> text field takes the name of the method or methods. The
306 method name can contain wildcards.316 method name can contain wildcards.</li>
307317
308<li>The <b>Arguments</b> text field takes the comma-separated list of318<li>The <b>Arguments</b> text field takes the comma-separated list of
309 fully-qualified method arguments. Each of these arguments can contain319 fully-qualified method arguments. Each of these arguments can contain
310 wildcards.320 wildcards.</li>
311</ul>321</ul>
312<p>322<p>
313323
314Corresponding configuration options:324Corresponding configuration options:
315<ul type="none">325<ul type="none">
316<li>-<a href="usage.html#dontshrink">dontshrink</a>326<li>-<a href="usage.html#dontshrink">dontshrink</a></li>
317<li>-<a href="usage.html#printusage">printusage</a>327<li>-<a href="usage.html#printusage">printusage</a></li>
318<li>-<a href="usage.html#keep">keep</a>328<li>-<a href="usage.html#keep">keep</a></li>
319<li>-<a href="usage.html#keepclassmembers">keepclassmembers</a>329<li>-<a href="usage.html#keepclassmembers">keepclassmembers</a></li>
320<li>-<a href="usage.html#keepclasseswithmembers">keepclasseswithmembers</a>330<li>-<a href="usage.html#keepclasseswithmembers">keepclasseswithmembers</a></li>
321</ul>331</ul>
322<p>332<p>
323333
324<a name="obfuscation">&nbsp;</a>334<h2><a name="obfuscation">The Obfuscation Tab</a></h2>
325<h2>The Obfuscation Tab</h2>
326335
327The <i>Obfuscation</i> tab presents a number of options that affect the336The <i>Obfuscation</i> tab presents a number of options that affect the
328obfuscation step. The basic options are followed by a few lists of classes and337obfuscation step. The basic options are followed by a few lists of classes and
@@ -336,32 +345,32 @@
336345
337Corresponding configuration options:346Corresponding configuration options:
338<ul type="none">347<ul type="none">
339<li>-<a href="usage.html#dontobfuscate">dontobfuscate</a>348<li>-<a href="usage.html#dontobfuscate">dontobfuscate</a></li>
340<li>-<a href="usage.html#printmapping">printmapping</a>349<li>-<a href="usage.html#printmapping">printmapping</a></li>
341<li>-<a href="usage.html#applymapping">applymapping</a>350<li>-<a href="usage.html#applymapping">applymapping</a></li>
342<li>-<a href="usage.html#obfuscationdictionary">obfuscationdictionary</a>351<li>-<a href="usage.html#obfuscationdictionary">obfuscationdictionary</a></li>
343<li>-<a href="usage.html#classobfuscationdictionary">classobfuscationdictionary</a>352<li>-<a href="usage.html#classobfuscationdictionary">classobfuscationdictionary</a></li>
344<li>-<a href="usage.html#packageobfuscationdictionary">packageobfuscationdictionary</a>353<li>-<a href="usage.html#packageobfuscationdictionary">packageobfuscationdictionary</a></li>
345<li>-<a href="usage.html#overloadaggressively">overloadaggressively</a>354<li>-<a href="usage.html#overloadaggressively">overloadaggressively</a></li>
346<li>-<a href="usage.html#useuniqueclassmembernames">useuniqueclassmembernames</a>355<li>-<a href="usage.html#useuniqueclassmembernames">useuniqueclassmembernames</a></li>
347<li>-<a href="usage.html#dontusemixedcaseclassnames">dontusemixedcaseclassnames</a>356<li>-<a href="usage.html#dontusemixedcaseclassnames">dontusemixedcaseclassnames</a></li>
348<li>-<a href="usage.html#keeppackagenames">keeppackagenames</a>357<li>-<a href="usage.html#keeppackagenames">keeppackagenames</a></li>
349<li>-<a href="usage.html#flattenpackagehierarchy">flattenpackagehierarchy</a>358<li>-<a href="usage.html#flattenpackagehierarchy">flattenpackagehierarchy</a></li>
350<li>-<a href="usage.html#repackageclasses">repackageclasses</a>359<li>-<a href="usage.html#repackageclasses">repackageclasses</a></li>
351<li>-<a href="usage.html#keepattributes">keepattributes</a>360<li>-<a href="usage.html#keepattributes">keepattributes</a></li>
352<li>-<a href="usage.html#renamesourcefileattribute">renamesourcefileattribute</a>361<li>-<a href="usage.html#keepparameternames">keepparameternames</a></li>
353<li>-<a href="usage.html#adaptclassstrings">adaptclassstrings</a>362<li>-<a href="usage.html#renamesourcefileattribute">renamesourcefileattribute</a></li>
354<li>-<a href="usage.html#adaptresourcefilenames">adaptresourcefilenames</a>363<li>-<a href="usage.html#adaptclassstrings">adaptclassstrings</a></li>
355<li>-<a href="usage.html#adaptresourcefilecontents">adaptresourcefilecontents</a>364<li>-<a href="usage.html#adaptresourcefilenames">adaptresourcefilenames</a></li>
356<li>-<a href="usage.html#keepnames">keepnames</a>365<li>-<a href="usage.html#adaptresourcefilecontents">adaptresourcefilecontents</a></li>
357<li>-<a href="usage.html#keepclassmembernames">keepclassmembernames</a>366<li>-<a href="usage.html#keepnames">keepnames</a></li>
358<li>-<a href="usage.html#keepclasseswithmembernames">keepclasseswithmembernames</a>367<li>-<a href="usage.html#keepclassmembernames">keepclassmembernames</a></li>
359<li><a href="usage.html#classspecification"><i>class_specification</i></a>368<li>-<a href="usage.html#keepclasseswithmembernames">keepclasseswithmembernames</a></li>
369<li><a href="usage.html#classspecification"><i>class_specification</i></a></li>
360</ul>370</ul>
361<p>371<p>
362372
363<a name="optimization">&nbsp;</a>373<h2><a name="optimization">The Optimization Tab</a></h2>
364<h2>The Optimization Tab</h2>
365374
366The <i>Optimization</i> tab presents a number of options that affect the375The <i>Optimization</i> tab presents a number of options that affect the
367optimization step. The basic options are followed by a few lists of class376optimization step. The basic options are followed by a few lists of class
@@ -375,18 +384,17 @@
375384
376Corresponding configuration options:385Corresponding configuration options:
377<ul type="none">386<ul type="none">
378<li>-<a href="usage.html#dontoptimize">dontoptimize</a>387<li>-<a href="usage.html#dontoptimize">dontoptimize</a></li>
379<li>-<a href="usage.html#optimizations">optimizations</a>388<li>-<a href="usage.html#optimizations">optimizations</a></li>
380<li>-<a href="usage.html#optimizationpasses">optimizationpasses</a>389<li>-<a href="usage.html#optimizationpasses">optimizationpasses</a></li>
381<li>-<a href="usage.html#allowaccessmodification">allowaccessmodification</a>390<li>-<a href="usage.html#allowaccessmodification">allowaccessmodification</a></li>
382<li>-<a href="usage.html#mergeinterfacesaggressively">mergeinterfacesaggressively</a>391<li>-<a href="usage.html#mergeinterfacesaggressively">mergeinterfacesaggressively</a></li>
383<li>-<a href="usage.html#assumenosideeffects">assumenosideeffects</a>392<li>-<a href="usage.html#assumenosideeffects">assumenosideeffects</a></li>
384<li><a href="usage.html#classspecification"><i>class_specification</i></a>393<li><a href="usage.html#classspecification"><i>class_specification</i></a></li>
385</ul>394</ul>
386<p>395<p>
387396
388<a name="information">&nbsp;</a>397<h2><a name="information">The Information Tab</a></h2>
389<h2>The Information Tab</h2>
390398
391The <i>Information</i> tab presents a number of options for preverification399The <i>Information</i> tab presents a number of options for preverification
392and targeting, and for the information that ProGuard returns when processing400and targeting, and for the information that ProGuard returns when processing
@@ -396,26 +404,26 @@
396404
397Corresponding configuration options:405Corresponding configuration options:
398<ul type="none">406<ul type="none">
399<li>-<a href="usage.html#dontpreverify">dontpreverify</a>407<li>-<a href="usage.html#dontpreverify">dontpreverify</a></li>
400<li>-<a href="usage.html#microedition">microedition</a>408<li>-<a href="usage.html#microedition">microedition</a></li>
401<li>-<a href="usage.html#target">target</a>409<li>-<a href="usage.html#target">target</a></li>
402<li>-<a href="usage.html#verbose">verbose</a>410<li>-<a href="usage.html#verbose">verbose</a></li>
403<li>-<a href="usage.html#dontnote">dontnote</a>411<li>-<a href="usage.html#dontnote">dontnote</a></li>
404<li>-<a href="usage.html#dontwarn">dontwarn</a>412<li>-<a href="usage.html#dontwarn">dontwarn</a></li>
405<li>-<a href="usage.html#ignorewarnings">ignorewarnings</a>413<li>-<a href="usage.html#ignorewarnings">ignorewarnings</a></li>
406<li>-<a href="usage.html#dontskipnonpubliclibraryclasses">dontskipnonpubliclibraryclasses</a>414<li>-<a href="usage.html#skipnonpubliclibraryclasses">skipnonpubliclibraryclasses</a></li>
407<li>-<a href="usage.html#dontskipnonpubliclibraryclassmembers">dontskipnonpubliclibraryclassmembers</a>415<li>-<a href="usage.html#dontskipnonpubliclibraryclasses">dontskipnonpubliclibraryclasses</a></li>
408<li>-<a href="usage.html#keepdirectories">keepdirectories</a>416<li>-<a href="usage.html#dontskipnonpubliclibraryclassmembers">dontskipnonpubliclibraryclassmembers</a></li>
409<li>-<a href="usage.html#forceprocessing">forceprocessing</a>417<li>-<a href="usage.html#keepdirectories">keepdirectories</a></li>
410<li>-<a href="usage.html#printseeds">printseeds</a>418<li>-<a href="usage.html#forceprocessing">forceprocessing</a></li>
411<li>-<a href="usage.html#printconfiguration">printconfiguration</a>419<li>-<a href="usage.html#printseeds">printseeds</a></li>
412<li>-<a href="usage.html#dump">dump</a>420<li>-<a href="usage.html#printconfiguration">printconfiguration</a></li>
413<li>-<a href="usage.html#whyareyoukeeping">whyareyoukeeping</a>421<li>-<a href="usage.html#dump">dump</a></li>
422<li>-<a href="usage.html#whyareyoukeeping">whyareyoukeeping</a></li>
414</ul>423</ul>
415<p>424<p>
416425
417<a name="process">&nbsp;</a>426<h2><a name="process">The Process Tab</a></h2>
418<h2>The Process Tab</h2>
419427
420The <i>Process</i> tab has an output console for displaying the configuration428The <i>Process</i> tab has an output console for displaying the configuration
421and the messages while processing. There are three important buttons at the429and the messages while processing. There are three important buttons at the
@@ -433,8 +441,7 @@
433</table>441</table>
434<p>442<p>
435443
436<a name="retrace">&nbsp;</a>444<h2><a name="retrace">The ReTrace Tab</a></h2>
437<h2>The ReTrace Tab</h2>
438445
439The <i>ReTrace</i> tab has a panel with a few settings, an input text area for446The <i>ReTrace</i> tab has a panel with a few settings, an input text area for
440the obfuscated stack trace, and an output console to view the de-obfuscated447the obfuscated stack trace, and an output console to view the de-obfuscated
@@ -442,16 +449,16 @@
442449
443<ul>450<ul>
444<li>The <b>Verbose</b> check box in the settings panel allows to toggle between451<li>The <b>Verbose</b> check box in the settings panel allows to toggle between
445 normal mode and verbose mode.452 normal mode and verbose mode.</li>
446453
447<li>The <b>Mapping file</b> text field takes the name of the required mapping454<li>The <b>Mapping file</b> text field takes the name of the required mapping
448 file that ProGuard wrote while processing the original code. The file name455 file that ProGuard wrote while processing the original code. The file name
449 can be entered manually or by means of the <b>Browse...</b> button that456 can be entered manually or by means of the <b>Browse...</b> button that
450 opens a file chooser.457 opens a file chooser.</li>
451458
452<li>The <b>Obfuscated stack trace</b> text area allows to enter the stack459<li>The <b>Obfuscated stack trace</b> text area allows to enter the stack
453 trace, typically by copying and pasting it from elsewhere. Alternatively,460 trace, typically by copying and pasting it from elsewhere. Alternatively,
454 it can be loaded from a file by means of the load button below.461 it can be loaded from a file by means of the load button below.</li>
455</ul>462</ul>
456463
457There are two buttons at the bottom:464There are two buttons at the bottom:
@@ -463,12 +470,12 @@
463<tr><td class="button">ReTrace!</td>470<tr><td class="button">ReTrace!</td>
464 <td>executes ReTrace with the current settings.</td></tr>471 <td>executes ReTrace with the current settings.</td></tr>
465</table>472</table>
466<p>
467473
468<hr>474<hr />
475<noscript><div><a target="_top" href="../index.html" class="button">Show menu</a></div></noscript>
469<address>476<address>
470Copyright &copy; 2002-2009477Copyright &copy; 2002-2012
471<a href="http://www.graphics.cornell.edu/~eric/">Eric Lafortune</a>.478<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>.
472</address>479</address>
473</body>480</body>
474</html>481</html>
475482
=== modified file 'docs/manual/index.html'
--- docs/manual/index.html 2009-10-09 16:17:49 +0000
+++ docs/manual/index.html 2012-07-12 00:24:28 +0000
@@ -1,39 +1,51 @@
1<!doctype html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">1<!doctype html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2<html>2<html>
3<head>3<head>
4<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">4<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
5<meta http-equiv="content-style-type" content="text/css">5<meta http-equiv="content-style-type" content="text/css">
6<link rel="stylesheet" type="text/css" href="style.css">6<link rel="stylesheet" type="text/css" href="style.css">
7<title>ProGuard Manual</title>7<title>ProGuard Manual</title>
8<script type="text/javascript" language="JavaScript">
9<!--
10if (window.self==window.top)
11 window.top.location.replace("../index.html#"+window.location.pathname+window.location.hash);
12else {
13 var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), "");
14 if (window.top.location.hash!=hash)
15 window.top.location.hash=hash;
16}
17//-->
18</script>
8</head>19</head>
9<body>20<body>
1021
11<h2>ProGuard</h2>22<h2>ProGuard</h2>
1223
13<ol>24<ol>
14<li><a href="introduction.html">Introduction</a>25<li><a href="introduction.html">Introduction</a></li>
15<li><a href="usage.html">Usage</a>26<li><a href="usage.html">Usage</a></li>
16<li><a href="limitations.html">Limitations</a>27<li><a href="limitations.html">Limitations</a></li>
17<li><a href="examples.html">Examples</a>28<li><a href="examples.html">Examples</a></li>
18<li><a href="troubleshooting.html">Troubleshooting</a>29<li><a href="troubleshooting.html">Troubleshooting</a></li>
19<li><a href="refcard.html">Reference Card</a>30<li><a href="refcard.html">Reference Card</a></li>
20<li><a href="gui.html">Graphical User Interface</a>31<li><a href="gui.html">Graphical User Interface</a></li>
21<li><a href="ant.html">Ant Task</a>32<li><a href="ant.html">Ant Task</a></li>
22<li><a href="wtk.html">JME Wireless Toolkit Integration</a>33<li><a href="wtk.html">JME Wireless Toolkit Integration</a></li>
23</ol>34</ol>
2435
25<h2>ReTrace</h2>36<h2>ReTrace</h2>
2637
27<ol>38<ol>
28<li><a href="retrace/introduction.html">Introduction</a>39<li><a href="retrace/introduction.html">Introduction</a></li>
29<li><a href="retrace/usage.html">Usage</a>40<li><a href="retrace/usage.html">Usage</a></li>
30<li><a href="retrace/examples.html">Examples</a>41<li><a href="retrace/examples.html">Examples</a></li>
31</ol>42</ol>
3243
33<hr>44<hr />
45<noscript><div><a target="_top" href="../index.html" class="button">Show menu</a></div></noscript>
34<address>46<address>
35Copyright &copy; 2002-200947Copyright &copy; 2002-2012
36<a href="http://www.graphics.cornell.edu/~eric/">Eric Lafortune</a>.48<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>.
37</address>49</address>
38</body>50</body>
39</html>51</html>
4052
=== modified file 'docs/manual/introduction.html'
--- docs/manual/introduction.html 2009-10-09 16:17:49 +0000
+++ docs/manual/introduction.html 2012-07-12 00:24:28 +0000
@@ -1,10 +1,21 @@
1<!doctype html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">1<!doctype html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2<html>2<html>
3<head>3<head>
4<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">4<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
5<meta http-equiv="content-style-type" content="text/css">5<meta http-equiv="content-style-type" content="text/css">
6<link rel="stylesheet" type="text/css" href="style.css">6<link rel="stylesheet" type="text/css" href="style.css">
7<title>ProGuard Introduction</title>7<title>ProGuard Introduction</title>
8<script type="text/javascript" language="JavaScript">
9<!--
10if (window.self==window.top)
11 window.top.location.replace("../index.html#"+window.location.pathname+window.location.hash);
12else {
13 var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), "");
14 if (window.top.location.hash!=hash)
15 window.top.location.hash=hash;
16}
17//-->
18</script>
8</head>19</head>
9<body>20<body>
1021
@@ -17,8 +28,7 @@
17fields, and methods using short meaningless names. These first steps make the28fields, and methods using short meaningless names. These first steps make the
18code base smaller, more efficient, and harder to reverse-engineer. The final29code base smaller, more efficient, and harder to reverse-engineer. The final
19preverification step adds preverification information to the classes, which is30preverification step adds preverification information to the classes, which is
20required for Java Micro Edition or which improves the start-up time for Java31required for Java Micro Edition and for Java 6 and higher.
216.
22<p>32<p>
23Each of these steps is optional. For instance, ProGuard can also be used to33Each of these steps is optional. For instance, ProGuard can also be used to
24just list dead code in an application, or to preverify class files for34just list dead code in an application, or to preverify class files for
@@ -62,13 +72,13 @@
62</table>72</table>
63<p>73<p>
6474
65ProGuard typically reads the <b>input jars</b> (or wars, ears, zips, or75ProGuard first reads the <b>input jars</b> (or wars, ears, zips, or
66directories). It then shrinks, optimizes, obfuscates, and preverifies them.76directories). It then subsequently shrinks, optimizes, obfuscates, and
67Optionally, multiple optimization passes can be performed, each typically77preverifies them. You can optionally let ProGuard perform multiple
68followed by another shrinking step. ProGuard writes the processed results to78optimization passes. ProGuard writes the processed results to one or
69one or more <b>output jars</b> (or wars, ears, zips, or directories). The79more <b>output jars</b> (or wars, ears, zips, or directories). The input may
70input may contain resource files, whose names and contents can optionally be80contain resource files, whose names and contents can optionally be updated to
71updated to reflect the obfuscated class names.81reflect the obfuscated class names.
72<p>82<p>
73ProGuard requires the <b>library jars</b> (or wars, ears, zips, or83ProGuard requires the <b>library jars</b> (or wars, ears, zips, or
74directories) of the input jars to be specified. These are essentially the84directories) of the input jars to be specified. These are essentially the
@@ -76,63 +86,69 @@
76reconstruct the class dependencies that are necessary for proper processing.86reconstruct the class dependencies that are necessary for proper processing.
77The library jars themselves always remain unchanged. You should still put them87The library jars themselves always remain unchanged. You should still put them
78in the class path of your final application.88in the class path of your final application.
79<p>89
90<h3>Entry points</h3>
91
80In order to determine which code has to be preserved and which code can be92In order to determine which code has to be preserved and which code can be
81discarded or obfuscated, you have to specify one or more <i>entry points</i> to93discarded or obfuscated, you have to specify one or more <i>entry points</i> to
82your code. These entry points are typically classes with main methods, applets,94your code. These entry points are typically classes with main methods, applets,
83midlets, etc.95midlets, activities, etc.
84<ul>96<ul>
85<li>In the <b>shrinking step</b>, ProGuard starts from these seeds and97<li>In the <b>shrinking step</b>, ProGuard starts from these seeds and
86 recursively determines which classes and class members are used. All other98 recursively determines which classes and class members are used. All other
87 classes and class members are discarded.99 classes and class members are discarded.</li>
88100
89<li>In the <b>optimization step</b>, ProGuard further optimizes the code.101<li>In the <b>optimization step</b>, ProGuard further optimizes the code.
90 Among other optimizations, classes and methods that are not entry points102 Among other optimizations, classes and methods that are not entry points
91 can be made private, static, or final, unused parameters can be removed,103 can be made private, static, or final, unused parameters can be removed,
92 and some methods may be inlined.104 and some methods may be inlined.</li>
93105
94<li>In the <b>obfuscation step</b>, ProGuard renames classes and class members106<li>In the <b>obfuscation step</b>, ProGuard renames classes and class members
95 that are not entry points. In this entire process, keeping the entry107 that are not entry points. In this entire process, keeping the entry
96 points ensures that they can still be accessed by their original names.108 points ensures that they can still be accessed by their original names.</li>
97109
98<li>The <b>preverification step</b> is the only step that doesn't have to know110<li>The <b>preverification step</b> is the only step that doesn't have to know
99 the entry points.111 the entry points.</li>
100</ul>112</ul>
101<p>113<p>
102The <a href="usage.html">Usage section</a> of this manual describes the114The <a href="usage.html">Usage section</a> of this manual describes the
103necessary <a href="usage.html#keepoptions"><code>-keep</code> options</a> and115necessary <a href="usage.html#keepoptions"><code>-keep</code> options</a> and
104the <a href="examples.html">Examples section</a> provides plenty of examples.116the <a href="examples.html">Examples section</a> provides plenty of examples.
105117
106<h3>Introspection</h3>118<h3>Reflection</h3>
107119
108Introspection presents particular problems for any automatic processing of120Reflection and introspection present particular problems for any automatic
109code. In ProGuard, classes or class members in your code that are created or121processing of code. In ProGuard, classes or class members in your code that
110invoked dynamically (that is, by name) have to be specified as entry points122are created or invoked dynamically (that is, by name) have to be specified as
111too. For example, <code>Class.forName()</code> constructs may refer to any123entry points too. For example, <code>Class.forName()</code> constructs may
112class at run-time. It is generally impossible to foresee which classes have to124refer to any class at run-time. It is generally impossible to compute which
113be preserved (with their original names), since the class names might be read125classes have to be preserved (with their original names), since the class
114from a configuration file, for instance. You therefore have to specify them in126names might be read from a configuration file, for instance. You therefore
115your ProGuard configuration, with the same simple <code>-keep</code> options.127have to specify them in your ProGuard configuration, with the same
128simple <code>-keep</code> options.
116<p>129<p>
117However, ProGuard will already detect and handle the following cases for you:130However, ProGuard will already detect and handle the following cases for you:
118131
119<ul>132<ul>
120<li><code>Class.forName("SomeClass")</code>133<li><code>Class.forName("SomeClass")</code></li>
121<li><code>SomeClass.class</code>134<li><code>SomeClass.class</code></li>
122<li><code>SomeClass.class.getField("someField")</code>135<li><code>SomeClass.class.getField("someField")</code></li>
123<li><code>SomeClass.class.getDeclaredField("someField")</code>136<li><code>SomeClass.class.getDeclaredField("someField")</code></li>
124<li><code>SomeClass.class.getMethod("someMethod", new Class[] {})</code>137<li><code>SomeClass.class.getMethod("someMethod", new Class[] {})</code></li>
125<li><code>SomeClass.class.getMethod("someMethod", new Class[] { A.class })</code>138<li><code>SomeClass.class.getMethod("someMethod", new Class[] { A.class })</code></li>
126<li><code>SomeClass.class.getMethod("someMethod", new Class[] { A.class, B.class })</code>139<li><code>SomeClass.class.getMethod("someMethod", new Class[] { A.class, B.class })</code></li>
127<li><code>SomeClass.class.getDeclaredMethod("someMethod", new Class[] {})</code>140<li><code>SomeClass.class.getDeclaredMethod("someMethod", new Class[] {})</code></li>
128<li><code>SomeClass.class.getDeclaredMethod("someMethod", new Class[] { A.class })</code>141<li><code>SomeClass.class.getDeclaredMethod("someMethod", new Class[] { A.class })</code></li>
129<li><code>SomeClass.class.getDeclaredMethod("someMethod", new Class[] { A.class, B.class })</code>142<li><code>SomeClass.class.getDeclaredMethod("someMethod", new Class[] { A.class, B.class })</code></li>
143<li><code>AtomicIntegerFieldUpdater.newUpdater(SomeClass.class, "someField")</code></li>
144<li><code>AtomicLongFieldUpdater.newUpdater(SomeClass.class, "someField")</code></li>
145<li><code>AtomicReferenceFieldUpdater.newUpdater(SomeClass.class, SomeType.class, "someField")</code></li>
130</ul>146</ul>
131147
132The names of the classes and class members may of course be different, but the148The names of the classes and class members may of course be different, but the
133constructs should be literally the same for ProGuard to recognize them. The149constructs should be literally the same for ProGuard to recognize them. The
134referenced classes and class members are preserved in the shrinking phase, and150referenced classes and class members are preserved in the shrinking phase, and
135the string arguments are properly replaced in the obfuscation phase.151the string arguments are properly updated in the obfuscation phase.
136<p>152<p>
137Furthermore, ProGuard will offer some suggestions if keeping some classes or153Furthermore, ProGuard will offer some suggestions if keeping some classes or
138class members appears necessary. For example, ProGuard will note constructs154class members appears necessary. For example, ProGuard will note constructs
@@ -142,15 +158,15 @@
142configuration accordingly.158configuration accordingly.
143<p>159<p>
144For proper results, you should at least be somewhat familiar with the code160For proper results, you should at least be somewhat familiar with the code
145that you are processing. Obfuscating code that performs a lot of introspection161that you are processing. Obfuscating code that performs a lot of reflection
146may require trial and error, especially without the necessary information162may require trial and error, especially without the necessary information
147about the internals of the code.163about the internals of the code.
148<p>
149164
150<hr>165<hr />
166<noscript><div><a target="_top" href="../index.html" class="button">Show menu</a></div></noscript>
151<address>167<address>
152Copyright &copy; 2002-2009168Copyright &copy; 2002-2012
153<a href="http://www.graphics.cornell.edu/~eric/">Eric Lafortune</a>.169<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>.
154</address>170</address>
155</body>171</body>
156</html>172</html>
157173
=== modified file 'docs/manual/limitations.html'
--- docs/manual/limitations.html 2009-10-09 16:17:49 +0000
+++ docs/manual/limitations.html 2012-07-12 00:24:28 +0000
@@ -1,10 +1,21 @@
1<!doctype html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">1<!doctype html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2<html>2<html>
3<head>3<head>
4<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">4<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
5<meta http-equiv="content-style-type" content="text/css">5<meta http-equiv="content-style-type" content="text/css">
6<link rel="stylesheet" type="text/css" href="style.css">6<link rel="stylesheet" type="text/css" href="style.css">
7<title>ProGuard Limitations</title>7<title>ProGuard Limitations</title>
8<script type="text/javascript" language="JavaScript">
9<!--
10if (window.self==window.top)
11 window.top.location.replace("../index.html#"+window.location.pathname+window.location.hash);
12else {
13 var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), "");
14 if (window.top.location.hash!=hash)
15 window.top.location.hash=hash;
16}
17//-->
18</script>
8</head>19</head>
9<body>20<body>
1021
@@ -13,16 +24,7 @@
13When using ProGuard, you should be aware of a few technical issues, all of24When using ProGuard, you should be aware of a few technical issues, all of
14which are easily avoided or resolved:25which are easily avoided or resolved:
15<p>26<p>
16<ul>27<ul class="spacious">
17
18<li>For efficiency, ProGuard always ignores any <b>private or package visible
19 library classes</b> while reading library jars. If any of them are
20 extended by public library classes, and then extended again by input
21 classes, ProGuard will complain it can't find them. In that case, you'll
22 have to use the <code>-dontskipnonpubliclibraryclasses</code> option, and
23 maybe even the <code>-dontskipnonpubliclibraryclassmembers</code> option.
24 The graphical user interface has checkboxes for these settings.
25 <p>
2628
27<li>For best results, ProGuard's optimization algorithms assume that the29<li>For best results, ProGuard's optimization algorithms assume that the
28 processed code never <b>intentionally throws NullPointerExceptions</b> or30 processed code never <b>intentionally throws NullPointerExceptions</b> or
@@ -33,32 +35,35 @@
33 <code>myObject</code> might be null, causing a NullPointerException. In35 <code>myObject</code> might be null, causing a NullPointerException. In
34 some way this is a good thing: optimized code may throw fewer exceptions.36 some way this is a good thing: optimized code may throw fewer exceptions.
35 Should this entire assumption be false, you'll have to switch off37 Should this entire assumption be false, you'll have to switch off
36 optimization using the <code>-dontoptimize</code> option.38 optimization using the <code>-dontoptimize</code> option.</li>
37 <p>39
40<li>ProGuard's optimization algorithms currently also assume that the
41 processed code never creates <b>busy-waiting loops</b> without at least
42 testing on a volatile field. Again, it may remove such loops. Should this
43 assumption be false, you'll have to switch off optimization using
44 the <code>-dontoptimize</code> option.</li>
3845
39<li>If an input jar and a library jar contain classes in the <b>same46<li>If an input jar and a library jar contain classes in the <b>same
40 package</b>, the obfuscated output jar may contain class names that47 package</b>, the obfuscated output jar may contain class names that
41 overlap with class names in the library jar. This is most likely if the48 overlap with class names in the library jar. This is most likely if the
42 library jar has been obfuscated before, as it will then probably contain49 library jar has been obfuscated before, as it will then probably contain
43 classes named 'a', 'b', etc. Packages should therefore never be split50 classes named 'a', 'b', etc. Packages should therefore never be split
44 across input jars and library jars.51 across input jars and library jars.</li>
45 <p>
4652
47<li>When obfuscating, ProGuard will write out class files named53<li>When obfuscating, ProGuard writes out class files named
48 "<code>a.class</code>", "<code>b.class</code>", etc. If there is a large54 "<code>a.class</code>", "<code>b.class</code>", etc. If a package contains
49 numbers of classes in the same package, it may also write out55 a large number of classes, ProGuard may also write out
50 <b>"<code>aux.class</code>"</b>. Windows doesn't allow creating files with56 <b>"<code>aux.class</code>"</b>. Inconveniently, Windows refuses to create
51 this reserved name (among a few other names), so it's generally better to57 files with this reserved name (among a few other names). It's generally
52 write the output to a jar, in order to avoid such problems.58 better to write the output to a jar, in order to avoid such problems.</li>
53 <p>
5459
55</ul>60</ul>
56<p>
5761
58<hr>62<hr />
63<noscript><div><a target="_top" href="../index.html" class="button">Show menu</a></div></noscript>
59<address>64<address>
60Copyright &copy; 2002-200965Copyright &copy; 2002-2012
61<a href="http://www.graphics.cornell.edu/~eric/">Eric Lafortune</a>.66<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>.
62</address>67</address>
63</body>68</body>
64</html>69</html>
6570
=== modified file 'docs/manual/optimizations.html'
--- docs/manual/optimizations.html 2009-10-09 16:17:49 +0000
+++ docs/manual/optimizations.html 2012-07-12 00:24:28 +0000
@@ -1,10 +1,21 @@
1<!doctype html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">1<!doctype html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2<html>2<html>
3<head>3<head>
4<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">4<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
5<meta http-equiv="content-style-type" content="text/css">5<meta http-equiv="content-style-type" content="text/css">
6<link rel="stylesheet" type="text/css" href="style.css">6<link rel="stylesheet" type="text/css" href="style.css">
7<title>Optimizations</title>7<title>Optimizations</title>
8<script type="text/javascript" language="JavaScript">
9<!--
10if (window.self==window.top)
11 window.top.location.replace("../index.html#"+window.location.pathname+window.location.hash);
12else {
13 var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), "");
14 if (window.top.location.hash!=hash)
15 window.top.location.hash=hash;
16}
17//-->
18</script>
8</head>19</head>
9<body>20<body>
1021
@@ -124,6 +135,9 @@
124 <code><b>code/simplification/branch</b></code></dt>135 <code><b>code/simplification/branch</b></code></dt>
125<dd>Performs peephole optimizations for branch instructions.</dd>136<dd>Performs peephole optimizations for branch instructions.</dd>
126137
138<dt><code><b>code/simplification/string</b></code></dt>
139<dd>Performs peephole optimizations for constant strings.</dd>
140
127<dt><div>(<i>best used with</i> <code>code/removal/advanced</code>)</div>141<dt><div>(<i>best used with</i> <code>code/removal/advanced</code>)</div>
128 <code><b>code/simplification/advanced</b></code></dt>142 <code><b>code/simplification/advanced</b></code></dt>
129<dd>Simplifies code based on control flow analysis and data flow143<dd>Simplifies code based on control flow analysis and data flow
@@ -142,17 +156,17 @@
142<dd>Removes unused variables from the local variable frame.</dd>156<dd>Removes unused variables from the local variable frame.</dd>
143157
144<dt><code><b>code/removal/exception</b></code></dt>158<dt><code><b>code/removal/exception</b></code></dt>
145<dd>Removes exceptions with empty catch blocks.</dd>159<dd>Removes exceptions with empty try blocks.</dd>
146160
147<dt><code><b>code/allocation/variable</b></code></dt>161<dt><code><b>code/allocation/variable</b></code></dt>
148<dd>Optimizes variable allocation on the local variable frame.</dd>162<dd>Optimizes variable allocation on the local variable frame.</dd>
149</dl>163</dl>
150<p>
151164
152<hr>165<hr />
166<noscript><div><a target="_top" href="../index.html" class="button">Show menu</a></div></noscript>
153<address>167<address>
154Copyright &copy; 2002-2009168Copyright &copy; 2002-2012
155<a href="http://www.graphics.cornell.edu/~eric/">Eric Lafortune</a>.169<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>.
156</address>170</address>
157</body>171</body>
158</html>172</html>
159173
=== modified file 'docs/manual/refcard.html'
--- docs/manual/refcard.html 2009-10-09 16:17:49 +0000
+++ docs/manual/refcard.html 2012-07-12 00:24:28 +0000
@@ -1,10 +1,21 @@
1<!doctype html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">1<!doctype html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2<html>2<html>
3<head>3<head>
4<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">4<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
5<meta http-equiv="content-style-type" content="text/css">5<meta http-equiv="content-style-type" content="text/css">
6<link rel="stylesheet" type="text/css" href="style.css">6<link rel="stylesheet" type="text/css" href="style.css">
7<title>ProGuard Reference Card</title>7<title>ProGuard Reference Card</title>
8<script type="text/javascript" language="JavaScript">
9<!--
10if (window.self==window.top)
11 window.top.location.replace("../index.html#"+window.location.pathname+window.location.hash);
12else {
13 var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), "");
14 if (window.top.location.hash!=hash)
15 window.top.location.hash=hash;
16}
17//-->
18</script>
8</head>19</head>
9<body>20<body>
1021
@@ -52,7 +63,7 @@
52<tr>63<tr>
53<td valign="top"><a href="usage.html#outjars"><code><b>-outjars</b></code></a>64<td valign="top"><a href="usage.html#outjars"><code><b>-outjars</b></code></a>
54 <a href="usage.html#classpath"><i>class_path</i></a></td>65 <a href="usage.html#classpath"><i>class_path</i></a></td>
55<td>Specifies the name of the output jars (or wars, ears, zips, or66<td>Specifies the names of the output jars (or wars, ears, zips, or
56 directories).</td>67 directories).</td>
57</tr>68</tr>
5869
@@ -63,8 +74,13 @@
63</tr>74</tr>
6475
65<tr>76<tr>
77<td valign="top"><a href="usage.html#skipnonpubliclibraryclasses"><code><b>-skipnonpubliclibraryclasses</b></code></a></td>
78<td>Ignore non-public library classes.</td>
79</tr>
80
81<tr>
66<td valign="top"><a href="usage.html#dontskipnonpubliclibraryclasses"><code><b>-dontskipnonpubliclibraryclasses</b></code></a></td>82<td valign="top"><a href="usage.html#dontskipnonpubliclibraryclasses"><code><b>-dontskipnonpubliclibraryclasses</b></code></a></td>
67<td>Don't ignore non-public library classes.</td>83<td>Don't ignore non-public library classes (the default).</td>
68</tr>84</tr>
6985
70<tr>86<tr>
@@ -281,6 +297,11 @@
281</tr>297</tr>
282298
283<tr>299<tr>
300<td valign="top"><a href="usage.html#keepparameternames"><code><b>-keepparameternames</b></code></a></td>
301<td>Keep the parameter names and types of methods that are kept.</td>
302</tr>
303
304<tr>
284<td valign="top"><a href="usage.html#renamesourcefileattribute"><code><b>-renamesourcefileattribute</b></code></a>305<td valign="top"><a href="usage.html#renamesourcefileattribute"><code><b>-renamesourcefileattribute</b></code></a>
285 [<i>string</i>]</td>306 [<i>string</i>]</td>
286<td>Put the given constant string in the <code>SourceFile</code>307<td>Put the given constant string in the <code>SourceFile</code>
@@ -345,28 +366,28 @@
345<tr>366<tr>
346<td valign="top"><a href="usage.html#printconfiguration"><code><b>-printconfiguration</b></code></a>367<td valign="top"><a href="usage.html#printconfiguration"><code><b>-printconfiguration</b></code></a>
347 [<a href="usage.html#filename"><i>filename</i></a>]</td>368 [<a href="usage.html#filename"><i>filename</i></a>]</td>
369<td>Write out the entire configuration in traditional ProGuard style, to the
370 standard output or to the given file.</td>
371</tr>
372
373<tr>
374<td valign="top"><a href="usage.html#dump"><code><b>-dump</b></code></a>
375 [<a href="usage.html#filename"><i>filename</i></a>]</td>
348<td>Write out the internal structure of the processed class files, to the376<td>Write out the internal structure of the processed class files, to the
349 standard output or to the given file.</td>377 standard output or to the given file.</td>
350</tr>378</tr>
351379
352<tr>
353<td valign="top"><a href="usage.html#dump"><code><b>-dump</b></code></a>
354 [<a href="usage.html#filename"><i>filename</i></a>]</td>
355<td>Write out the entire configuration in traditional ProGuard style, to the
356 standard output or to the given file.</td>
357</tr>
358
359</table>380</table>
360<p>381<p>
361Notes:382Notes:
362<ul>383<ul>
363384
364<li><i>class_path</i> is a list of jars, wars, ears, zips, and directories,385<li><i>class_path</i> is a list of jars, wars, ears, zips, and directories,
365 with optional filters, separated by path separators.386 with optional filters, separated by path separators.</li>
366<li><i>filename</i> can contain Java system properties delimited by387<li><i>filename</i> can contain Java system properties delimited by
367 '<b>&lt;</b>' and '<b>&gt;</b>'.388 '<b>&lt;</b>' and '<b>&gt;</b>'.</li>
368<li>If <i>filename</i> contains special characters, the entire name389<li>If <i>filename</i> contains special characters, the entire name
369 should be quoted with single or double quotes.390 should be quoted with single or double quotes.</li>
370</ul>391</ul>
371<p>392<p>
372393
@@ -443,23 +464,23 @@
443Notes:464Notes:
444<ul>465<ul>
445<li>Class names must always be fully qualified, i.e. including their package466<li>Class names must always be fully qualified, i.e. including their package
446 names.467 names.</li>
447<li>Types in <i>classname</i>, <i>annotationtype</i>, <i>returntype</i>, and468<li>Types in <i>classname</i>, <i>annotationtype</i>, <i>returntype</i>, and
448 <i>argumenttype</i> can contain wildcards: '<code><b>?</b></code>' for a469 <i>argumenttype</i> can contain wildcards: '<code><b>?</b></code>' for a
449 single character, '<code><b>*</b></code>' for any number of characters470 single character, '<code><b>*</b></code>' for any number of characters
450 (but not the package separator), '<code><b>**</b></code>' for any number471 (but not the package separator), '<code><b>**</b></code>' for any number
451 of (any) characters, '<code><b>%</b></code>' for any primitive type,472 of (any) characters, '<code><b>%</b></code>' for any primitive type,
452 '<code><b>***</b></code>' for any type, and '<code><b>...</b></code>' for any number of arguments..473 '<code><b>***</b></code>' for any type, and '<code><b>...</b></code>' for any number of arguments.</li>
453<li><i>fieldname</i> and <i>methodname</i> can contain wildcards as well:474<li><i>fieldname</i> and <i>methodname</i> can contain wildcards as well:
454 '<code><b>?</b></code>' for a single character and '<code><b>*</b></code>'475 '<code><b>?</b></code>' for a single character and '<code><b>*</b></code>'
455 for any number of characters.476 for any number of characters.</li>
456</ul>477</ul>
457<p>
458478
459<hr>479<hr />
480<noscript><div><a target="_top" href="../index.html" class="button">Show menu</a></div></noscript>
460<address>481<address>
461Copyright &copy; 2002-2009482Copyright &copy; 2002-2012
462<a href="http://www.graphics.cornell.edu/~eric/">Eric Lafortune</a>.483<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>.
463</address>484</address>
464</body>485</body>
465</html>486</html>
466487
=== modified file 'docs/manual/retrace/examples.html'
--- docs/manual/retrace/examples.html 2009-10-09 16:17:49 +0000
+++ docs/manual/retrace/examples.html 2012-07-12 00:24:28 +0000
@@ -1,10 +1,21 @@
1<!doctype html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">1<!doctype html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2<html>2<html>
3<head>3<head>
4<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">4<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
5<meta http-equiv="content-style-type" content="text/css">5<meta http-equiv="content-style-type" content="text/css">
6<link rel="stylesheet" type="text/css" href="../style.css">6<link rel="stylesheet" type="text/css" href="../style.css">
7<title>ReTrace Examples</title>7<title>ReTrace Examples</title>
8<script type="text/javascript" language="JavaScript">
9<!--
10if (window.self==window.top)
11 window.top.location.replace("../../index.html#"+window.location.pathname+window.location.hash);
12else {
13 var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), "");
14 if (window.top.location.hash!=hash)
15 window.top.location.hash=hash;
16}
17//-->
18</script>
8</head>19</head>
9<body>20<body>
1021
@@ -12,13 +23,13 @@
1223
13Some typical example uses:24Some typical example uses:
14<ol>25<ol>
15<li><a href="#with">Restoring a stack trace with line numbers</a>26<li><a href="#with">Restoring a stack trace with line numbers</a></li>
16<li><a href="#withverbose">Restoring a stack trace with line numbers (verbose)</a>27<li><a href="#withverbose">Restoring a stack trace with line numbers
17<li><a href="#without">Restoring a stack trace without line numbers</a>28 (verbose)</a></li>
29<li><a href="#without">Restoring a stack trace without line numbers</a></li>
18</ol>30</ol>
1931
20<a name="with">&nbsp;</a>32<h3><a name="with">Restoring a stack trace with line numbers</a></h3>
21<h3>Restoring a stack trace with line numbers</h3>
2233
23Assume for instance ProGuard itself has been obfuscated using the following34Assume for instance ProGuard itself has been obfuscated using the following
24extra options:35extra options:
@@ -133,8 +144,7 @@
133 at proguard.ProGuard.main(ProGuard:429)144 at proguard.ProGuard.main(ProGuard:429)
134</pre>145</pre>
135146
136<a name="withverbose">&nbsp;</a>147<h3><a name="withverbose">Restoring a stack trace with line numbers (verbose)</a></h3>
137<h3>Restoring a stack trace with line numbers (verbose)</h3>
138148
139In the previous example, we could also use the verbose flag:149In the previous example, we could also use the verbose flag:
140<pre>150<pre>
@@ -189,8 +199,7 @@
189</pre>199</pre>
190200
191201
192<a name="without">&nbsp;</a>202<h3><a name="without">Restoring a stack trace without line numbers</a></h3>
193<h3>Restoring a stack trace without line numbers</h3>
194203
195Assume for instance ProGuard itself has been obfuscated using the following204Assume for instance ProGuard itself has been obfuscated using the following
196extra options, this time without preserving the line number tables:205extra options, this time without preserving the line number tables:
@@ -324,12 +333,12 @@
324 execute333 execute
325 at proguard.ProGuard.main(Unknown Source)334 at proguard.ProGuard.main(Unknown Source)
326</pre>335</pre>
327<p>
328336
329<hr>337<hr />
338<noscript><div><a target="_top" href="../../index.html" class="button">Show menu</a></div></noscript>
330<address>339<address>
331Copyright &copy; 2002-2009340Copyright &copy; 2002-2012
332<a href="http://www.graphics.cornell.edu/~eric/">Eric Lafortune</a>.341<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>.
333</address>342</address>
334</body>343</body>
335</html>344</html>
336345
=== modified file 'docs/manual/retrace/index.html'
--- docs/manual/retrace/index.html 2009-10-09 16:17:49 +0000
+++ docs/manual/retrace/index.html 2012-07-12 00:24:28 +0000
@@ -1,25 +1,37 @@
1<!doctype html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">1<!doctype html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2<html>2<html>
3<head>3<head>
4<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">4<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
5<meta http-equiv="content-style-type" content="text/css">5<meta http-equiv="content-style-type" content="text/css">
6<link rel="stylesheet" type="text/css" href="../style.css">6<link rel="stylesheet" type="text/css" href="../style.css">
7<title>ReTrace Manual</title>7<title>ReTrace Manual</title>
8<script type="text/javascript" language="JavaScript">
9<!--
10if (window.self==window.top)
11 window.top.location.replace("../../index.html#"+window.location.pathname+window.location.hash);
12else {
13 var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), "");
14 if (window.top.location.hash!=hash)
15 window.top.location.hash=hash;
16}
17//-->
18</script>
8</head>19</head>
9<body>20<body>
1021
11<h2>ReTrace</h2>22<h2>ReTrace</h2>
1223
13<ol>24<ol>
14<li><a href="introduction.html">Introduction</a>25<li><a href="introduction.html">Introduction</a></li>
15<li><a href="usage.html">Usage</a>26<li><a href="usage.html">Usage</a></li>
16<li><a href="examples.html">Examples</a>27<li><a href="examples.html">Examples</a></li>
17</ol>28</ol>
1829
19<hr>30<hr />
31<noscript><div><a target="_top" href="../../index.html" class="button">Show menu</a></div></noscript>
20<address>32<address>
21Copyright &copy; 2002-200933Copyright &copy; 2002-2012
22<a href="http://www.graphics.cornell.edu/~eric/">Eric Lafortune</a>.34<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>.
23</address>35</address>
24</body>36</body>
25</html>37</html>
2638
=== modified file 'docs/manual/retrace/introduction.html'
--- docs/manual/retrace/introduction.html 2009-10-09 16:17:49 +0000
+++ docs/manual/retrace/introduction.html 2012-07-12 00:24:28 +0000
@@ -1,10 +1,21 @@
1<!doctype html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">1<!doctype html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2<html>2<html>
3<head>3<head>
4<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">4<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
5<meta http-equiv="content-style-type" content="text/css">5<meta http-equiv="content-style-type" content="text/css">
6<link rel="stylesheet" type="text/css" href="../style.css">6<link rel="stylesheet" type="text/css" href="../style.css">
7<title>ReTrace Introduction</title>7<title>ReTrace Introduction</title>
8<script type="text/javascript" language="JavaScript">
9<!--
10if (window.self==window.top)
11 window.top.location.replace("../../index.html#"+window.location.pathname+window.location.hash);
12else {
13 var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), "");
14 if (window.top.location.hash!=hash)
15 window.top.location.hash=hash;
16}
17//-->
18</script>
8</head>19</head>
9<body>20<body>
1021
@@ -56,12 +67,12 @@
56look like without obfuscation. The restoration is based on the mapping file67look like without obfuscation. The restoration is based on the mapping file
57that ProGuard can write out during obfuscation. The mapping file links the68that ProGuard can write out during obfuscation. The mapping file links the
58original class names and class member names to their obfuscated names.69original class names and class member names to their obfuscated names.
59<p>
6070
61<hr>71<hr />
72<noscript><div><a target="_top" href="../../index.html" class="button">Show menu</a></div></noscript>
62<address>73<address>
63Copyright &copy; 2002-200974Copyright &copy; 2002-2012
64<a href="http://www.graphics.cornell.edu/~eric/">Eric Lafortune</a>.75<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>.
65</address>76</address>
66</body>77</body>
67</html>78</html>
6879
=== modified file 'docs/manual/retrace/usage.html'
--- docs/manual/retrace/usage.html 2009-10-09 16:17:49 +0000
+++ docs/manual/retrace/usage.html 2012-07-12 00:24:28 +0000
@@ -1,10 +1,21 @@
1<!doctype html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">1<!doctype html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2<html>2<html>
3<head>3<head>
4<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">4<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
5<meta http-equiv="content-style-type" content="text/css">5<meta http-equiv="content-style-type" content="text/css">
6<link rel="stylesheet" type="text/css" href="../style.css">6<link rel="stylesheet" type="text/css" href="../style.css">
7<title>ReTrace Usage</title>7<title>ReTrace Usage</title>
8<script type="text/javascript" language="JavaScript">
9<!--
10if (window.self==window.top)
11 window.top.location.replace("../../index.html#"+window.location.pathname+window.location.hash);
12else {
13 var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), "");
14 if (window.top.location.hash!=hash)
15 window.top.location.hash=hash;
16}
17//-->
18</script>
8</head>19</head>
9<body>20<body>
1021
@@ -17,7 +28,8 @@
17<code><b>java -jar retrace.jar </b></code>[<i>options...</i>]28<code><b>java -jar retrace.jar </b></code>[<i>options...</i>]
18 <i>mapping_file</i> [<i>stacktrace_file</i>]29 <i>mapping_file</i> [<i>stacktrace_file</i>]
19</p>30</p>
20These are the arguments:31Alternatively, the <code>bin</code> directory contains some short Linux and
32Windows scripts containing this command. These are the arguments:
2133
22<dl>34<dl>
23<dt><i>mapping_file</i></dt>35<dt><i>mapping_file</i></dt>
@@ -48,7 +60,7 @@
48 de-obfuscate more general types of input than just stack traces. The60 de-obfuscate more general types of input than just stack traces. The
49 default is suitable for stack traces produced by most JVMs:61 default is suitable for stack traces produced by most JVMs:
50 <pre>62 <pre>
51 (?:\s*%c:.*)|(?:\s*at\s+%c.%m\s*\(.*?(?::%l)?\)\s*)63 (?:.*?\bat\s+%c.%m\s*\(.*?(?::%l)?\)\s*)|(?:(?:.*?[:"]\s+)?%c(?::.*)?)
52 </pre>64 </pre>
53 The regular expression is a Java regular expression (cfr. the documentation65 The regular expression is a Java regular expression (cfr. the documentation
54 of <code>java.util.regex.Pattern</code>), with a few additional wildcards:66 of <code>java.util.regex.Pattern</code>), with a few additional wildcards:
@@ -87,14 +99,13 @@
8799
88<ul>100<ul>
89<li>If all line numbers have been preserved while obfuscating the application,101<li>If all line numbers have been preserved while obfuscating the application,
90 ReTrace will be able to restore the stack trace completely.102 ReTrace will be able to restore the stack trace completely.</li>
91 <p>
92103
93<li>If the line numbers have been removed, mapping obfuscated method names104<li>If the line numbers have been removed, mapping obfuscated method names
94 back to their original names has become ambiguous. Retrace will list all105 back to their original names has become ambiguous. Retrace will list all
95 possible original method names for each line in the stack trace. The user106 possible original method names for each line in the stack trace. The user
96 can then try to deduce the actual stack trace manually, based on the logic107 can then try to deduce the actual stack trace manually, based on the logic
97 of the program.108 of the program.</li>
98109
99</ul>110</ul>
100<p>111<p>
@@ -105,12 +116,12 @@
105116
106Unobfuscated elements and obfuscated elements for which no mapping is available117Unobfuscated elements and obfuscated elements for which no mapping is available
107will be left unchanged.118will be left unchanged.
108<p>
109119
110<hr>120<hr />
121<noscript><div><a target="_top" href="../../index.html" class="button">Show menu</a></div></noscript>
111<address>122<address>
112Copyright &copy; 2002-2009123Copyright &copy; 2002-2012
113<a href="http://www.graphics.cornell.edu/~eric/">Eric Lafortune</a>.124<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>.
114</address>125</address>
115</body>126</body>
116</html>127</html>
117128
=== modified file 'docs/manual/sections.html'
--- docs/manual/sections.html 2008-05-15 10:39:48 +0000
+++ docs/manual/sections.html 2012-07-12 00:24:28 +0000
@@ -1,4 +1,4 @@
1<!doctype html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">1<!doctype html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2<html>2<html>
3<head>3<head>
4<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">4<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
@@ -42,22 +42,18 @@
42document.write(document.location.hostname == "proguard.sourceforge.net" ?42document.write(document.location.hostname == "proguard.sourceforge.net" ?
43 "http://sourceforge.net/sflogo.php?group_id=54750&amp;type=1" :43 "http://sourceforge.net/sflogo.php?group_id=54750&amp;type=1" :
44 "../sflogo.png");44 "../sflogo.png");
45document.write("\" width=\"88\" height=\"31\" alt=\"SourceForge\">");45document.write("\" width=\"88\" height=\"31\" alt=\"SourceForge\" />");
46//-->46//-->
47</script>47</script>
48<noscript>48<noscript>
49<img src="../sflogo.png" width="88" height="31" alt="SourceForge">49<img src="../sflogo.png" width="88" height="31" alt="SourceForge" />
50</noscript>50</noscript>
5151
52</a>52</a>
5353
54<p>54<p>
55<a href="http://www.luciad.com/" target="other">55<a href="http://www.saikoa.com/" target="_top">
56<img src="../luciadlogo.png" width="88" height="24" alt="Luciad"></a>56<img src="../saikoalogo.png" width="88" height="19" alt="Saikoa" /></a>
57
58<p>
59<a href="http://www.javadocking.com/" target="other">
60<img src="../sanawarelogo.png" width="88" height="24" alt="Luciad"></a>
61</center>57</center>
6258
63</body>59</body>
6460
=== modified file 'docs/manual/style.css'
--- docs/manual/style.css 2009-10-09 16:17:49 +0000
+++ docs/manual/style.css 2012-07-12 00:24:28 +0000
@@ -2,20 +2,24 @@
22
3/* Global settings. */3/* Global settings. */
44
5body {5body
6{
6 background: #FFFFFF;7 background: #FFFFFF;
7}8}
89
9h1 {10h1
11{
10 text-align: center;12 text-align: center;
11}13}
1214
13h2 {15h2
16{
14 background: #EEEEFF;17 background: #EEEEFF;
15 padding: 10px;18 padding: 10px;
16}19}
1720
18dt {21dt
22{
19 padding: 6px;23 padding: 6px;
20}24}
2125
@@ -25,23 +29,50 @@
25 float: right;29 float: right;
26}30}
2731
28dd {32dd
33{
29 padding: 6px;34 padding: 6px;
30}35}
3136
32pre {37pre
38{
33 padding: 10px;39 padding: 10px;
34 background: #E0E0E0;40 background: #E0E0E0;
35}41}
3642
43.spacious li
44{
45 padding: 8px;
46}
47
48.shifted li
49{
50 margin-left: 50px;
51}
52
53img.float
54{
55 float: left;
56}
57
37a58a
38{59{
39 text-decoration: none;60 text-decoration: none;
40}61}
4162
63a.button
64{
65 color: #000000;
66 text-decoration: none;
67 background: #E0E0E0;
68 border: 1px outset #FFFFFF;
69 float: right;
70}
71
42/* Settings for variable width code. */72/* Settings for variable width code. */
4373
44p.code {74p.code
75{
45 padding: 10px;76 padding: 10px;
46 background: #E0E0E0;77 background: #E0E0E0;
47}78}
@@ -49,34 +80,39 @@
4980
50/* Settings for diagrams. */81/* Settings for diagrams. */
5182
52table.diagram {83table.diagram
84{
53 padding: 8px;85 padding: 8px;
54 border: none;86 border: none;
55 border-spacing: 2px;87 border-spacing: 2px;
56}88}
5789
58td.transparentblock {90td.transparentblock
91{
59 text-align: center;92 text-align: center;
60 padding: 10px 0px;93 padding: 10px 0px;
61}94}
6295
63td.whiteblock {96td.whiteblock
97{
64 width: 100px;98 width: 100px;
65 text-align: center;99 text-align: center;
66 border: solid #C0C0C0 1px;100 border: 1px solid #C0C0C0;
67 background: #E0E0E0;101 background: #E0E0E0;
68 padding: 10px 0px;102 padding: 10px 0px;
69}103}
70104
71td.lightblock {105td.lightblock
106{
72 width: 100px;107 width: 100px;
73 text-align: center;108 text-align: center;
74 border: solid #8888FF 1px;109 border: 1px solid #8888FF;
75 background: #BBBBFF;110 background: #BBBBFF;
76 padding: 20px 0px;111 padding: 20px 0px;
77}112}
78113
79td.darkblock {114td.darkblock
115{
80 width: 100px;116 width: 100px;
81 text-align: center;117 text-align: center;
82 background: #8888FF;118 background: #8888FF;
@@ -85,8 +121,9 @@
85121
86/* Settings for buttons. */122/* Settings for buttons. */
87123
88td.button {124td.button
125{
89 background: #E0E0E0;126 background: #E0E0E0;
The diff has been truncated for viewing.

Subscribers

People subscribed via source and target branches