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
1=== added directory '.pc'
2=== added file '.pc/.quilt_patches'
3--- .pc/.quilt_patches 1970-01-01 00:00:00 +0000
4+++ .pc/.quilt_patches 2012-07-12 00:24:28 +0000
5@@ -0,0 +1,1 @@
6+debian/patches
7
8=== added file '.pc/.quilt_series'
9--- .pc/.quilt_series 1970-01-01 00:00:00 +0000
10+++ .pc/.quilt_series 2012-07-12 00:24:28 +0000
11@@ -0,0 +1,1 @@
12+series
13
14=== added file '.pc/.version'
15--- .pc/.version 1970-01-01 00:00:00 +0000
16+++ .pc/.version 2012-07-12 00:24:28 +0000
17@@ -0,0 +1,1 @@
18+2
19
20=== modified file 'README'
21--- README 2009-10-09 16:17:49 +0000
22+++ README 2012-07-12 00:24:28 +0000
23@@ -30,4 +30,4 @@
24
25 http://proguard.sourceforge.net/
26
27-Copyright (c) 2002-2009 Eric Lafortune (eric@graphics.cornell.edu)
28+Copyright (c) 2002-2012 Eric Lafortune (eric@graphics.cornell.edu)
29
30=== modified file 'bin/proguard.bat'
31--- bin/proguard.bat 2009-05-20 08:21:13 +0000
32+++ bin/proguard.bat 2012-07-12 00:24:28 +0000
33@@ -2,9 +2,13 @@
34
35 REM Start-up script for ProGuard -- free class file shrinker, optimizer,
36 REM obfuscator, and preverifier for Java bytecode.
37+REM
38+REM Note: when passing file names containing spaces to this script,
39+REM you'll have to add escaped quotes around them, e.g.
40+REM "\"C:/My Directory/My File.txt\""
41
42 IF EXIST "%PROGUARD_HOME%" GOTO home
43 SET PROGUARD_HOME=..
44 :home
45
46-java -jar "%PROGUARD_HOME%"\lib\proguard.jar %1 %2 %3 %4 %5 %6 %7 %8 %9
47+java -jar "%PROGUARD_HOME%"\lib\proguard.jar %*
48
49=== modified file 'bin/proguard.sh'
50--- bin/proguard.sh 2009-05-20 08:21:13 +0000
51+++ bin/proguard.sh 2012-07-12 00:24:28 +0000
52@@ -2,8 +2,11 @@
53 #
54 # Start-up script for ProGuard -- free class file shrinker, optimizer,
55 # obfuscator, and preverifier for Java bytecode.
56+#
57+# Note: when passing file names containing spaces to this script,
58+# you'll have to add escaped quotes around them, e.g.
59+# "\"/My Directory/My File.txt\""
60
61-PROGUARD_HOME=`dirname "$0"`
62-PROGUARD_HOME=`dirname "$PROGUARD_HOME"`
63+PROGUARD_HOME=`dirname "$0"`/..
64
65 java -jar $PROGUARD_HOME/lib/proguard.jar "$@"
66
67=== modified file 'bin/proguardgui.bat'
68--- bin/proguardgui.bat 2009-05-20 08:21:13 +0000
69+++ bin/proguardgui.bat 2012-07-12 00:24:28 +0000
70@@ -2,9 +2,13 @@
71
72 REM Start-up script for the GUI of ProGuard -- free class file shrinker,
73 REM optimizer, obfuscator, and preverifier for Java bytecode.
74+REM
75+REM Note: when passing file names containing spaces to this script,
76+REM you'll have to add escaped quotes around them, e.g.
77+REM "\"C:/My Directory/My File.txt\""
78
79 IF EXIST "%PROGUARD_HOME%" GOTO home
80 SET PROGUARD_HOME=..
81 :home
82
83-java -jar "%PROGUARD_HOME%"\lib\proguardgui.jar %1 %2 %3 %4 %5 %6 %7 %8 %9
84+java -jar "%PROGUARD_HOME%"\lib\proguardgui.jar %*
85
86=== modified file 'bin/proguardgui.sh'
87--- bin/proguardgui.sh 2009-05-20 08:21:13 +0000
88+++ bin/proguardgui.sh 2012-07-12 00:24:28 +0000
89@@ -2,8 +2,14 @@
90 #
91 # Start-up script for the GUI of ProGuard -- free class file shrinker,
92 # optimizer, obfuscator, and preverifier for Java bytecode.
93-
94-PROGUARD_HOME=`dirname "$0"`
95-PROGUARD_HOME=`dirname "$PROGUARD_HOME"`
96-
97-java -jar $PROGUARD_HOME/lib/proguardgui.jar "$@"
98+#
99+# Note: when passing file names containing spaces to this script,
100+# you'll have to add escaped quotes around them, e.g.
101+# "\"/My Directory/My File.txt\""
102+
103+PROGUARD_HOME=`dirname "$0"`/..
104+
105+# On Linux, Java 1.6.0_24 and higher hang when starting the GUI:
106+# http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7027598
107+# We're using the -D option as a workaround.
108+java -DsuppressSwingDropSupport=true -jar $PROGUARD_HOME/lib/proguardgui.jar "$@"
109
110=== modified file 'bin/retrace.bat'
111--- bin/retrace.bat 2009-05-20 08:21:13 +0000
112+++ bin/retrace.bat 2012-07-12 00:24:28 +0000
113@@ -2,9 +2,13 @@
114
115 REM Start-up script for Retrace -- companion tool for ProGuard, free class file
116 REM shrinker, optimizer, obfuscator, and preverifier for Java bytecode.
117+REM
118+REM Note: when passing file names containing spaces to this script,
119+REM you'll have to add escaped quotes around them, e.g.
120+REM "\"C:/My Directory/My File.txt\""
121
122 IF EXIST "%PROGUARD_HOME%" GOTO home
123 SET PROGUARD_HOME=..
124 :home
125
126-java -jar "%PROGUARD_HOME%"\lib\retrace.jar %1 %2 %3 %4 %5 %6 %7 %8 %9
127+java -jar "%PROGUARD_HOME%"\lib\retrace.jar %*
128
129=== modified file 'bin/retrace.sh'
130--- bin/retrace.sh 2009-05-20 08:21:13 +0000
131+++ bin/retrace.sh 2012-07-12 00:24:28 +0000
132@@ -2,8 +2,11 @@
133 #
134 # Start-up script for Retrace -- companion tool for ProGuard, free class file
135 # shrinker, optimizer, obfuscator, and preverifier for Java bytecode.
136+#
137+# Note: when passing file names containing spaces to this script,
138+# you'll have to add escaped quotes around them, e.g.
139+# "\"/My Directory/My File.txt\""
140
141-PROGUARD_HOME=`dirname "$0"`
142-PROGUARD_HOME=`dirname "$PROGUARD_HOME"`
143+PROGUARD_HOME=`dirname "$0"`/..
144
145 java -jar $PROGUARD_HOME/lib/retrace.jar "$@"
146
147=== added file 'build/README'
148--- build/README 1970-01-01 00:00:00 +0000
149+++ build/README 2012-07-12 00:24:28 +0000
150@@ -0,0 +1,34 @@
151+ProGuard, Java class file shrinker, optimizer, obfuscator, and preverifier
152+==========================================================================
153+
154+This directory contains a number of alternative ways to build ProGuard:
155+
156+- build.sh : a shell script for GNU/Linux
157+- makefile : a makefile for GNU/Linux
158+- build.xml : an Ant build file for all platforms
159+
160+- As a final alternative, you can also easily compile the code from the
161+ command line:
162+
163+ mkdir classes
164+ javac -sourcepath src -d classes src/proguard/ProGuard.java
165+ javac -sourcepath src -d classes src/proguard/gui/ProGuardGUI.java
166+ javac -sourcepath src -d classes src/proguard/retrace/ReTrace.java
167+
168+ For the ProGuard Ant task:
169+
170+ javac -sourcepath src -d classes -classpath lib/ant.jar \
171+ src/proguard/ant/ProGuardTask.java
172+
173+ For the Java Micro Edition Wireless Tool Kit (JME WTK) obfuscator plug-in:
174+
175+ javac -sourcepath src -d classes -classpath wtklib/kenv.zip \
176+ src/proguard/wtk/ProGuardObfuscator.java
177+
178+Note that you'll have to install Ant and the JME WTK yourself.
179+
180+Enjoy!
181+
182+http://proguard.sourceforge.net/
183+
184+Copyright (c) 2002-2012 Eric Lafortune (eric@graphics.cornell.edu)
185
186=== modified file 'debian/changelog'
187--- debian/changelog 2009-11-30 10:29:57 +0000
188+++ debian/changelog 2012-07-12 00:24:28 +0000
189@@ -1,3 +1,13 @@
190+proguard (4.8-0ubuntu1) quantal; urgency=low
191+
192+ * New upstream release. Necessary to fix FTBFS on
193+ mobile-atlas-creator package. (LP: #888982)
194+ * debian/control: Added build-essential to Build Depends.
195+ * debian/pathes/debian-changes-4.8: create proguard and
196+ proguardgui shell scripts.
197+
198+ -- Sebastian Carneiro <scarneiro@fibertel.com.ar> Wed, 11 Jul 2012 20:52:33 -0300
199+
200 proguard (4.4-2) unstable; urgency=low
201
202 * update to source format 3.0 (quilt)
203
204=== modified file 'debian/control'
205--- debian/control 2009-10-09 16:17:49 +0000
206+++ debian/control 2012-07-12 00:24:28 +0000
207@@ -1,8 +1,9 @@
208 Source: proguard
209 Section: devel
210 Priority: optional
211-Maintainer: Sam Clegg <samo@debian.org>
212-Build-Depends: debhelper (>= 7.0.15), cdbs, default-jdk, ant
213+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
214+XSBC-Original-Maintainer: Sam Clegg <samo@debian.org>
215+Build-Depends: debhelper (>= 7.0.15), cdbs, default-jdk, ant, build-essential
216 Standards-Version: 3.8.3
217
218 Package: proguard
219
220=== removed file 'debian/patches/debian-changes-4.4-2'
221--- debian/patches/debian-changes-4.4-2 2009-11-30 10:29:57 +0000
222+++ debian/patches/debian-changes-4.4-2 1970-01-01 00:00:00 +0000
223@@ -1,36 +0,0 @@
224-Description: Upstream changes introduced in version 4.4-2
225- This patch has been created by dpkg-source during the package build.
226- Here's the last changelog entry, hopefully it gives details on why
227- those changes were made:
228- .
229- proguard (4.4-2) unstable; urgency=low
230- .
231- * update to source format 3.0 (quilt)
232- .
233- The person named in the Author field signed this changelog entry.
234-Author: Sam Clegg <samo@debian.org>
235-
236----
237-The information above should follow the Patch Tagging Guidelines, please
238-checkout http://dep.debian.net/deps/dep3/ to learn about the format. Here
239-are templates for supplementary fields that you might want to add:
240-
241-Origin: <vendor|upstream|other>, <url of original patch>
242-Bug: <url in upstream bugtracker>
243-Bug-Debian: http://bugs.debian.org/<bugnumber>
244-Forwarded: <no|not-needed|url proving that it has been forwarded>
245-Reviewed-By: <name and email of someone who approved the patch>
246-Last-Update: <YYYY-MM-DD>
247-
248---- /dev/null
249-+++ proguard-4.4/proguard
250-@@ -0,0 +1,3 @@
251-+#!/bin/sh
252-+
253-+exec java -Xss300000 -jar /usr/share/java/proguard.jar "$@"
254---- /dev/null
255-+++ proguard-4.4/proguardgui
256-@@ -0,0 +1,3 @@
257-+#!/bin/sh
258-+
259-+exec java -Xss300000 -cp /usr/share/java/proguard.jar:/usr/share/java/proguardgui.jar proguard.gui.ProGuardGUI "$@"
260
261=== added file 'debian/patches/debian-changes-4.8'
262--- debian/patches/debian-changes-4.8 1970-01-01 00:00:00 +0000
263+++ debian/patches/debian-changes-4.8 2012-07-12 00:24:28 +0000
264@@ -0,0 +1,20 @@
265+Description: Creates proguard and proguardgui shell scripts
266+ This patch adds proguard and proguardgui shell scripts for starting up
267+ proguard.
268+ .
269+Bug-Ubuntu: https://launchpad.net/bugs/888982
270+Forwarded: not-needed
271+Last-Update: 2012-11-07
272+
273+--- /dev/null
274++++ proguard-4.8/proguard
275+@@ -0,0 +1,3 @@
276++#!/bin/sh
277++
278++exec java -Xss300000 -jar /usr/share/java/proguard.jar "$@"
279+--- /dev/null
280++++ proguard-4.8/proguardgui
281+@@ -0,0 +1,3 @@
282++#!/bin/sh
283++
284++exec java -Xss300000 -cp /usr/share/java/proguard.jar:/usr/share/java/proguardgui.jar proguard.gui.ProGuardGUI "$@"
285
286=== modified file 'debian/patches/series'
287--- debian/patches/series 2009-11-30 10:29:57 +0000
288+++ debian/patches/series 2012-07-12 00:24:28 +0000
289@@ -1,1 +1,1 @@
290-debian-changes-4.4-2
291+debian-changes-4.8
292
293=== modified file 'docs/FAQ.html'
294--- docs/FAQ.html 2009-10-09 16:17:49 +0000
295+++ docs/FAQ.html 2012-07-12 00:24:28 +0000
296@@ -1,10 +1,21 @@
297-<!doctype html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
298+<!doctype html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
299 <html>
300 <head>
301 <meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
302 <meta http-equiv="content-style-type" content="text/css">
303 <link rel="stylesheet" type="text/css" href="style.css">
304 <title>ProGuard FAQ</title>
305+<script type="text/javascript" language="JavaScript">
306+<!--
307+if (window.self==window.top)
308+ window.top.location.replace("index.html#"+window.location.pathname+window.location.hash);
309+else {
310+ var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), "");
311+ if (window.top.location.hash!=hash)
312+ window.top.location.hash=hash;
313+}
314+//-->
315+</script>
316 </head>
317 <body>
318
319@@ -13,35 +24,37 @@
320 <h3>Contents</h3>
321
322 <ol>
323-<li><a href="#shrinking">What is shrinking?</a>
324-<li><a href="#obfuscation">What is obfuscation?</a>
325-<li><a href="#preverification">What is preverification?</a>
326+<li><a href="#shrinking">What is shrinking?</a></li>
327+<li><a href="#obfuscation">What is obfuscation?</a></li>
328+<li><a href="#preverification">What is preverification?</a></li>
329 <li><a href="#optimization">What kind of optimizations does <b>ProGuard</b>
330- support?</a>
331+ support?</a></li>
332 <li><a href="#commercial">Can I use <b>ProGuard</b> to process my commercial
333- application?</a>
334+ application?</a></li>
335 <li><a href="#jdk1.4">Does <b>ProGuard</b> work with Java 2? Java 5? Java
336- 6?</a>
337-<li><a href="#jme">Does <b>ProGuard</b> work with Java Micro Edition?</a>
338-<li><a href="#android">Does <b>ProGuard</b> work for Google Android code?</a>
339-<li><a href="#blackberry">Does <b>ProGuard</b> work for Blackberry code?</a>
340-<li><a href="#ant">Does <b>ProGuard</b> have support for Ant?</a>
341-<li><a href="#gui">Does <b>ProGuard</b> come with a GUI?</a>
342+ 6?</a></li>
343+<li><a href="#jme">Does <b>ProGuard</b> work with Java Micro Edition?</a></li>
344+<li><a href="#android">Does <b>ProGuard</b> work for Google Android
345+ code?</a></li>
346+<li><a href="#blackberry">Does <b>ProGuard</b> work for Blackberry
347+ code?</a></li>
348+<li><a href="#ant">Does <b>ProGuard</b> have support for Ant?</a></li>
349+<li><a href="#gui">Does <b>ProGuard</b> come with a GUI?</a></li>
350 <li><a href="#forname">Does <b>ProGuard</b> handle <code>Class.forName</code>
351- calls?</a>
352-<li><a href="#resource">Does <b>ProGuard</b> handle resource files?</a>
353-<li><a href="#encrypt">Does <b>ProGuard</b> encrypt strings constants?</a>
354-<li><a href="#flow">Does <b>ProGuard</b> perform control flow obfuscation?</a>
355+ calls?</a></li>
356+<li><a href="#resource">Does <b>ProGuard</b> handle resource files?</a></li>
357+<li><a href="#encrypt">Does <b>ProGuard</b> encrypt string constants?</a></li>
358+<li><a href="#flow">Does <b>ProGuard</b> perform control flow
359+ obfuscation?</a></li>
360 <li><a href="#incremental">Does <b>ProGuard</b> support incremental
361- obfuscation?</a>
362+ obfuscation?</a></li>
363 <li><a href="#keywords">Can <b>ProGuard</b> obfuscate using reserved
364- keywords?</a>
365+ keywords?</a></li>
366 <li><a href="#stacktrace">Can <b>ProGuard</b> reconstruct obfuscated stack
367- traces?</a>
368+ traces?</a></li>
369 </ol>
370
371-<a name="shrinking">&nbsp;</a>
372-<h3>What is shrinking?</h3>
373+<h3><a name="shrinking">What is shrinking?</a></h3>
374
375 Java source code (.java files) is typically compiled to bytecode (.class
376 files). Bytecode is more compact than Java source code, but it may still
377@@ -50,8 +63,7 @@
378 unused classes, fields, and methods. The program remains functionally
379 equivalent, including the information given in exception stack traces.
380
381-<a name="obfuscation">&nbsp;</a>
382-<h3>What is obfuscation?</h3>
383+<h3><a name="obfuscation">What is obfuscation?</a></h3>
384
385 By default, compiled bytecode still contains a lot of debugging information:
386 source file names, line numbers, field names, method names, argument names,
387@@ -63,8 +75,7 @@
388 bonus. The program remains functionally equivalent, except for the class
389 names, method names, and line numbers given in exception stack traces.
390
391-<a name="preverification">&nbsp;</a>
392-<h3>What is preverification?</h3>
393+<h3><a name="preverification">What is preverification?</a></h3>
394
395 When loading class files, the class loader performs some sophisticated
396 verification of the byte code. This analysis makes sure the code can't
397@@ -77,8 +88,7 @@
398 perform the preverification step too, for instance allowing to retarget older
399 class files at Java 6.
400
401-<a name="optimization">&nbsp;</a>
402-<h3>What kind of optimizations does <b>ProGuard</b> support?</h3>
403+<h3><a name="optimization">What kind of optimizations does <b>ProGuard</b> support?</a></h3>
404
405 Apart from removing unused classes, fields, and methods in the shrinking step,
406 <b>ProGuard</b> can also perform optimizations at the bytecode level, inside
407@@ -87,24 +97,24 @@
408 and liveness analysis, <b>ProGuard</b> can:
409
410 <ul>
411-<li>Evaluate constant expressions.
412-<li>Remove unnecessary field accesses and method calls.
413-<li>Remove unnecessary branches.
414-<li>Remove unnecessary comparisons and instanceof tests.
415-<li>Remove unused code blocks.
416-<li>Merge identical code blocks.
417-<li>Reduce variable allocation.
418-<li>Remove write-only fields and unused method parameters.
419-<li>Inline constant fields, method parameters, and return values.
420-<li>Inline methods that are short or only called once.
421-<li>Simplify tail recursion calls.
422-<li>Merge classes and interfaces.
423-<li>Make methods private, static, and final when possible.
424-<li>Make classes static and final when possible.
425-<li>Replace interfaces that have single implementations.
426+<li>Evaluate constant expressions.</li>
427+<li>Remove unnecessary field accesses and method calls.</li>
428+<li>Remove unnecessary branches.</li>
429+<li>Remove unnecessary comparisons and instanceof tests.</li>
430+<li>Remove unused code blocks.</li>
431+<li>Merge identical code blocks.</li>
432+<li>Reduce variable allocation.</li>
433+<li>Remove write-only fields and unused method parameters.</li>
434+<li>Inline constant fields, method parameters, and return values.</li>
435+<li>Inline methods that are short or only called once.</li>
436+<li>Simplify tail recursion calls.</li>
437+<li>Merge classes and interfaces.</li>
438+<li>Make methods private, static, and final when possible.</li>
439+<li>Make classes static and final when possible.</li>
440+<li>Replace interfaces that have single implementations.</li>
441 <li>Perform over 200 peephole optimizations, like replacing ...*2 by
442- ...&lt;&lt;1.
443-<li>Optionally remove logging code.
444+ ...&lt;&lt;1.</li>
445+<li>Optionally remove logging code.</li>
446 </ul>
447 The positive effects of these optimizations will depend on your code and on
448 the virtual machine on which the code is executed. Simple virtual machines may
449@@ -113,27 +123,28 @@
450 <p>
451 Some notable optimizations that aren't supported yet:
452 <ul>
453-<li>Moving constant expressions out of loops.
454-<li>Optimizations that require escape analysis.
455+<li>Moving constant expressions out of loops.</li>
456+<li>Optimizations that require escape analysis
457+ (<a href="http://www.saikoa.com/dexguard" target="_top">DexGuard</a>
458+ does).</li>
459 </ul>
460
461-<a name="commercial">&nbsp;</a>
462-<h3>Can I use <b>ProGuard</b> to process my commercial application?</h3>
463+<h3><a name="commercial">Can I use <b>ProGuard</b> to process my commercial application?</a></h3>
464
465 Yes, you can. <b>ProGuard</b> itself is distributed under the GPL, but this
466 doesn't affect the programs that you process. Your code remains yours, and
467 its license can remain the same.
468
469-<a name="jdk1.4">&nbsp;</a>
470-<h3>Does <b>ProGuard</b> work with Java 2? Java 5? Java 6?</h3>
471+<h3><a name="jdk1.4">Does <b>ProGuard</b> work with Java 2? Java 5? Java 6? Java 7?</a></h3>
472
473-Yes, <b>ProGuard</b> supports all JDKs from 1.1 up to and including 6.0. Java 2
474+Yes, <b>ProGuard</b> supports all JDKs from 1.1 up to and including 7.0. Java 2
475 introduced some small differences in the class file format. Java 5 added
476-attributes for generics and for annotations. Java 6 introduced preverification
477-attributes. <b>ProGuard</b> handles all versions correctly.
478+attributes for generics and for annotations. Java 6 introduced optional
479+preverification attributes. Java 7 made preverification obligatory and
480+introduced support for dynamic languages. <b>ProGuard</b> handles all versions
481+correctly.
482
483-<a name="jme">&nbsp;</a>
484-<h3>Does <b>ProGuard</b> work with Java Micro Edition?</h3>
485+<h3><a name="jme">Does <b>ProGuard</b> work with Java Micro Edition?</a></h3>
486
487 Yes. <b>ProGuard</b> itself runs in Java Standard Edition, but you can freely
488 specify the run-time environment at which your programs are targeted,
489@@ -144,16 +155,14 @@
490 <b>ProGuard</b> also comes with an obfuscator plug-in for the JME Wireless
491 Toolkit.
492
493-<a name="android">&nbsp;</a>
494-<h3>Does <b>ProGuard</b> work for Google Android code?</h3>
495+<h3><a name="android">Does <b>ProGuard</b> work for Google Android code?</a></h3>
496
497 Yes. Google's <code>dx</code> compiler converts ordinary jar files into files
498 that run on Android devices. By preprocessing the original jar files,
499 <b>ProGuard</b> can significantly reduce the file sizes and boost the run-time
500 performance of the code.
501
502-<a name="blackberry">&nbsp;</a>
503-<h3>Does <b>ProGuard</b> work for Blackberry code?</h3>
504+<h3><a name="blackberry">Does <b>ProGuard</b> work for Blackberry code?</a></h3>
505
506 It should. RIM's proprietary <code>rapc</code> compiler converts ordinary JME
507 jar files into cod files that run on Blackberry devices. The compiler performs
508@@ -163,24 +172,21 @@
509 bugs. It sometimes fails on obfuscated code that is valid and accepted by other
510 JME tools and VMs. Your mileage may therefore vary.
511
512-<a name="ant">&nbsp;</a>
513-<h3>Does <b>ProGuard</b> have support for Ant?</h3>
514+<h3><a name="ant">Does <b>ProGuard</b> have support for Ant?</a></h3>
515
516 Yes. <b>ProGuard</b> provides an Ant task, so that it integrates seamlessly
517 into your Ant build processes. You can still use configurations in
518 <b>ProGuard</b>'s own readable format. Alternatively, if you prefer XML, you
519 can specify the equivalent XML configuration.
520
521-<a name="gui">&nbsp;</a>
522-<h3>Does <b>ProGuard</b> come with a GUI?</h3>
523+<h3><a name="gui">Does <b>ProGuard</b> come with a GUI?</a></h3>
524
525 Yes. First of all, <b>ProGuard</b> is perfectly usable as a command-line tool
526 that can easily be integrated into any automatic build process. For casual
527 users, there's also a graphical user interface that simplifies creating,
528 loading, editing, executing, and saving ProGuard configurations.
529
530-<a name="forname">&nbsp;</a>
531-<h3>Does <b>ProGuard</b> handle <code>Class.forName</code> calls?</h3>
532+<h3><a name="forname">Does <b>ProGuard</b> handle <code>Class.forName</code> calls?</a></h3>
533
534 Yes. <b>ProGuard</b> automatically handles constructs like
535 <code>Class.forName("SomeClass")</code> and <code>SomeClass.class</code>. The
536@@ -195,22 +201,23 @@
537 implementations may need to be preserved. The user can adapt his configuration
538 accordingly.
539
540-<a name="resource">&nbsp;</a>
541-<h3>Does <b>ProGuard</b> handle resource files?</h3>
542+<h3><a name="resource">Does <b>ProGuard</b> handle resource files?</a></h3>
543
544 Yes. <b>ProGuard</b> copies all non-class resource files, optionally adapting
545 their names and their contents to the obfuscation that has been applied.
546
547-<a name="encrypt">&nbsp;</a>
548-<h3>Does <b>ProGuard</b> encrypt strings constants?</h3>
549-
550-No. Storing encrypted string constants in program code is fairly futile, since
551-the encryption has to be perfectly reversible by definition. Moreover, the
552-decryption costs additional memory and computation at run-time. If this feature
553-is ever incorporated, I'll provide a tool to decrypt the strings as well.
554-
555-<a name="flow">&nbsp;</a>
556-<h3>Does <b>ProGuard</b> perform flow obfuscation?</h3>
557+<h3><a name="encrypt">Does <b>ProGuard</b> encrypt string constants?</a></h3>
558+
559+No. String encryption in program code has to be perfectly reversible by
560+definition, so it only improves the obfuscation level. It increases the
561+footprint of the code. However, by popular demand, ProGuard's sibling for
562+Android <a href="http://www.saikoa.com/dexguard"
563+target="_top"><b>DexGuard</b></a> does support string encryption, along with
564+class encryption and hiding of access to sensitive APIs. <b>DexGuard</b> is
565+distributed by <a href="http://www.saikoa.com/" target="_top">Saikoa</a> and
566+is not open source.
567+
568+<h3><a name="flow">Does <b>ProGuard</b> perform flow obfuscation?</a></h3>
569
570 Not explicitly. Control flow obfuscation injects additional branches into the
571 bytecode, in an attempt to fool decompilers. <b>ProGuard</b> does not do this,
572@@ -218,15 +225,13 @@
573 optimization step often already restructures the code to the point where most
574 decompilers get confused.
575
576-<a name="incremental">&nbsp;</a>
577-<h3>Does <b>ProGuard</b> support incremental obfuscation?</h3>
578+<h3><a name="incremental">Does <b>ProGuard</b> support incremental obfuscation?</a></h3>
579
580 Yes. This feature allows you to specify a previous obfuscation mapping file in
581 a new obfuscation step, in order to produce add-ons or patches for obfuscated
582 code.
583
584-<a name="keywords">&nbsp;</a>
585-<h3>Can <b>ProGuard</b> obfuscate using reserved keywords?</h3>
586+<h3><a name="keywords">Can <b>ProGuard</b> obfuscate using reserved keywords?</a></h3>
587
588 Yes. You can specify your own obfuscation dictionary, such as a list of
589 reserved key words, identifiers with foreign characters, random source files,
590@@ -234,8 +239,7 @@
591 Decent decompilers can automatically replace reserved keywords, and the effect
592 can be undone fairly easily, by obfuscating again with simpler names.
593
594-<a name="stacktrace">&nbsp;</a>
595-<h3>Can <b>ProGuard</b> reconstruct obfuscated stack traces?</h3>
596+<h3><a name="stacktrace">Can <b>ProGuard</b> reconstruct obfuscated stack traces?</a></h3>
597
598 Yes. <b>ProGuard</b> comes with a companion tool, <b>ReTrace</b>, that can
599 'de-obfuscate' stack traces produced by obfuscated applications. The
600@@ -245,10 +249,11 @@
601 reverse mapping. Please refer to the <a href="manual/index.html">ProGuard User
602 Manual</a> for more details.
603
604-<hr>
605+<hr />
606+<noscript><div><a target="_top" href="index.html" class="button">Show menu</a></div></noscript>
607 <address>
608-Copyright &copy; 2002-2009
609-<a href="http://www.graphics.cornell.edu/~eric/">Eric Lafortune</a>.
610+Copyright &copy; 2002-2012
611+<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>.
612 </address>
613 </body>
614 </html>
615
616=== modified file 'docs/GPL_exception.html'
617--- docs/GPL_exception.html 2009-10-09 16:17:49 +0000
618+++ docs/GPL_exception.html 2012-07-12 00:24:28 +0000
619@@ -7,7 +7,7 @@
620 <H1>Special Exception to the GNU General Public License</H1>
621
622 <P>
623-Copyright &copy; 2002-2009 Eric Lafortune
624+Copyright &copy; 2002-2012 Eric Lafortune
625 </P>
626
627 <P>
628@@ -33,13 +33,17 @@
629 In addition, as a special exception, Eric Lafortune gives permission to link
630 the code of this program with the following stand-alone applications:
631 <ul>
632-<li>Apache Ant,
633-<li>Apache Maven,
634-<li>the Eclipse ProGuardDT GUI,
635-<li>the EclipseME JME IDE,
636-<li>the Sun NetBeans Java IDE,
637-<li>the Sun JME Wireless Toolkit, and
638-<li>the Javaground Tools,
639+<li>Apache Ant,</li>
640+<li>Apache Maven,</li>
641+<li>the Google Android SDK,</li>
642+<li>the Eclipse ProGuardDT GUI,</li>
643+<li>the EclipseME JME IDE,</li>
644+<li>the Oracle NetBeans Java IDE,</li>
645+<li>the Oracle JME Wireless Toolkit,</li>
646+<li>the Simple Build Tool for Scala (and its scripts),</li>
647+<li>the NeoMAD Tools by Neomades,</li>
648+<li>the Javaground Tools, and</li>
649+<li>the Sanaware Tools,</li>
650 </ul>
651 and distribute linked combinations including the two. You must obey the GNU
652 General Public License in all respects for all of the code used other than
653
654=== modified file 'docs/acknowledgements.html'
655--- docs/acknowledgements.html 2009-10-09 16:17:49 +0000
656+++ docs/acknowledgements.html 2012-07-12 00:24:28 +0000
657@@ -1,10 +1,21 @@
658-<!doctype html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
659+<!doctype html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
660 <html>
661 <head>
662 <meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
663 <meta http-equiv="content-style-type" content="text/css">
664 <link rel="stylesheet" type="text/css" href="style.css">
665 <title>ProGuard Acknowledgements</title>
666+<script type="text/javascript" language="JavaScript">
667+<!--
668+if (window.self==window.top)
669+ window.top.location.replace("index.html#"+window.location.pathname+window.location.hash);
670+else {
671+ var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), "");
672+ if (window.top.location.hash!=hash)
673+ window.top.location.hash=hash;
674+}
675+//-->
676+</script>
677 </head>
678 <body>
679
680@@ -12,7 +23,7 @@
681
682 The first versions of <b>ProGuard</b> grew out of <b>RetroGuard</b>, which its
683 author Mark Welsh kindly made available under the GNU Lesser General Public
684-License. <b>RetroGuard</b> is a very nice piece of code, but it only performed
685+License. RetroGuard is a very nice piece of code, but it only performed
686 obfuscation. I started from the class file parsing code and wrote my own
687 shrinker, optimizer, obfuscator, and preverifier. As of version 4.0, all of the
688 original code has been rewritten, so the most obvious remaining similarity are
689@@ -33,35 +44,34 @@
690 Daniel Sj&ouml;blom, Jan Filipsky, Charles Smith, Gerrit Telkamp, Noel
691 Grandin, Torbj&ouml;rn S&ouml;derstedt, Clemens Eisserer, Clark Bassett,
692 Eduard Welch, Dawid Weiss, Andrew Wilson, Sean Owen, Niels Gron, Ishan Mehta,
693-Steven Adams, Xavier Kral,
694+Steven Adams, Xavier Kral, Stefan Martin, Toby Reyelts,
695 and many others. Thanks! Your feedback has been invaluable.
696 <p>
697
698-I am developing ProGuard in my spare time, which is possible thanks to my
699-day-time job at <a href="http://www.luciad.com/" target="other">Luciad</a>.
700+<a href="http://www.saikoa.com/" target="_top">Saikoa</a> is providing the
701+financial resources for this project. At Saikoa, we're also developing
702+ProGuard's sibling for Android,
703+<a href="http://www.saikoa.com/dexguard" target="_top">DexGuard</a>.
704 <p>
705
706 <a href="http://sourceforge.net/projects/proguard/"
707-target="other">SourceForge</a> is generously providing the resources for
708-hosting this project and many other projects.
709-<p>
710-
711-JetBrains is kindly providing a license for its IntelliJ IDEA development
712-environment.
713-<p>
714-
715-The code and these web pages were written using Sun's JDKs, Linux, IntelliJ
716-IDEA, GNU emacs, bash, sed, awk, and a whole host of other tools that continue
717-to make programming interesting.
718-<p>
719-
720-And finally, I'm a great fan of the <a
721+target="other">SourceForge</a> is providing the resources for hosting this
722+project and many other projects.
723+<p>
724+
725+The code and these web pages were written using Oracle/Sun's JDKs, Linux,
726+IntelliJ IDEA, GNU emacs, bash, sed, awk, and a whole host of other tools that
727+continue to make programming interesting.
728+<p>
729+
730+And finally, I'm a great fan of Sanaware's <a
731 href="http://www.javadocking.com/" target="other">Java Docking Library</a>.
732
733-<hr>
734+<hr />
735+<noscript><div><a target="_top" href="index.html" class="button">Show menu</a></div></noscript>
736 <address>
737-Copyright &copy; 2002-2009
738-<a href="http://www.graphics.cornell.edu/~eric/">Eric Lafortune</a>.
739+Copyright &copy; 2002-2012
740+<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>.
741 </address>
742
743 </body>
744
745=== modified file 'docs/alternatives.html'
746--- docs/alternatives.html 2009-10-09 16:17:49 +0000
747+++ docs/alternatives.html 2012-07-12 00:24:28 +0000
748@@ -1,10 +1,21 @@
749-<!doctype html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
750+<!doctype html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
751 <html>
752 <head>
753 <meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
754 <meta http-equiv="content-style-type" content="text/css">
755 <link rel="stylesheet" type="text/css" href="style.css">
756 <title>ProGuard Alternatives</title>
757+<script type="text/javascript" language="JavaScript">
758+<!--
759+if (window.self==window.top)
760+ window.top.location.replace("index.html#"+window.location.pathname+window.location.hash);
761+else {
762+ var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), "");
763+ if (window.top.location.hash!=hash)
764+ window.top.location.hash=hash;
765+}
766+//-->
767+</script>
768 </head>
769 <body>
770
771@@ -34,612 +45,682 @@
772 </tr>
773
774 <tr>
775-<td><a target="other" href="http://www.graphics.cornell.edu/~eric/">Eric Lafortune</a></td>
776+<td><a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a></td>
777 <td><a target="_top" href="http://proguard.sourceforge.net/">ProGuard</a></td>
778-<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
779-<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
780-<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
781-<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
782+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
783+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
784+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
785+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
786 <td>Free (GPL)</td>
787 </tr>
788
789 <tr>
790 <td><a target="other" rel="nofollow" href="http://www.informatik.uni-oldenburg.de/leute/hoenicke.html">Jochen Hoenicke</a></td>
791 <td><a target="other" href="http://jode.sourceforge.net/">Jode</a></td>
792-<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
793-<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
794-<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
795-<td align="center"><br></td>
796+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
797+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
798+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
799+<td align="center"><br /></td>
800 <td>Free (GPL)</td>
801 </tr>
802
803 <tr>
804-<td><a target="other" rel="nofollow" href="http://www.nq4.de/">NQ4</a></td>
805-<td><a target="other" href="http://www.nq4.de/">Joga</a></td>
806-<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
807-<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
808-<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
809-<td align="center"><br></td>
810-<td>Free (no source)</td>
811-</tr>
812-
813-<tr>
814 <td><a target="other" rel="nofollow" href="http://www.cs.cornell.edu/nystrom/">Nate Nystrom</a></td>
815 <td><a target="other" href="http://www.cs.purdue.edu/homes/hosking/bloat/">Bloat</a></td>
816-<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
817-<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
818-<td align="center"><br></td>
819-<td align="center"><br></td>
820+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
821+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
822+<td align="center"><br /></td>
823+<td align="center"><br /></td>
824 <td>Free</td>
825 </tr>
826
827 <tr>
828 <td><a target="other" rel="nofollow" href="http://sourceforge.net/users/hchacha/">Hidetoshi Ohuchi</a></td>
829 <td><a target="other" href="http://jarg.sourceforge.net/">Jarg</a></td>
830-<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
831-<td align="center"><br></td>
832-<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
833-<td align="center"><br></td>
834+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
835+<td align="center"><br /></td>
836+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
837+<td align="center"><br /></td>
838 <td>Free (BSD)</td>
839 </tr>
840
841 <tr>
842-<td><a target="other" rel="nofollow" href="http://www.geocities.com/CapeCanaveral/Hall/2334/resume.html">Alexander Shvets</a></td>
843-<td><a target="other" href="http://www.geocities.com/CapeCanaveral/Hall/2334/Programs/cafebabe.html">CafeBabe</a></td>
844-<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
845-<td align="center"><br></td>
846-<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
847-<td align="center"><br></td>
848-<td>Free</td>
849-</tr>
850-
851-<tr>
852 <td><a target="other" rel="nofollow" href="http://www.yworks.com/">yWorks</a></td>
853 <td><a target="other" href="http://www.yworks.com/en/products_yguard_about.htm">yGuard</a></td>
854-<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
855-<td align="center"><br></td>
856-<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
857-<td align="center"><br></td>
858+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
859+<td align="center"><br /></td>
860+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
861+<td align="center"><br /></td>
862 <td>Free (no source)</td>
863 </tr>
864
865 <tr>
866-<td><a target="other" rel="nofollow" href="http://www.cs.purdue.edu/homes/grothoff/">Christian Grothoff</a></td>
867-<td><a target="other" href="http://www.ovmj.org/jamit/">Jamit</a></td>
868-<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
869-<td align="center"><br></td>
870-<td align="center"><br></td>
871-<td align="center"><br></td>
872-<td>Free (GPL)</td>
873-</tr>
874-
875-<tr>
876 <td><a target="other" rel="nofollow" href="http://mojo.codehaus.org/">Mojo</a></td>
877 <td><a target="other" href="http://mojo.codehaus.org/minijar-maven-plugin/">Minijar</a></td>
878-<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
879-<td align="center"><br></td>
880-<td align="center"><br></td>
881-<td align="center"><br></td>
882+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
883+<td align="center"><br /></td>
884+<td align="center"><br /></td>
885+<td align="center"><br /></td>
886 <td>Free (Apache)</td>
887 </tr>
888
889 <tr>
890 <td><a target="other" rel="nofollow" href="http://www.riggshill.com/">RiggsHill Software</a></td>
891 <td><a target="other" href="http://genjar.sourceforge.net/">GenJar</a></td>
892-<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
893-<td align="center"><br></td>
894-<td align="center"><br></td>
895-<td align="center"><br></td>
896+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
897+<td align="center"><br /></td>
898+<td align="center"><br /></td>
899+<td align="center"><br /></td>
900 <td>Free (Apache)</td>
901 </tr>
902
903 <tr>
904 <td><a target="other" rel="nofollow" href="http://ant.apache.org/">Apache</a></td>
905-<td><a target="other" href="http://ant.apache.org/manual/OptionalTypes/classfileset.html">Ant Classfileset</a></td>
906-<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
907-<td align="center"><br></td>
908-<td align="center"><br></td>
909-<td align="center"><br></td>
910-<td>Free (Apache)</td>
911+<td><a target="other" href="http://ant.apache.org/manual/Types/classfileset.html">Ant Classfileset</a></td>
912+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
913+<td align="center"><br /></td>
914+<td align="center"><br /></td>
915+<td align="center"><br /></td>
916+<td>Free (Apache)</td>
917+</tr>
918+
919+<tr>
920+<td><a target="other" rel="nofollow" href="http://www.celton.mobi/">Carsten Elton S&oslash;rensen</a></td>
921+<td><a target="other" href="http://code.google.com/p/treeshaker/">Treeshaker</a></td>
922+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
923+<td align="center"><br /></td>
924+<td align="center"><br /></td>
925+<td align="center"><br /></td>
926+<td>Free (Apache)</td>
927+</tr>
928+
929+<tr>
930+<td><a target="other" rel="nofollow" href="http://www.ucdetector.org/">J&ouml;rg Spieler</a></td>
931+<td><a target="other" href="http://www.ucdetector.org/">UCDetector</a></td>
932+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
933+<td align="center"><br /></td>
934+<td align="center"><br /></td>
935+<td align="center"><br /></td>
936+<td>Free (EPL)</td>
937 </tr>
938
939 <tr>
940 <td><a target="other" rel="nofollow" href="http://www.curious-creature.org/">Romain Guy</a></td>
941 <td><a target="other" href="http://www.jroller.com/gfx/entry/get_what_you_need_from">Harvester</a></td>
942-<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
943-<td align="center"><br></td>
944-<td align="center"><br></td>
945-<td align="center"><br></td>
946+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
947+<td align="center"><br /></td>
948+<td align="center"><br /></td>
949+<td align="center"><br /></td>
950 <td>Free (BSD)</td>
951 </tr>
952
953 <tr>
954-<td><a target="other" rel="nofollow" href="https://dcd.dev.java.net/">Emeric Vernat</a></td>
955-<td><a target="other" href="https://dcd.dev.java.net/">DCD</a></td>
956-<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
957-<td align="center"><br></td>
958-<td align="center"><br></td>
959-<td align="center"><br></td>
960+<td><a target="other" rel="nofollow" href="http://java.net/projects/dcd/">Emeric Vernat</a></td>
961+<td><a target="other" href="http://java.net/projects/dcd/">DCD</a></td>
962+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
963+<td align="center"><br /></td>
964+<td align="center"><br /></td>
965+<td align="center"><br /></td>
966 <td>Free (LGPL)</td>
967 </tr>
968
969 <tr>
970 <td><a target="other" rel="nofollow" href="http://sadun-util.sourceforge.net/">Cristiano Sadun</a></td>
971 <td><a target="other" href="http://sadun-util.sourceforge.net/pack.html">Pack</a></td>
972-<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
973-<td align="center"><br></td>
974-<td align="center"><br></td>
975-<td align="center"><br></td>
976-<td>Free (LGPL)</td>
977-</tr>
978-
979-<tr>
980-<td><a target="other" rel="nofollow" href="http://darcs.brianweb.net/">Brian Alliet</a></td>
981-<td><a target="other" href="http://darcs.brianweb.net/gcclass/">Gcclass</a></td>
982-<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
983-<td align="center"><br></td>
984-<td align="center"><br></td>
985-<td align="center"><br></td>
986+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
987+<td align="center"><br /></td>
988+<td align="center"><br /></td>
989+<td align="center"><br /></td>
990 <td>Free (LGPL)</td>
991 </tr>
992
993 <tr>
994 <td><a target="other" rel="nofollow" href="http://www.sable.mcgill.ca/">Sable</a></td>
995 <td><a target="other" href="http://www.sable.mcgill.ca/soot/">Soot</a></td>
996-<td align="center"><br></td>
997-<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
998-<td align="center"><br></td>
999-<td align="center"><br></td>
1000+<td align="center"><br /></td>
1001+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
1002+<td align="center"><br /></td>
1003+<td align="center"><br /></td>
1004 <td>Free (LGPL)</td>
1005 </tr>
1006
1007 <tr>
1008 <td><a target="other" rel="nofollow" href="http://www.garret.ru/~knizhnik/">Konstantin Knizhnik</a></td>
1009 <td><a target="other" href="http://www.garret.ru/~knizhnik/javago/ReadMe.htm">JavaGO</a></td>
1010-<td align="center"><br></td>
1011-<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
1012-<td align="center"><br></td>
1013-<td align="center"><br></td>
1014-<td>Free</td>
1015-</tr>
1016-
1017-<tr>
1018-<td><a target="other" rel="nofollow" href="http://donquixote.cafebabe.jp/">Haruaki Tamada</a></td>
1019-<td><a target="other" href="http://donquixote.cafebabe.jp/">DonQuixote</a></td>
1020-<td align="center"><br></td>
1021-<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
1022-<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
1023-<td align="center"><br></td>
1024+<td align="center"><br /></td>
1025+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
1026+<td align="center"><br /></td>
1027+<td align="center"><br /></td>
1028 <td>Free</td>
1029 </tr>
1030
1031 <tr>
1032 <td><a target="other" rel="nofollow" href="http://www.sable.mcgill.ca/">Sable</a></td>
1033 <td><a target="other" href="http://www.sable.mcgill.ca/JBCO/">JBCO</a></td>
1034-<td align="center"><br></td>
1035-<td align="center"><br></td>
1036-<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
1037-<td align="center"><br></td>
1038+<td align="center"><br /></td>
1039+<td align="center"><br /></td>
1040+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
1041+<td align="center"><br /></td>
1042 <td>Free (LGPL)</td>
1043 </tr>
1044
1045 <tr>
1046+<td><a target="other" rel="nofollow" href="http://classencrypt.sourceforge.net/">Jeffrey Wheaton</a></td>
1047+<td><a target="other" href="http://classencrypt.sourceforge.net/">ClassEncrypt</a></td>
1048+<td align="center"><br /></td>
1049+<td align="center"><br /></td>
1050+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
1051+<td align="center"><br /></td>
1052+<td>Free (GPL)</td>
1053+</tr>
1054+
1055+<tr>
1056 <td><a target="other" rel="nofollow" href="http://sourceforge.net/users/glurk/">Thorsten Heit</a></td>
1057 <td><a target="other" href="http://sourceforge.net/projects/javaguard/">JavaGuard</a></td>
1058-<td align="center"><br></td>
1059-<td align="center"><br></td>
1060-<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
1061-<td align="center"><br></td>
1062+<td align="center"><br /></td>
1063+<td align="center"><br /></td>
1064+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
1065+<td align="center"><br /></td>
1066 <td>Free (LGPL)</td>
1067 </tr>
1068
1069 <tr>
1070 <td><a target="other" rel="nofollow" href="http://mwobfu.sourceforge.net/">Patrick Mueller</a></td>
1071 <td><a target="other" href="http://mwobfu.sourceforge.net/">Mwobfu</a></td>
1072-<td align="center"><br></td>
1073-<td align="center"><br></td>
1074-<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
1075-<td align="center"><br></td>
1076+<td align="center"><br /></td>
1077+<td align="center"><br /></td>
1078+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
1079+<td align="center"><br /></td>
1080 <td>Free (GPL)</td>
1081 </tr>
1082
1083 <tr>
1084-<td><a target="other" rel="nofollow" href="http://www.elegant-software.com/">Elegant Software</a></td>
1085-<td><a target="other" href="http://www.elegant-software.com/software/jmangle/">JMangle</a></td>
1086-<td align="center"><br></td>
1087-<td align="center"><br></td>
1088-<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
1089-<td align="center"><br></td>
1090-<td>Free</td>
1091-</tr>
1092-
1093-<tr>
1094 <td><a target="other" rel="nofollow" href="http://www.bebbosoft.de/">BebboSoft</a></td>
1095-<td><a target="other" href="http://www.bebbosoft.de/index.html#java/mug/index.html">Bb_mug</a></td>
1096-<td align="center"><br></td>
1097-<td align="center"><br></td>
1098-<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
1099-<td align="center"><br></td>
1100-<td>Free (no source)</td>
1101-</tr>
1102-
1103-<tr>
1104-<td><a target="other" rel="nofollow" href="http://www.drjava.de/">Dr. Java</a></td>
1105-<td><a target="other" href="http://www.drjava.de/obfuscator/">Marvin Obfuscator</a></td>
1106-<td align="center"><br></td>
1107-<td align="center"><br></td>
1108-<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
1109-<td align="center"><br></td>
1110-<td>Free (no source)</td>
1111-</tr>
1112-
1113-<tr>
1114-<td><a target="other" rel="nofollow" href="http://www.ibm.com/">IBM</a></td>
1115-<td><a target="other" href="http://www-306.ibm.com/software/wireless/wsdd/">WSDD</a></td>
1116-<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
1117-<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
1118-<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
1119-<td align="center"><br></td>
1120+<td><a target="other" href="http://www.bebbosoft.de/#java/mug/index.wiki">Bb_mug</a></td>
1121+<td align="center"><br /></td>
1122+<td align="center"><br /></td>
1123+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
1124+<td align="center"><br /></td>
1125+<td>Free (no source)</td>
1126+</tr>
1127+
1128+<tr>
1129+<td><a target="other" rel="nofollow" href="http://github.com/v6ak">V&iacute;t &Scaron;est&aacute;k</a></td>
1130+<td><a target="other" href="http://github.com/v6ak/Preverifier/">Preverifier</a></td>
1131+<td align="center"><br /></td>
1132+<td align="center"><br /></td>
1133+<td align="center"><br /></td>
1134+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
1135+<td>Free (EPL)</td>
1136+</tr>
1137+
1138+<tr>
1139+<td><a target="_top" href="http://www.saikoa.com/">Saikoa</a></td>
1140+<td><a target="_top" href="http://www.saikoa.com/dexguard">DexGuard</a></td>
1141+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
1142+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
1143+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
1144+<td align="center"><br /></td>
1145 <td>Commercial</td>
1146 </tr>
1147
1148 <tr>
1149 <td><a target="other" rel="nofollow" href="http://www.preemptive.com/">PreEmptive</a></td>
1150 <td><a target="other" href="http://www.preemptive.com/products/dasho/index.html">DashOPro</a></td>
1151-<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
1152-<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
1153-<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
1154-<td align="center"><br></td>
1155+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
1156+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
1157+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
1158+<td align="center"><br /></td>
1159 <td>Commercial</td>
1160 </tr>
1161
1162 <tr>
1163 <td><a target="other" rel="nofollow" href="http://www.zelix.com/">Zelix</a></td>
1164 <td><a target="other" href="http://www.zelix.com/klassmaster/index.html">KlassMaster</a></td>
1165-<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
1166-<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
1167-<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
1168-<td align="center"><br></td>
1169-<td>Commercial</td>
1170-</tr>
1171-
1172-<tr>
1173-<td><a target="other" rel="nofollow" href="http://www.s5systems.com/">S5 Systems</a></td>
1174-<td><a target="other" href="http://www.s5systems.com/jPresto.htm">jPresto</a></td>
1175-<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
1176-<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
1177-<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
1178-<td align="center"><br></td>
1179+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
1180+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
1181+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
1182+<td align="center"><br /></td>
1183 <td>Commercial</td>
1184 </tr>
1185
1186 <tr>
1187 <td><a target="other" rel="nofollow" href="http://www.s-cradle.com/english/index.html">Sophia Cradle</a></td>
1188 <td><a target="other" href="http://www.s-cradle.com/english/products/sophiacompress_java/index.html">SophiaCompress</a></td>
1189-<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
1190-<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
1191-<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
1192-<td align="center"><br></td>
1193-<td>Commercial</td>
1194-</tr>
1195-
1196-<tr>
1197-<td><a target="other" rel="nofollow" href="http://www.retrologic.com/">RetroLogic</a></td>
1198-<td><a target="other" href="http://www.retrologic.com/">RetroGuard</a></td>
1199-<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
1200-<td align="center"><br></td>
1201-<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
1202-<td align="center"><br></td>
1203-<td>Commercial</td>
1204-</tr>
1205-
1206-<tr>
1207-<td><a target="other" rel="nofollow" href="http://www.codingart.com/">CodingArt</a></td>
1208-<td><a target="other" href="http://www.codingart.com/codeshield.html">CodeShield</a></td>
1209-<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
1210-<td align="center"><br></td>
1211-<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
1212-<td align="center"><br></td>
1213+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
1214+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
1215+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
1216+<td align="center"><br /></td>
1217 <td>Commercial</td>
1218 </tr>
1219
1220 <tr>
1221 <td><a target="other" rel="nofollow" href="http://www.e-t.com/">Eastridge Technology</a></td>
1222 <td><a target="other" href="http://www.e-t.com/jshrink.html">Jshrink</a></td>
1223-<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
1224-<td align="center"><br></td>
1225-<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
1226-<td align="center"><br></td>
1227-<td>Commercial</td>
1228-</tr>
1229-
1230-<tr>
1231-<td><a target="other" rel="nofollow" href="http://www.helseth.com/">Helseth</a></td>
1232-<td><a target="other" href="http://www.helseth.com/HJO.htm">JObfuscator</a></td>
1233-<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
1234-<td align="center"><br></td>
1235-<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
1236-<td align="center"><br></td>
1237+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
1238+<td align="center"><br /></td>
1239+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
1240+<td align="center"><br /></td>
1241 <td>Commercial</td>
1242 </tr>
1243
1244 <tr>
1245 <td><a target="other" rel="nofollow" href="http://www.leesw.com/">LeeSoftware</a></td>
1246 <td><a target="other" href="http://www.leesw.com/">Smokescreen Obfuscator</a></td>
1247-<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
1248-<td align="center"><br></td>
1249-<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
1250-<td align="center"><br></td>
1251-<td>Commercial</td>
1252-</tr>
1253-
1254-<tr>
1255-<td><a target="other" rel="nofollow" href="http://www.vegatech.com/">Vega Technologies</a></td>
1256-<td><a target="other" href="http://www.vegatech.com/jzipper/">JZipper</a></td>
1257-<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
1258-<td align="center"><br></td>
1259-<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
1260-<td align="center"><br></td>
1261+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
1262+<td align="center"><br /></td>
1263+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
1264+<td align="center"><br /></td>
1265 <td>Commercial</td>
1266 </tr>
1267
1268 <tr>
1269 <td><a target="other" rel="nofollow" href="http://www.innaworks.com/">Innaworks</a></td>
1270-<td><a target="other" href="http://www.innaworks.com/">mBooster</a></td>
1271-<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
1272-<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
1273-<td align="center"><br></td>
1274-<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
1275+<td><a target="other" href="http://www.innaworks.com/mBooster">mBooster</a></td>
1276+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
1277+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
1278+<td align="center"><br /></td>
1279+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
1280 <td>Commercial</td>
1281 </tr>
1282
1283 <tr>
1284 <td><a target="other" rel="nofollow" href="http://www.uni-vologda.ac.ru/~c3c/">Sergey Sverdlov</a></td>
1285 <td><a target="other" href="http://www.uni-vologda.ac.ru/~c3c/jco/">J.Class Optimizer</a></td>
1286-<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
1287-<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
1288-<td align="center"><br></td>
1289-<td align="center"><br></td>
1290+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
1291+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
1292+<td align="center"><br /></td>
1293+<td align="center"><br /></td>
1294 <td>Commercial</td>
1295 </tr>
1296
1297 <tr>
1298 <td><a target="other" rel="nofollow" href="http://www.smardec.com/">Smardec</a></td>
1299-<td><a target="other" href="//www.allatori.com/">Allatori</a></td>
1300-<td align="center"><br></td>
1301-<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
1302-<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
1303-<td align="center"><br></td>
1304+<td><a target="other" href="http://www.allatori.com/">Allatori</a></td>
1305+<td align="center"><br /></td>
1306+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
1307+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
1308+<td align="center"><br /></td>
1309 <td>Commercial</td>
1310 </tr>
1311
1312 <tr>
1313 <td><a target="other" rel="nofollow" href="http://cs.arizona.edu/">U. of Arizona</a></td>
1314 <td><a target="other" href="http://sandmark.cs.arizona.edu/">SandMark</a></td>
1315-<td align="center"><br></td>
1316-<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
1317-<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
1318-<td align="center"><br></td>
1319+<td align="center"><br /></td>
1320+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
1321+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
1322+<td align="center"><br /></td>
1323+<td>Commercial</td>
1324+</tr>
1325+
1326+<tr>
1327+<td><a target="other" rel="nofollow" href="http://zenofx.com/">Zenofx</a></td>
1328+<td><a target="other" href="http://zenofx.com/classguard/">ClassGuard</a></td>
1329+<td align="center"><br /></td>
1330+<td align="center"><br /></td>
1331+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
1332+<td align="center"><br /></td>
1333+<td>Commercial</td>
1334+</tr>
1335+
1336+<tr>
1337+<td><a target="other" rel="nofollow" href="http://www.bisguard.com/">BIS Guard &amp; Co.</a></td>
1338+<td><a target="other" href="http://www.bisguard.com/java.html">Java Antidecompiler</a></td>
1339+<td align="center"><br /></td>
1340+<td align="center"><br /></td>
1341+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
1342+<td align="center"><br /></td>
1343 <td>Commercial</td>
1344 </tr>
1345
1346 <tr>
1347 <td><a target="other" rel="nofollow" href="http://www.force5.com/">Force 5</a></td>
1348-<td><a target="other" href="http://www.force5.com/">JCloak</a></td>
1349-<td align="center"><br></td>
1350-<td align="center"><br></td>
1351-<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
1352-<td align="center"><br></td>
1353+<td><a target="other" href="http://www.force5.com/JCloak/ProductJCloak.html">JCloak</a></td>
1354+<td align="center"><br /></td>
1355+<td align="center"><br /></td>
1356+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
1357+<td align="center"><br /></td>
1358 <td>Commercial</td>
1359 </tr>
1360
1361 <tr>
1362 <td><a target="other" rel="nofollow" href="http://www.semdesigns.com/">Semantic Designs</a></td>
1363 <td><a target="other" href="http://www.semdesigns.com/Products/Obfuscators/JavaObfuscator.html">Obfuscator</a></td>
1364-<td align="center"><br></td>
1365-<td align="center"><br></td>
1366-<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
1367-<td align="center"><br></td>
1368+<td align="center"><br /></td>
1369+<td align="center"><br /></td>
1370+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
1371+<td align="center"><br /></td>
1372 <td>Commercial</td>
1373 </tr>
1374
1375 <tr>
1376 <td><a target="other" rel="nofollow" href="http://www.duckware.com/">Duckware</a></td>
1377 <td><a target="other" href="http://www.duckware.com/jobfuscate/">Jobfuscate</a></td>
1378-<td align="center"><br></td>
1379-<td align="center"><br></td>
1380-<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
1381-<td align="center"><br></td>
1382-<td>Commercial</td>
1383-</tr>
1384-
1385-<tr>
1386-<td><a target="other" rel="nofollow" href="http://www.jproof.com/">JProof</a></td>
1387-<td><a target="other" href="http://www.jproof.com/">JProof</a></td>
1388-<td align="center"><br></td>
1389-<td align="center"><br></td>
1390-<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
1391-<td align="center"><br></td>
1392-<td>Commercial</td>
1393-</tr>
1394-
1395-<tr>
1396-<td><a target="other" rel="nofollow" href="http://www.solutia.ro/">GITS</a></td>
1397-<td><a target="other" href="http://www.solutia.ro/pages/javadc/">Blurfuscator</a></td>
1398-<td align="center"><br></td>
1399-<td align="center"><br></td>
1400-<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
1401-<td align="center"><br></td>
1402-<td>Commercial</td>
1403-</tr>
1404-
1405-<tr>
1406-<td><a target="other" rel="nofollow" href="http://www.chainkey.com/">ChainKey</a></td>
1407-<td><a target="other" href="http://www.chainkey.com/en/jcp/">Java Code Protector</a></td>
1408-<td align="center"><br></td>
1409-<td align="center"><br></td>
1410-<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
1411-<td align="center"><br></td>
1412-<td>Commercial</td>
1413-</tr>
1414-
1415-<tr>
1416-<td><a target="other" rel="nofollow" href="http://sourceforge.net/projects/flmobf/">Alain Moran</a></td>
1417-<td><a target="other" href="http://sourceforge.net/projects/flmobf/">flmObf</a></td>
1418-<td align="center"><br></td>
1419-<td align="center"><br></td>
1420-<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
1421-<td align="center"><br></td>
1422-<td>Free (BSD)</td>
1423+<td align="center"><br /></td>
1424+<td align="center"><br /></td>
1425+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
1426+<td align="center"><br /></td>
1427+<td>Commercial</td>
1428+</tr>
1429+
1430+<tr>
1431+<td><a target="other" rel="nofollow" href="http://www.arxan.com/">Arxan</a></td>
1432+<td><a target="other" href="http://www.arxan.com/software-protection-products/java-GuardIt/index.php">GuardIT</a></td>
1433+<td align="center"><br /></td>
1434+<td align="center"><br /></td>
1435+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
1436+<td align="center"><br /></td>
1437+<td>Commercial</td>
1438 </tr>
1439
1440 <tr>
1441 <td><a target="other" rel="nofollow" href="http://www.chez.com/vasile/">Vasile Calmatui</a></td>
1442 <td><a target="other" href="http://www.chez.com/vasile/obfu/VasObfuLite.html">VasObfuLite</a></td>
1443-<td align="center"><br></td>
1444-<td align="center"><br></td>
1445-<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
1446-<td align="center"><br></td>
1447+<td align="center"><br /></td>
1448+<td align="center"><br /></td>
1449+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
1450+<td align="center"><br /></td>
1451 <td>Free</td>
1452 </tr>
1453
1454 <tr class="disappeared">
1455 <td><a target="other" rel="nofollow" href="http://www.alphaworks.ibm.com/">IBM AlphaWorks</a></td>
1456 <td><a target="other" href="http://www.research.ibm.com/jax/">JAX</a></td>
1457-<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
1458-<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
1459-<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
1460-<td align="center"><br></td>
1461+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
1462+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
1463+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
1464+<td align="center"><br /></td>
1465 <td>(discontinued)</td>
1466 </tr>
1467
1468 <tr class="disappeared">
1469+<td><a target="other" rel="nofollow" href="http://www.nq4.de/">NQ4</a></td>
1470+<td><a target="other" rel="nofollow" href="http://www.nq4.de/">Joga</a></td>
1471+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
1472+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
1473+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
1474+<td align="center"><br /></td>
1475+<td>(discontinued?)</td>
1476+</tr>
1477+
1478+<tr class="disappeared">
1479 <td><a target="other" rel="nofollow" href="http://www-i2.informatik.rwth-aachen.de/~markusj/">Markus Jansen</a></td>
1480 <td><a target="other" rel="nofollow" href="http://www-i2.informatik.rwth-aachen.de/~markusj/jopt/">Jopt</a></td>
1481-<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
1482-<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
1483-<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
1484-<td align="center"><br></td>
1485+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
1486+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
1487+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
1488+<td align="center"><br /></td>
1489+<td>(disappeared?)</td>
1490+</tr>
1491+
1492+<tr class="disappeared">
1493+<td><a target="other" rel="nofollow" href="http://www.geocities.com/CapeCanaveral/Hall/2334/resume.html">Alexander Shvets</a></td>
1494+<td><a target="other" rel="nofollow" href="http://www.geocities.com/CapeCanaveral/Hall/2334/Programs/cafebabe.html">CafeBabe</a></td>
1495+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
1496+<td align="center"><br /></td>
1497+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
1498+<td align="center"><br /></td>
1499+<td>(disappeared?)</td>
1500+</tr>
1501+
1502+<tr class="disappeared">
1503+<td><a target="other" rel="nofollow" href="http://darcs.brianweb.net/">Brian Alliet</a></td>
1504+<td><a target="other" rel="nofollow" href="http://darcs.brianweb.net/gcclass/">Gcclass</a></td>
1505+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
1506+<td align="center"><br /></td>
1507+<td align="center"><br /></td>
1508+<td align="center"><br /></td>
1509+<td>(disappeared?)</td>
1510+</tr>
1511+
1512+<tr class="disappeared">
1513+<td><a target="other" rel="nofollow" href="http://www.cs.purdue.edu/homes/grothoff/">Christian Grothoff</a></td>
1514+<td><a target="other" rel="nofollow" href="http://www.ovmj.org/jamit/">Jamit</a></td>
1515+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
1516+<td align="center"><br /></td>
1517+<td align="center"><br /></td>
1518+<td align="center"><br /></td>
1519+<td>(disappeared?)</td>
1520+</tr>
1521+
1522+<tr class="disappeared">
1523+<td><a target="other" rel="nofollow" href="http://donquixote.cafebabe.jp/">Haruaki Tamada</a></td>
1524+<td><a target="other" rel="nofollow" href="http://donquixote.cafebabe.jp/">DonQuixote</a></td>
1525+<td align="center"><br /></td>
1526+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
1527+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
1528+<td align="center"><br /></td>
1529+<td>(disappeared?)</td>
1530+</tr>
1531+
1532+<tr class="disappeared">
1533+<td><a target="other" rel="nofollow" href="http://www.utdallas.edu/~gxz014000/">Bajie</a></td>
1534+<td><a target="other" rel="nofollow" href="http://www.utdallas.edu/~gxz014000/jcmp/">JCMP</a></td>
1535+<td align="center"><br /></td>
1536+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
1537+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
1538+<td align="center"><br /></td>
1539+<td>(disappeared?)</td>
1540+</tr>
1541+
1542+<tr class="disappeared">
1543+<td><a target="other" rel="nofollow" href="http://www.elegant-software.com/">Elegant Software</a></td>
1544+<td><a target="other" rel="nofollow" href="http://www.elegant-software.com/software/jmangle/">JMangle</a></td>
1545+<td align="center"><br /></td>
1546+<td align="center"><br /></td>
1547+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
1548+<td align="center"><br /></td>
1549 <td>(disappeared?)</td>
1550 </tr>
1551
1552 <tr class="disappeared">
1553 <td><a target="other" rel="nofollow" href="http://www.primenet.com/~ej">Eron Jokipii</a></td>
1554 <td><a target="other" rel="nofollow" href="http://www.primenet.com/~ej">Jobe</a></td>
1555-<td align="center"><br></td>
1556-<td align="center"><br></td>
1557-<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
1558-<td align="center"><br></td>
1559+<td align="center"><br /></td>
1560+<td align="center"><br /></td>
1561+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
1562+<td align="center"><br /></td>
1563 <td>(disappeared?)</td>
1564 </tr>
1565
1566 <tr class="disappeared">
1567 <td><a target="other" rel="nofollow" href="http://jrc.krdl.org.sg/">JRC</a></td>
1568 <td><a target="other" rel="nofollow" href="http://jrc.krdl.org.sg/decaf/">DeCaf</a></td>
1569-<td align="center"><br></td>
1570-<td align="center"><br></td>
1571-<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
1572-<td align="center"><br></td>
1573-<td>(disappeared?)</td>
1574-</tr>
1575-
1576-<tr class="disappeared">
1577-<td><a target="other" rel="nofollow" href="http://www.utdallas.edu/~gxz014000/">Bajie</a></td>
1578-<td><a target="other" rel="nofollow" href="http://www.utdallas.edu/~gxz014000/jcmp/">JCMP</a></td>
1579-<td align="center"><br></td>
1580-<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
1581-<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
1582-<td align="center"><br></td>
1583-<td>(disappeared?)</td>
1584+<td align="center"><br /></td>
1585+<td align="center"><br /></td>
1586+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
1587+<td align="center"><br /></td>
1588+<td>(disappeared?)</td>
1589+</tr>
1590+
1591+<tr class="disappeared">
1592+<td><a target="other" rel="nofollow" href="http://www.drjava.de/">Dr. Java</a></td>
1593+<td><a target="other" rel="nofollow" href="http://www.drjava.de/obfuscator/">Marvin Obfuscator</a></td>
1594+<td align="center"><br /></td>
1595+<td align="center"><br /></td>
1596+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
1597+<td align="center"><br /></td>
1598+<td>(disappeared?)</td>
1599+</tr>
1600+
1601+<tr class="disappeared">
1602+<td><a target="other" rel="nofollow" href="http://www.ibm.com/">IBM</a></td>
1603+<td><a target="other" rel="nofollow" href="http://www-306.ibm.com/software/wireless/wsdd/">WSDD</a></td>
1604+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
1605+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
1606+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
1607+<td align="center"><br /></td>
1608+<td>Commercial (discontinued?)</td>
1609+</tr>
1610+
1611+<tr class="disappeared">
1612+<td><a target="other" rel="nofollow" href="http://www.s5systems.com/">S5 Systems</a></td>
1613+<td><a target="other" rel="nofollow" href="http://www.s5systems.com/jPresto.htm">jPresto</a></td>
1614+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
1615+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
1616+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
1617+<td align="center"><br /></td>
1618+<td>Commercial (discontinued?)</td>
1619 </tr>
1620
1621 <tr class="disappeared">
1622 <td><a target="other" rel="nofollow" href="http://www.plumbdesign.com/">Plumb Design</a></td>
1623 <td><a target="other" rel="nofollow" href="http://www.condensity.com/">Condensity</a></td>
1624-<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
1625-<td align="center"><br></td>
1626-<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
1627-<td align="center"><br></td>
1628+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
1629+<td align="center"><br /></td>
1630+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
1631+<td align="center"><br /></td>
1632 <td>Commercial (discontinued)</td>
1633 </tr>
1634
1635 <tr class="disappeared">
1636 <td><a target="other" rel="nofollow" href="http://www.4thpass.com/">4th Pass</a></td>
1637 <td><a target="other" rel="nofollow" href="http://www.4thpass.com/">SourceGuard</a></td>
1638-<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
1639-<td align="center"><br></td>
1640-<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
1641-<td align="center"><br></td>
1642+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
1643+<td align="center"><br /></td>
1644+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
1645+<td align="center"><br /></td>
1646+<td>Commercial (discontinued?)</td>
1647+</tr>
1648+
1649+<tr class="disappeared">
1650+<td><a target="other" rel="nofollow" href="http://www.codingart.com/">CodingArt</a></td>
1651+<td><a target="other" rel="nofollow" href="http://www.codingart.com/codeshield.html">CodeShield</a></td>
1652+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
1653+<td align="center"><br /></td>
1654+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
1655+<td align="center"><br /></td>
1656 <td>Commercial (discontinued?)</td>
1657 </tr>
1658
1659 <tr class="disappeared">
1660 <td><a target="other" rel="nofollow" href="http://www.software4j.com/">Software4j</a></td>
1661 <td><a target="other" rel="nofollow" href="http://www.software4j.com/obfuscate4j/">Obfuscate4j</a></td>
1662-<td align="center"><br></td>
1663-<td align="center"><br></td>
1664-<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
1665-<td align="center"><br></td>
1666+<td align="center"><br /></td>
1667+<td align="center"><br /></td>
1668+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
1669+<td align="center"><br /></td>
1670 <td>Commercial (discontinued?)</td>
1671 </tr>
1672
1673 <tr class="disappeared">
1674 <td><a target="other" rel="nofollow" href="http://www.jammconsulting.com/">JAMM Consulting</a></td>
1675 <td><a target="other" rel="nofollow" href="http://www.jammconsulting.com/jamm/servlet/com.jammconsulting.servlet.JAMMServlet?pageId=ObfuscateProPage">ObfuscatePro</a></td>
1676-<td align="center"><br></td>
1677-<td align="center"><br></td>
1678-<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
1679-<td align="center"><br></td>
1680+<td align="center"><br /></td>
1681+<td align="center"><br /></td>
1682+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
1683+<td align="center"><br /></td>
1684 <td>Commercial (discontinued?)</td>
1685 </tr>
1686
1687 <tr class="disappeared">
1688 <td><a target="other" rel="nofollow" href="http://www.jdevelop.com/">JDevelop</a></td>
1689 <td><a target="other" rel="nofollow" href="http://www.jdevelop.com/best-java-obfuscator.html">JSCO</a></td>
1690-<td align="center"><br></td>
1691-<td align="center"><br></td>
1692-<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
1693-<td align="center"><br></td>
1694+<td align="center"><br /></td>
1695+<td align="center"><br /></td>
1696+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
1697+<td align="center"><br /></td>
1698 <td>Commercial (discontinued?)</td>
1699 </tr>
1700
1701 <tr class="disappeared">
1702 <td><a target="other" rel="nofollow" href="http://www.4fang.net/">4Fang</a></td>
1703 <td><a target="other" rel="nofollow" href="http://www.4fang.net/jmix/">JMix</a></td>
1704-<td align="center"><br></td>
1705-<td align="center"><br></td>
1706-<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
1707-<td align="center"><br></td>
1708+<td align="center"><br /></td>
1709+<td align="center"><br /></td>
1710+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
1711+<td align="center"><br /></td>
1712 <td>Commercial (discontinued?)</td>
1713 </tr>
1714
1715 <tr class="disappeared">
1716+<td><a target="other" rel="nofollow" href="http://www.retrologic.com/">RetroLogic</a></td>
1717+<td><a target="other" rel="nofollow" href="http://www.retrologic.com/">RetroGuard</a></td>
1718+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
1719+<td align="center"><br /></td>
1720+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
1721+<td align="center"><br /></td>
1722+<td>Commercial (disappeared?)</td>
1723+</tr>
1724+
1725+<tr class="disappeared">
1726+<td><a target="other" rel="nofollow" href="http://www.helseth.com/">Helseth</a></td>
1727+<td><a target="other" rel="nofollow" href="http://www.helseth.com/HJO.htm">JObfuscator</a></td>
1728+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
1729+<td align="center"><br /></td>
1730+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
1731+<td align="center"><br /></td>
1732+<td>Commercial (disappeared?)</td>
1733+</tr>
1734+
1735+<tr class="disappeared">
1736+<td><a target="other" rel="nofollow" href="http://www.vegatech.com/">Vega Technologies</a></td>
1737+<td><a target="other" rel="nofollow" href="http://www.vegatech.com/jzipper/">JZipper</a></td>
1738+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
1739+<td align="center"><br /></td>
1740+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
1741+<td align="center"><br /></td>
1742+<td>Commercial (disappeared?)</td>
1743+</tr>
1744+
1745+<tr class="disappeared">
1746+<td><a target="other" rel="nofollow" href="http://www.jproof.com/">JProof</a></td>
1747+<td><a target="other" rel="nofollow" href="http://www.jproof.com/">JProof</a></td>
1748+<td align="center"><br /></td>
1749+<td align="center"><br /></td>
1750+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
1751+<td align="center"><br /></td>
1752+<td>Commercial (disappeared?)</td>
1753+</tr>
1754+
1755+<tr class="disappeared">
1756+<td><a target="other" rel="nofollow" href="http://www.chainkey.com/">ChainKey</a></td>
1757+<td><a target="other" rel="nofollow" href="http://www.chainkey.com/en/jcp/">Java Code Protector</a></td>
1758+<td align="center"><br /></td>
1759+<td align="center"><br /></td>
1760+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
1761+<td align="center"><br /></td>
1762+<td>Commercial (disappeared?)</td>
1763+</tr>
1764+
1765+<tr class="disappeared">
1766 <td><a target="other" rel="nofollow" href="http://www.2lkit.com/">2LKit</a></td>
1767 <td><a target="other" rel="nofollow" href="http://www.2lkit.com/products/2LKitObf/index.htm">2LKit Obfuscator</a></td>
1768-<td align="center"><br></td>
1769-<td align="center"><br></td>
1770-<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
1771-<td align="center"><br></td>
1772+<td align="center"><br /></td>
1773+<td align="center"><br /></td>
1774+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
1775+<td align="center"><br /></td>
1776 <td>Commercial (disappeared?)</td>
1777 </tr>
1778
1779 <tr class="disappeared">
1780 <td><a target="other" rel="nofollow" href="http://www.wingsoft.com/">WingSoft</a></td>
1781 <td><a target="other" rel="nofollow" href="http://www.wingsoft.com/wingguard.html">WingGuard</a></td>
1782-<td align="center"><br></td>
1783-<td align="center"><br></td>
1784-<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
1785-<td align="center"><br></td>
1786-<td>Commercial (disappeared?)</td>
1787-</tr>
1788-
1789-<tr class="disappeared">
1790-<td><a target="other" rel="nofollow" href="http://www.sbktech.org/">HashJava</a></td>
1791-<td><a target="other" rel="nofollow" href="http://www.sbktech.org/">HashJava</a></td>
1792-<td align="center"><br></td>
1793-<td align="center"><br></td>
1794-<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td>
1795-<td align="center"><br></td>
1796+<td align="center"><br /></td>
1797+<td align="center"><br /></td>
1798+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
1799+<td align="center"><br /></td>
1800+<td>Commercial (disappeared?)</td>
1801+</tr>
1802+
1803+<tr class="disappeared">
1804+<td><a target="other" rel="nofollow" href="http://www.sbktech.org/">HashJava</a></td>
1805+<td><a target="other" rel="nofollow" href="http://www.sbktech.org/">HashJava</a></td>
1806+<td align="center"><br /></td>
1807+<td align="center"><br /></td>
1808+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
1809+<td align="center"><br /></td>
1810+<td>Commercial (disappeared?)</td>
1811+</tr>
1812+
1813+<tr class="disappeared">
1814+<td><a target="other" rel="nofollow" href="http://www.solutia.ro/">GITS</a></td>
1815+<td><a target="other" rel="nofollow" href="http://www.solutia.ro/pages/javadc/">Blurfuscator</a></td>
1816+<td align="center"><br /></td>
1817+<td align="center"><br /></td>
1818+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
1819+<td align="center"><br /></td>
1820 <td>Commercial (disappeared?)</td>
1821 </tr>
1822
1823@@ -647,10 +728,11 @@
1824 <p>
1825 All trademarks are property of their respective holders.
1826
1827-<hr>
1828+<hr />
1829+<noscript><div><a target="_top" href="index.html" class="button">Show menu</a></div></noscript>
1830 <address>
1831-Copyright &copy; 2002-2009
1832-<a href="http://www.graphics.cornell.edu/~eric/">Eric Lafortune</a>.
1833+Copyright &copy; 2002-2012
1834+<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>.
1835 </address>
1836
1837 </body>
1838
1839=== modified file 'docs/downloads.html'
1840--- docs/downloads.html 2009-10-09 16:17:49 +0000
1841+++ docs/downloads.html 2012-07-12 00:24:28 +0000
1842@@ -1,11 +1,22 @@
1843
1844-<!doctype html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
1845+<!doctype html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
1846 <html>
1847 <head>
1848 <meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
1849 <meta http-equiv="content-style-type" content="text/css">
1850 <link rel="stylesheet" type="text/css" href="style.css">
1851 <title>ProGuard Downloads</title>
1852+<script type="text/javascript" language="JavaScript">
1853+<!--
1854+if (window.self==window.top)
1855+ window.top.location.replace("index.html#"+window.location.pathname+window.location.hash);
1856+else {
1857+ var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), "");
1858+ if (window.top.location.hash!=hash)
1859+ window.top.location.hash=hash;
1860+}
1861+//-->
1862+</script>
1863 </head>
1864 <body>
1865
1866@@ -44,6 +55,123 @@
1867 collected since the previous release.
1868 <p>
1869
1870+<h3><div>May 2012</div> Version 4.8</h3>
1871+<ul>
1872+<li>Added more peephole optimizations for strings.
1873+<li>Added support for multiple external configuration files in Ant
1874+ configurations.
1875+<li>Added support for Ant properties in external configuration files.
1876+<li>Fixed parsing of empty file filters on input and output.
1877+<li>Fixed parsing of '*' wildcard for file filters and name filters.
1878+<li>Fixed obfuscation of private methods that are overridden in concrete
1879+ classes with intermediary abstract classes and interfaces (workaround
1880+ for Oracle bugs #6691741 and #6684387).
1881+<li>Fixed optimization of complex finally blocks, compiled with JDK 1.4 or
1882+ earlier.
1883+<li>Fixed optimizing signatures of methods that are marked as not having
1884+ side effects.
1885+<li>Fixed optimization of long local variables possibly causing verification
1886+ error for register pairs.
1887+<li>Fixed merging of classes defined inside methods.
1888+<li>Fixed stack consistency in optimization step.
1889+<li>No longer removing debug information about unused parameters, for
1890+ <code>-keepparameternames</code> or <code>-keepattributes</code>.
1891+<li>Fixed updating manifest files with carriage return characters.
1892+<li>Now removing unreachable code in preverification step.
1893+<li>Improved default regular expression for stack traces in ReTrace.
1894+<li>Updated documentation and examples.
1895+</ul>
1896+
1897+<h3><div>Dec 2011</div> Version 4.7</h3>
1898+<ul>
1899+<li>Added support for Java 7.
1900+<li>Parsing unquoted file names with special characters more leniently.
1901+<li>Added support for instance methods overriding class methods.
1902+<li>Added removal of unused parameterless constructors.
1903+<li>Added removal of empty class initializers.
1904+<li>Added peephole optimizations for constant strings.
1905+<li>Avoiding idle optimization passes.
1906+<li>Improved removal of unused constants after obfuscation.
1907+<li>Fixed removal of unused classes referenced by annotations.
1908+<li>Fixed simplifying parameters of constructors that should actually be
1909+ preserved.
1910+<li>Fixed simplifying parameters of large numbers of similar constructors.
1911+<li>Fixed exceptions in optimization of unusual obfuscated code.
1912+<li>Fixed NullPointerException when specifying <code>-keepclassmembers</code>
1913+ without specific class or class members.
1914+<li>Fixed potential problems with mixed-case class name dictionaries when not
1915+ allowing mixed-case class names.
1916+<li>Fixed obfuscation of classes with EnclosingMethod attributes that don't
1917+ specify methods.
1918+<li>Fixed preverification of returning try blocks with finally blocks, inside
1919+ try blocks, when compiled with JDK 1.4.
1920+<li>Fixed sorting of interfaces containing generics.
1921+<li>Fixed paths in shell scripts.
1922+<li>Fixed filling in of text fields showing class obfuscation dictionary and
1923+ package obfuscation dictionary from configuration in GUI.
1924+<li>Worked around Oracle Java 6/7 bug #7027598 that locked the GUI on Linux.
1925+<li>Updated documentation and examples.
1926+</ul>
1927+
1928+<h3><div>Feb 2011</div> Version 4.6</h3>
1929+<ul>
1930+<li>Added support for synthetic, bridge, and varargs modifiers in configuration.
1931+<li>Added detection of atomic updater construction with constant arguments.
1932+<li>Fixed merging of package visible classes.
1933+<li>Fixed optimization of fields that are only accessed by reflection.
1934+<li>Fixed optimization of read-only or write-only fields that are volatile.
1935+<li>Fixed handling of side-effects due to static initializers.
1936+<li>Fixed handling of bridge flags in obfuscation step.
1937+<li>Fixed handling of super flag when merging classes.
1938+<li>Fixed updating of variable tables when optimizing variables.
1939+<li>Fixed removal of unused parameters with 32 or more parameters.
1940+<li>Fixed incorrect removal of exception handler for instanceof instruction.
1941+<li>Fixed inlining of methods with unusual exception handlers.
1942+<li>Fixed optimization of unusual code causing stack underflow.
1943+<li>Fixed keeping of constructor parameter names.
1944+<li>Fixed unwanted wrapping of non-standard META-INF files.
1945+<li>Fixed filtering of warnings about references to array types.
1946+<li>Fixed overriding of warning option and note option in Ant task.
1947+<li>Improved detection of file name extensions for canonical paths.
1948+<li>Improved printing of seeds specified by <code>-keep</code> options.
1949+<li>Improved printing of notes about unkept classes.
1950+<li>Improved checking whether output is up to date.
1951+<li>Updated documentation and examples.
1952+</ul>
1953+
1954+<h3><div>Jun 2010</div> Version 4.5</h3>
1955+<ul>
1956+<li>Added option <code>-keepparameternames</code>.
1957+<li><code>-dontskipnonpubliclibraryclasses</code> is now set by default. Added
1958+ <code>-skipnonpubliclibraryclasses</code> as an option.
1959+<li>Made processing independent of order of input classes to get even more
1960+ deterministic output.
1961+<li>Improved constant field propagation.
1962+<li>Improved renaming of resource files in subdirectories of packages.
1963+<li>Avoiding making fields in interfaces private.
1964+<li>Optimizing exception handlers for monitorexit instruction.
1965+<li>Reduced maximum allowed code length after inlining from 8000 bytes to
1966+ 7000 bytes.
1967+<li>Fixed missing warnings about missing library classes.
1968+<li>Fixed shrinking of annotations with arrays of length 0.
1969+<li>Fixed handling of -0.0 and NaN values when simplifying expressions.
1970+<li>Fixed copying of exception handlers when simplifying tail recursion calls.
1971+<li>Fixed optimization of introspected fields.
1972+<li>Fixed simplification of unnecessary variable initializations.
1973+<li>Fixed evaluation of subroutines in pre-JDK 1.5 code.
1974+<li>Fixed updating of access flags in inner classes information.
1975+<li>Fixed disabling of field privatization.
1976+<li>Fixed invocations of privatized methods.
1977+<li>Fixed updating of local variable debug information in optimization step.
1978+<li>Fixed print settings without file name in GUI.
1979+<li>Fixed field privatization setting in GUI.
1980+<li>Fixed saving incorrectly quoted arguments in GUI.
1981+<li>Fixed handling of regular expressions with only negators.
1982+<li>Fixed unwanted wrapping of non-standard META-INF files.
1983+<li>Fixed regular expression pattern for constructors in ReTrace.
1984+<li>Updated documentation and examples.
1985+</ul>
1986+
1987 <h3><div>Jul 2009</div> Version 4.4</h3>
1988 <ul>
1989 <li>Added new peephole optimizations.
1990@@ -511,10 +639,11 @@
1991 <b>RetroGuard</b>.
1992 </ul>
1993
1994-<hr>
1995+<hr />
1996+<noscript><div><a target="_top" href="index.html" class="button">Show menu</a></div></noscript>
1997 <address>
1998-Copyright &copy; 2002-2009
1999-<a href="http://www.graphics.cornell.edu/~eric/">Eric Lafortune</a>.
2000+Copyright &copy; 2002-2012
2001+<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>.
2002 </address>
2003
2004 </body>
2005
2006=== modified file 'docs/feedback.html'
2007--- docs/feedback.html 2009-10-09 16:17:49 +0000
2008+++ docs/feedback.html 2012-07-12 00:24:28 +0000
2009@@ -1,4 +1,4 @@
2010-<!doctype html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
2011+<!doctype html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2012 <html>
2013 <head>
2014 <meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
2015@@ -6,6 +6,17 @@
2016 <meta http-equiv="content-style-type" content="text/css">
2017 <link rel="stylesheet" type="text/css" href="style.css">
2018 <title>ProGuard Feedback</title>
2019+<script type="text/javascript" language="JavaScript">
2020+<!--
2021+if (window.self==window.top)
2022+ window.top.location.replace("index.html#"+window.location.pathname+window.location.hash);
2023+else {
2024+ var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), "");
2025+ if (window.top.location.hash!=hash)
2026+ window.top.location.hash=hash;
2027+}
2028+//-->
2029+</script>
2030 </head>
2031 <body>
2032
2033@@ -13,28 +24,32 @@
2034
2035 By now, I've invested a fair amount of time in <b>ProGuard</b>. You can help
2036 by providing feedback! If you have problems, bugs, bug fixes, ideas,
2037-encouragements, etc., please let me know:
2038+encouragements, etc., please get in touch:
2039 <p>
2040-<ul>
2041-<li>The <a href="http://sourceforge.net/forum/forum.php?forum_id=182456"
2042+<ul class="spacious">
2043+<li>Through
2044+ <a href="http://www.saikoa.com/proguard/support" target="_top">Saikoa</a>,
2045+ we provide professional support for ProGuard. If you find ProGuard useful
2046+ and you would like to have some professional backing, this is the place to
2047+ go.</li>
2048+
2049+<li>The <a href="https://sourceforge.net/projects/proguard/forums/forum/182456"
2050 target="other">help forum</a> (at SourceForge) is the right place to ask
2051 questions about any problems you might have configuring and running
2052- <b>ProGuard</b>.
2053- <p>
2054+ ProGuard. At this time, I can generally only assist other open source
2055+ projects though. If you're working on commercial software, please consider
2056+ our professional support above.</li>
2057
2058-<li>The <a href="http://sourceforge.net/forum/forum.php?forum_id=182455"
2059+<li>The <a href="https://sourceforge.net/projects/proguard/forums/forum/182455"
2060 target="other">open discussion forum</a> (at SourceForge) offers a place
2061- to share your thoughts and discuss new ideas.
2062- <p>
2063+ to share your thoughts and discuss new ideas.</li>
2064
2065 <li>The <a
2066-
2067 href="http://sourceforge.net/tracker/?atid=474704&group_id=54750&func=browse"
2068 target="other">bug tracking page</a> (at SourceForge) allows you to submit
2069 and consult bug reports. Please make sure the reports are complete and
2070 concise. If I can't reproduce the problem, I most likely can't fix it
2071- either.
2072- <p>
2073+ either.</li>
2074
2075 <li>The <a
2076
2077@@ -42,16 +57,14 @@
2078 target="other">feature request page</a> (at SourceForge) allows you to
2079 submit and consult feature requests. I generally have my own road map in
2080 mind, but this is the place express your interest in new and existing
2081- ideas.
2082- <p>
2083+ ideas.</li>
2084
2085-<li>The <a href="http://sourceforge.net/project/showfiles.php?group_id=54750"
2086+<li>The <a href="https://sourceforge.net/projects/proguard/files/"
2087 target="other">download section</a> at SourceForge and the <a
2088- href="http://software.freshmeat.net/projects/proguard/"
2089- target="other">project page</a> at FreshMeat offer the possibility to
2090- subscribe to the announcements of new releases. They are the most
2091- efficient way to stay abreast of the latest developments.
2092- <p>
2093+ href="http://software.freecode.com/projects/proguard"
2094+ target="other">project page</a> at Freecode (Freshmeat) offer the
2095+ possibility to subscribe to the announcements of new releases. They are
2096+ the most efficient way to stay abreast of the latest developments.</li>
2097
2098 <li>For anything that doesn't fall in the above categories, you can mail me
2099 directly at
2100@@ -84,7 +97,7 @@
2101 <em>or</em> at
2102 &lt;&nbsp;eric&nbsp;&#64;&nbsp;graphics&nbsp;.&nbsp;cornell&nbsp;.&nbsp;edu&nbsp;&gt; (please remove the spaces)
2103 </noscript>
2104-.
2105+.</li>
2106 </ul>
2107 <p>
2108 I can't promise a swift answer, or any answer at all, for that matter, but I
2109@@ -96,10 +109,11 @@
2110 do things my way, without the overhead and compromises associated with larger
2111 projects.
2112
2113-<hr>
2114+<hr />
2115+<noscript><div><a target="_top" href="index.html" class="button">Show menu</a></div></noscript>
2116 <address>
2117-Copyright &copy; 2002-2009
2118-<a href="http://www.graphics.cornell.edu/~eric/">Eric Lafortune</a>.
2119+Copyright &copy; 2002-2012
2120+<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>.
2121 </address>
2122
2123 </body>
2124
2125=== modified file 'docs/index.html'
2126--- docs/index.html 2009-10-09 16:17:49 +0000
2127+++ docs/index.html 2012-07-12 00:24:28 +0000
2128@@ -1,4 +1,4 @@
2129-<!doctype html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
2130+<!doctype html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2131 <html>
2132 <head>
2133 <meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
2134@@ -11,18 +11,34 @@
2135 <link rel="shortcut icon" type="image/x-icon" href="favicon.ico">
2136 <title>ProGuard</title>
2137 </head>
2138+
2139+<script type="text/javascript" language="JavaScript">
2140+<!--
2141+var main="main.html";
2142+if (window.location.hash.length > 1)
2143+ main=window.location.hash.substr(1);
2144+var sections="sections.html";
2145+if (main.search(/manual\//) >= 0)
2146+ sections="manual/sections.html";
2147+
2148+document.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>");
2149+//-->
2150+</script>
2151+
2152+<noscript>
2153 <frameset
2154 rows="50,*"
2155 framespacing="0"
2156 frameborder="no">
2157
2158 <frame
2159+ id="title"
2160 name="title"
2161 src="title.html"
2162 scrolling="no"
2163 marginwidth="0"
2164 marginheight="0"
2165- noresize>
2166+ noresize />
2167
2168 <frameset
2169 cols="120,*"
2170@@ -30,42 +46,46 @@
2171 frameborder="no">
2172
2173 <frame
2174+ id="sections"
2175 name="sections"
2176 src="sections.html"
2177 scrolling="no"
2178 marginwidth="0"
2179 marginheight="0"
2180- noresize>
2181+ noresize />
2182
2183 <frame
2184+ id="main"
2185 name="main"
2186 src="main.html"
2187 scrolling="auto"
2188 marginwidth="10"
2189 marginheight="10"
2190- noresize>
2191+ noresize />
2192
2193 </frameset>
2194 </frameset>
2195+</noscript>
2196
2197 <noframes>
2198 <body>
2199 <p class="intro">
2200-<b>ProGuard</b> is a free Java class file shrinker, optimizer, and obfuscator.
2201-It can detect and remove unused classes, fields, methods, and attributes. It
2202-can then optimize bytecode and remove unused instructions. Finally, it can
2203-rename the remaining classes, fields, and methods using short meaningless
2204-names. The resulting jars are smaller and harder to reverse-engineer.
2205+<b>ProGuard</b> is a free Java class file shrinker, optimizer, obfuscator, and
2206+preverifier. It detects and removes unused classes, fields, methods, and
2207+attributes. It optimizes bytecode and removes unused instructions. It renames
2208+the remaining classes, fields, and methods using short meaningless names.
2209+Finally, it preverifies the processed code for Java 6 or for Java Micro
2210+Edition.
2211 </p>
2212 <p>
2213 Your browser doesn't support frames, but that's cool.
2214 <p>
2215 You can go straight to the <a href="main.html">main page</a>.
2216
2217-<hr>
2218+<hr />
2219 <address>
2220-Copyright &copy; 2002-2009
2221-<a href="http://www.graphics.cornell.edu/~eric/">Eric Lafortune</a>.
2222+Copyright &copy; 2002-2012
2223+<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>.
2224 </address>
2225 </body>
2226 </noframes>
2227
2228=== modified file 'docs/license.html'
2229--- docs/license.html 2009-10-09 16:17:49 +0000
2230+++ docs/license.html 2012-07-12 00:24:28 +0000
2231@@ -1,10 +1,21 @@
2232-<!doctype html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
2233+<!doctype html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2234 <html>
2235 <head>
2236 <meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
2237 <meta http-equiv="content-style-type" content="text/css">
2238 <link rel="stylesheet" type="text/css" href="style.css">
2239 <title>ProGuard License</title>
2240+<script type="text/javascript" language="JavaScript">
2241+<!--
2242+if (window.self==window.top)
2243+ window.top.location.replace("index.html#"+window.location.pathname+window.location.hash);
2244+else {
2245+ var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), "");
2246+ if (window.top.location.hash!=hash)
2247+ window.top.location.hash=hash;
2248+}
2249+//-->
2250+</script>
2251 </head>
2252 <body>
2253
2254@@ -29,19 +40,21 @@
2255 exception</a> to the latter clause (in wording suggested by
2256 the <a href="http://www.gnu.org/copyleft/gpl-faq.html#GPLIncompatibleLibs"
2257 target="other">FSF</a>), for combinations with the following stand-alone
2258-applications: Apache Ant, Apache Maven, the Eclipse ProGuardDT GUI, the
2259-EclipseME JME IDE, the Sun NetBeans Java IDE, the Sun JME Wireless Toolkit,
2260-and the Javaground Tools.
2261+applications: Apache Ant, Apache Maven, the Google Android SDK, the Eclipse
2262+ProGuardDT GUI, the EclipseME JME IDE, the Oracle NetBeans Java IDE, the Oracle
2263+JME Wireless Toolkit, the Simple Build Tool for Scala, the NeoMAD Tools by
2264+Neomades, the Javaground Tools, and the Sanaware Tools.
2265
2266 <p>
2267 The <b>ProGuard user documentation</b> represents an important part of this
2268 work. It may only be redistributed without changes, along with the unmodified
2269 version of the code.
2270
2271-<hr>
2272+<hr />
2273+<noscript><div><a target="_top" href="index.html" class="button">Show menu</a></div></noscript>
2274 <address>
2275-Copyright &copy; 2002-2009
2276-<a href="http://www.graphics.cornell.edu/~eric/">Eric Lafortune</a>.
2277+Copyright &copy; 2002-2012
2278+<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>.
2279 </address>
2280 </body>
2281 </html>
2282
2283=== removed file 'docs/luciadlogo.png'
2284Binary files docs/luciadlogo.png 2005-06-17 14:25:24 +0000 and docs/luciadlogo.png 1970-01-01 00:00:00 +0000 differ
2285=== modified file 'docs/main.html'
2286--- docs/main.html 2009-10-09 16:17:49 +0000
2287+++ docs/main.html 2012-07-12 00:24:28 +0000
2288@@ -1,4 +1,4 @@
2289-<!doctype html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
2290+<!doctype html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2291 <html>
2292 <head>
2293 <meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
2294@@ -8,6 +8,16 @@
2295 <meta name="keywords" content="java obfuscator, optimizer, shrinker, preverfier">
2296 <link rel="stylesheet" type="text/css" href="style.css">
2297 <title>ProGuard Main</title>
2298+<script type="text/javascript" language="JavaScript">
2299+<!--
2300+if (window.self==window.top)
2301+ window.top.location.replace("index.html#"+window.location.pathname+window.location.hash);
2302+else {
2303+ if (window.top.location.hash!="")
2304+ window.top.location.hash="";
2305+}
2306+//-->
2307+</script>
2308 </head>
2309 <body>
2310
2311@@ -25,25 +35,21 @@
2312 <ul>
2313
2314 <li>Creating more compact code, for smaller code archives, faster transfer
2315- across networks, faster loading, and smaller memory footprints.
2316-
2317-<li>Making programs and libraries harder to reverse-engineer.
2318-
2319-<li>Listing dead code, so it can be removed from the source code.
2320+ across networks, faster loading, and smaller memory footprints.</li>
2321+
2322+<li>Making programs and libraries harder to reverse-engineer.</li>
2323+
2324+<li>Listing dead code, so it can be removed from the source code.</li>
2325
2326 <li>Retargeting and preverifying existing class files for Java 6, to take full
2327- advantage of Java 6's faster class loading.
2328+ advantage of Java 6's faster class loading.</li>
2329
2330 </ul>
2331 <p>
2332 <b>ProGuard</b>'s main advantage compared to other Java obfuscators is
2333 probably its compact template-based configuration. A few intuitive command
2334-line options or a simple configuration file are usually sufficient. For
2335-instance, the following configuration option preserves all applets in a jar:
2336-<pre>
2337- -keep public class * extends java.applet.Applet
2338-</pre>
2339-The user manual explains all available options and shows more examples of this
2340+line options or a simple configuration file are usually sufficient.
2341+The user manual explains all available options and shows examples of this
2342 powerful configuration style.
2343 <p>
2344 <b>ProGuard</b> is fast. It only takes seconds to process programs and
2345@@ -55,38 +61,42 @@
2346 Toolkit.
2347 <p>
2348 <p class="intro">
2349-Version 4.0 introduced preverification and more bytecode optimizations. Please
2350-report any problems, so they can be fixed soon.
2351+<b>ProGuard</b> now has a sibling optimizer and obfuscator for Android,
2352+<a href="http://www.saikoa.com/dexguard" target="_top"><b>DexGuard</b></a>. It
2353+is compatible with ProGuard, but it goes further. It directly targets Dalvik
2354+bytecode and it provides additional features like string encryption, class
2355+encryption, and hiding access to sensitive APIs.
2356 </p>
2357 The following sections provide more detailed information:
2358 <ul>
2359-<li><a href="main.html">Main</a>: this overview page.
2360+<li><a href="main.html">Main</a>: this overview page.</li>
2361 <li><a href="results.html">Results</a>: some results obtained with
2362- <b>ProGuard</b>, including timings and memory usage.
2363-<li><a href="FAQ.html">FAQ</a>: answers to some Frequently Asked Questions.
2364+ <b>ProGuard</b>, including timings and memory usage.</li>
2365+<li><a href="FAQ.html">FAQ</a>: answers to some Frequently Asked Questions.</li>
2366 <li><a href="manual/index.html">Manual</a>: the complete <b>ProGuard</b> user
2367- manual, with examples and troubleshooting tips.
2368+ manual, with examples and troubleshooting tips.</li>
2369 <li><a href="quality.html">Quality</a>: a discussion of the (excellent) quality
2370- of <b>ProGuard</b>'s code.
2371-<li><a href="screenshots.html">Screenshots</a>: some impressions of what <b>ProGuard</b> looks like.
2372+ of <b>ProGuard</b>'s code.</li>
2373+<li><a href="screenshots.html">Screenshots</a>: some impressions of what <b>ProGuard</b> looks like.</li>
2374 <li><a href="testimonials.html">Testimonials</a>: what users think of
2375- <b>ProGuard</b>.
2376+ <b>ProGuard</b>.</li>
2377 <li><a href="license.html">License</a>: <b>ProGuard</b> is free, under a GPL
2378- license.
2379+ license.</li>
2380 <li><a href="downloads.html">Downloads</a>: download the <b>ProGuard</b>
2381- package yourself.
2382+ package yourself.</li>
2383 <li><a href="feedback.html">Feedback</a>: tell me about your experiences, or
2384- learn from others on our forums.
2385+ learn from others on our forums.</li>
2386 <li><a href="acknowledgements.html">Acknowledgements</a>: people who have been
2387- helpful.
2388+ helpful.</li>
2389 <li><a href="alternatives.html">Alternatives</a>: other Java obfuscators,
2390- optimizers, and shrinkers.
2391+ optimizers, and shrinkers.</li>
2392 </ul>
2393
2394-<hr>
2395+<hr />
2396+<noscript><div><a target="_top" href="index.html" class="button">Show menu</a></div></noscript>
2397 <address>
2398-Copyright &copy; 2002-2009
2399-<a href="http://www.graphics.cornell.edu/~eric/">Eric Lafortune</a>.
2400+Copyright &copy; 2002-2012
2401+<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>.
2402 </address>
2403 </body>
2404 </html>
2405
2406=== modified file 'docs/manual/ant.html'
2407--- docs/manual/ant.html 2009-10-09 16:17:49 +0000
2408+++ docs/manual/ant.html 2012-07-12 00:24:28 +0000
2409@@ -1,10 +1,21 @@
2410-<!doctype html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
2411+<!doctype html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2412 <html>
2413 <head>
2414 <meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
2415 <meta http-equiv="content-style-type" content="text/css">
2416 <link rel="stylesheet" type="text/css" href="style.css">
2417 <title>Ant Task</title>
2418+<script type="text/javascript" language="JavaScript">
2419+<!--
2420+if (window.self==window.top)
2421+ window.top.location.replace("../index.html#"+window.location.pathname+window.location.hash);
2422+else {
2423+ var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), "");
2424+ if (window.top.location.hash!=hash)
2425+ window.top.location.hash=hash;
2426+}
2427+//-->
2428+</script>
2429 </head>
2430 <body>
2431
2432@@ -89,11 +100,11 @@
2433 <p>
2434
2435 Secondly, the use of <code>&lt;</code> and <code>&gt;</code> characters would
2436-upset the structure of the XML build file. Environment variables are now
2437-enclosed by an opening <code>${</code> and a closing <code>}</code>. This
2438-syntax also allows you to use Ant properties within the ProGuard
2439-configuration. Other occurrences of <code>&lt;</code> and <code>&gt;</code>
2440-have to be encoded as <code>&amp;lt;</code> and <code>&amp;gt;</code>.
2441+upset the structure of the XML build file. Environment variables can be
2442+specified with the usual Ant style <code>${...}</code>, instead of the ProGuard
2443+style <code>&lt;...&gt;</code>. Other occurrences of <code>&lt;</code> and
2444+<code>&gt;</code> have to be encoded as <code>&amp;lt;</code> and
2445+<code>&amp;gt;</code> respectively.
2446 <p>
2447
2448 <h3>3. XML configuration tags</h3>
2449@@ -107,8 +118,7 @@
2450 files in the <code>examples/ant</code> directory of the ProGuard distribution.
2451 <p>
2452
2453-<a name="proguard">&nbsp;</a>
2454-<h2>Task Attributes and Nested Elements</h2>
2455+<h2><a name="proguard">Task Attributes and Nested Elements</a></h2>
2456
2457 The <code><b>&lt;proguard&gt;</b></code> task and the
2458 <code><b>&lt;proguardconfiguration&gt;</b></code> task can have the following
2459@@ -120,13 +130,14 @@
2460 <dt><a name="configuration_attribute"><code><b>configuration</b></code></a>
2461 = "<i>filename</i>"</dt>
2462 <dd>Read and merge options from the given ProGuard-style configuration
2463- file. Note: for reading XML-style configurations, use the <a
2464+ file. Note: for reading multiple configuration files or XML-style
2465+ configurations, use the <a
2466 href="#configuration_element"><code>configuration</code></a>
2467 <i>element</i>.</dd>
2468
2469-<dt><a href="usage.html#dontskipnonpubliclibraryclasses"><code><b>skipnonpubliclibraryclasses</b></code></a>
2470+<dt><a href="usage.html#skipnonpubliclibraryclasses"><code><b>skipnonpubliclibraryclasses</b></code></a>
2471 = "<i>boolean</i>"
2472- (default = true)</dt>
2473+ (default = false)</dt>
2474 <dd>Ignore non-public library classes.</dd>
2475
2476 <dt><a href="usage.html#dontskipnonpubliclibraryclassmembers"><code><b>skipnonpubliclibraryclassmembers</b></code></a>
2477@@ -242,6 +253,11 @@
2478 <dd>Repackage all class files that are renamed into the single given
2479 package.</dd>
2480
2481+<dt><a href="usage.html#keepparameternames"><code><b>keepparameternames</b></code></a>
2482+ = "<i>boolean</i>"
2483+ (default = false)</dt>
2484+<dd>Keep the parameter names and types of methods that are kept.</dd>
2485+
2486 <dt><a href="usage.html#renamesourcefileattribute"><code><b>renamesourcefileattribute</b></code></a>
2487 = "<i>string</i>"
2488 (default = none)</dt>
2489@@ -257,7 +273,7 @@
2490 <dt><a href="usage.html#microedition"><code><b>microedition</b></code></a>
2491 = "<i>boolean</i>"
2492 (default = false)</dt>
2493-<dd>Targets the processed class files at Java Micro Edition.</dd>
2494+<dd>Target the processed class files at Java Micro Edition.</dd>
2495
2496 <dt><a href="usage.html#verbose"><code><b>verbose</b></code></a>
2497 = "<i>boolean</i>"
2498@@ -305,7 +321,7 @@
2499 <dt><a href="usage.html#outjars"><code><b>&lt;outjar</b></code></a>
2500 <a href="#classpath"><i>class_path</i></a>
2501 <code><b>/&gt;</b></code></dt>
2502-<dd>Specifies the name of the output jars (or wars, ears, zips, or
2503+<dd>Specifies the names of the output jars (or wars, ears, zips, or
2504 directories).</dd>
2505
2506 <dt><a href="usage.html#libraryjars"><code><b>&lt;libraryjar</b></code></a>
2507@@ -436,23 +452,27 @@
2508 filter. <i>Only use this option if you know what you're doing!</i></dd>
2509
2510 <dt><a name="configuration_element"><code><b>&lt;configuration refid = </b></code></a>"<i>ref_id</i>"
2511+ <code><b>/&gt;</b></code><br/>
2512+ <code><b>&lt;configuration file = </b></code>"<i>name</i>"
2513 <code><b>/&gt;</b></code></dt>
2514-<dd>Includes the configuration specified in the
2515+<dd>The first form includes the XML-style configuration specified in a
2516 <code>&lt;proguardconfiguration&gt;</code> task (or
2517- <code>&lt;proguard&gt;</code> task) with the attribute <code>id</code> =
2518- "<i>ref_id</i>". Note that only the nested elements of this configuration
2519- are considered, not the attributes. Also note: for reading ProGuard-style
2520- configuration files, use the <a
2521- href="#configuration_attribute"><code>configuration</code></a>
2522- <i>attribute</i>.</dd>
2523+ <code>&lt;proguard&gt;</code> task) with attribute <code>id</code> =
2524+ "<i>ref_id</i>". Only the nested elements of this configuration are
2525+ considered, not the attributes.
2526+ <p>
2527+ The second form includes the ProGuard-style configuration from the specified
2528+ file. The element is actually a <code>fileset</code> element and supports
2529+ all of its attributes and nested elements, including multiple files.
2530+ </dd>
2531
2532 </dl>
2533
2534-<a name="classpath">&nbsp;</a>
2535-<h2>Class Path Attributes and Nested Elements</h2>
2536+<h2><a name="classpath">Class Path Attributes and Nested Elements</a></h2>
2537
2538-The jar tags are path tags, so they can have any of the path attributes (or
2539-nested elements). The most common attributes are:
2540+The jar elements are <code>path</code> elements, so they can have any of the
2541+standard <code>path</code> attributes and nested elements. The most common
2542+attributes are:
2543
2544 <dl>
2545
2546@@ -472,7 +492,7 @@
2547
2548 </dl>
2549
2550-In addition, the jar tags can have ProGuard-style filter attributes:
2551+In addition, the jar elements can have ProGuard-style filter attributes:
2552
2553 <dl>
2554
2555@@ -499,8 +519,7 @@
2556
2557 </dl>
2558
2559-<a name="keepmodifier">&nbsp;</a>
2560-<h2>Keep Modifier Attributes</h2>
2561+<h2><a name="keepmodifier">Keep Modifier Attributes</a></h2>
2562
2563 The keep tags can have the following <i>modifier</i> attributes:
2564
2565@@ -526,8 +545,7 @@
2566
2567 </dl>
2568
2569-<a name="classspecification">&nbsp;</a>
2570-<h2>Class Specification Attributes and Nested Elements</h2>
2571+<h2><a name="classspecification">Class Specification Attributes and Nested Elements</a></h2>
2572
2573 The keep tags can have the following <i>class_specification</i> attributes and
2574 <i>class_member_specifications</i> nested elements:
2575@@ -538,6 +556,10 @@
2576 <dd>The optional access modifiers of the class. Any space-separated list of
2577 "public", "final", and "abstract", with optional negators "!".</dd>
2578
2579+<dt><code><b>annotation</b></code> = "<i>annotation_name</i>"</dt>
2580+<dd>The optional fully qualified name of an annotation of the class, with
2581+ optional wildcards.</dd>
2582+
2583 <dt><code><b>type</b></code> = "<i>type</i>"</dt>
2584 <dd>The optional type of the class: one of "class", "interface", or
2585 "!interface".</dd>
2586@@ -546,6 +568,10 @@
2587 <dd>The optional fully qualified name of the class, with optional
2588 wildcards.</dd>
2589
2590+<dt><code><b>extendsannotation</b></code> = "<i>annotation_name</i>"</dt>
2591+<dd>The optional fully qualified name of an annotation of the the class that
2592+ the specified classes must extend, with optional wildcards.</dd>
2593+
2594 <dt><code><b>extends</b></code> = "<i>class_name</i>"</dt>
2595 <dd>The optional fully qualified name of the class the specified classes
2596 must extend, with optional wildcards.</dd>
2597@@ -571,8 +597,7 @@
2598
2599 </dl>
2600
2601-<a name="classmemberspecification">&nbsp;</a>
2602-<h2>Class Member Specification Attributes</h2>
2603+<h2><a name="classmemberspecification">Class Member Specification Attributes</a></h2>
2604
2605 The class member tags can have the following <i>class_member_specification</i>
2606 attributes:
2607@@ -584,6 +609,10 @@
2608 "public", "protected", "private", "static", etc., with optional negators
2609 "!".</dd>
2610
2611+<dt><code><b>annotation</b></code> = "<i>annotation_name</i>"</dt>
2612+<dd>The optional fully qualified name of an annotation of the class member,
2613+ with optional wildcards.</dd>
2614+
2615 <dt><code><b>type</b></code> = "<i>type</i>"</dt>
2616 <dd>The optional fully qualified type of the class member, with optional
2617 wildcards. Not applicable for constructors, but required for methods for
2618@@ -601,10 +630,11 @@
2619
2620 </dl>
2621
2622-<hr>
2623+<hr />
2624+<noscript><div><a target="_top" href="../index.html" class="button">Show menu</a></div></noscript>
2625 <address>
2626-Copyright &copy; 2002-2009
2627-<a href="http://www.graphics.cornell.edu/~eric/">Eric Lafortune</a>.
2628+Copyright &copy; 2002-2012
2629+<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>.
2630 </address>
2631 </body>
2632 </html>
2633
2634=== modified file 'docs/manual/examples.html'
2635--- docs/manual/examples.html 2009-10-09 16:17:49 +0000
2636+++ docs/manual/examples.html 2012-07-12 00:24:28 +0000
2637@@ -1,10 +1,21 @@
2638-<!doctype html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
2639+<!doctype html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2640 <html>
2641 <head>
2642 <meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
2643 <meta http-equiv="content-style-type" content="text/css">
2644 <link rel="stylesheet" type="text/css" href="style.css">
2645 <title>ProGuard Examples</title>
2646+<script type="text/javascript" language="JavaScript">
2647+<!--
2648+if (window.self==window.top)
2649+ window.top.location.replace("../index.html#"+window.location.pathname+window.location.hash);
2650+else {
2651+ var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), "");
2652+ if (window.top.location.hash!=hash)
2653+ window.top.location.hash=hash;
2654+}
2655+//-->
2656+</script>
2657 </head>
2658 <body>
2659
2660@@ -12,76 +23,83 @@
2661
2662 Some typical useful configurations:
2663 <ol>
2664-<li><a href="#application">A typical application</a>
2665-<li><a href="#applet">A typical applet</a>
2666-<li><a href="#midlet">A typical midlet</a>
2667-<li><a href="#jcapplet">A typical Java Card applet</a>
2668-<li><a href="#xlet">A typical xlet</a>
2669-<li><a href="#androidapplication">A typical Android application</a>
2670-<li><a href="#library">A typical library</a>
2671-<li><a href="#applications">All possible applications in the input jars</a>
2672-<li><a href="#applets">All possible applets in the input jars</a>
2673-<li><a href="#midlets">All possible midlets in the input jars</a>
2674-<li><a href="#jcapplets">All possible Java Card applets in the input jars</a>
2675-<li><a href="#xlets">All possible xlets in the input jars</a>
2676-<li><a href="#androidapplications">All possible Android applications in the input jars</a>
2677-<li><a href="#servlets">All possible servlets in the input jars</a>
2678-<li><a href="#native">Processing native methods</a>
2679-<li><a href="#callback">Processing callback methods</a>
2680-<li><a href="#enumerations">Processing enumeration classes</a>
2681-<li><a href="#serializable">Processing serializable classes</a>
2682-<li><a href="#beans">Processing bean classes</a>
2683-<li><a href="#annotations">Processing annotations</a>
2684-<li><a href="#database">Processing database drivers</a>
2685-<li><a href="#componentui">Processing ComponentUI classes</a>
2686-<li><a href="#rmi">Processing RMI code</a>
2687-<li><a href="#resourcefiles">Processing resource files</a>
2688-<li><a href="#stacktrace">Producing useful obfuscated stack traces</a>
2689-<li><a href="#repackaging">Obfuscating package names</a>
2690-<li><a href="#restructuring">Restructuring the output archives</a>
2691-<li><a href="#filtering">Filtering the input and the output</a>
2692-<li><a href="#multiple">Processing multiple applications at once</a>
2693-<li><a href="#incremental">Incremental obfuscation</a>
2694-<li><a href="#microedition">Preverifying class files for Java Micro Edition</a>
2695-<li><a href="#upgrade">Upgrading class files to Java 6</a>
2696-<li><a href="#deadcode">Finding dead code</a>
2697-<li><a href="#structure">Printing out the internal structure of class files</a>
2698-<li><a href="#annotated">Using annotations to configure ProGuard</a>
2699+<li><a href="#application">A typical application</a></li>
2700+<li><a href="#applet">A typical applet</a></li>
2701+<li><a href="#midlet">A typical midlet</a></li>
2702+<li><a href="#jcapplet">A typical Java Card applet</a></li>
2703+<li><a href="#xlet">A typical xlet</a></li>
2704+<li><a href="#androidactivity">A simple Android activity</a></li>
2705+<li><a href="#androidapplication">A complete Android application</a></li>
2706+<li><a href="#library">A typical library</a></li>
2707+<li><a href="#applications">All possible applications in the input jars</a></li>
2708+<li><a href="#applets">All possible applets in the input jars</a></li>
2709+<li><a href="#midlets">All possible midlets in the input jars</a></li>
2710+<li><a href="#jcapplets">All possible Java Card applets in the input jars</a></li>
2711+<li><a href="#xlets">All possible xlets in the input jars</a></li>
2712+<li><a href="#servlets">All possible servlets in the input jars</a></li>
2713+<li><a href="#scala">Scala applications with the Scala runtime</a></li>
2714+<li><a href="#native">Processing native methods</a></li>
2715+<li><a href="#callback">Processing callback methods</a></li>
2716+<li><a href="#enumerations">Processing enumeration classes</a></li>
2717+<li><a href="#serializable">Processing serializable classes</a></li>
2718+<li><a href="#beans">Processing bean classes</a></li>
2719+<li><a href="#annotations">Processing annotations</a></li>
2720+<li><a href="#database">Processing database drivers</a></li>
2721+<li><a href="#componentui">Processing ComponentUI classes</a></li>
2722+<li><a href="#rmi">Processing RMI code</a></li>
2723+<li><a href="#injection">Processing resource injection</a></li>
2724+<li><a href="#resourcefiles">Processing resource files</a></li>
2725+<li><a href="#manifestfiles">Processing manifest files</a></li>
2726+<li><a href="#stacktrace">Producing useful obfuscated stack traces</a></li>
2727+<li><a href="#repackaging">Obfuscating package names</a></li>
2728+<li><a href="#restructuring">Restructuring the output archives</a></li>
2729+<li><a href="#filtering">Filtering the input and the output</a></li>
2730+<li><a href="#multiple">Processing multiple applications at once</a></li>
2731+<li><a href="#incremental">Incremental obfuscation</a></li>
2732+<li><a href="#microedition">Preverifying class files for Java Micro Edition</a></li>
2733+<li><a href="#upgrade">Upgrading class files to Java 6</a></li>
2734+<li><a href="#deadcode">Finding dead code</a></li>
2735+<li><a href="#structure">Printing out the internal structure of class files</a></li>
2736+<li><a href="#annotated">Using annotations to configure ProGuard</a></li>
2737 </ol>
2738
2739 You can find some sample configuration files in the <code>examples</code>
2740 directory of the ProGuard distribution.
2741
2742-<a name="application">&nbsp;</a>
2743-<h3>A typical application</h3>
2744-To shrink, optimize, and obfuscate the ProGuard application itself, one would
2745-typically create a configuration file <code>proguard.pro</code> and then type:
2746+<h3><a name="application">A typical application</a></h3>
2747+
2748+To shrink, optimize, and obfuscate a simple Java application, you typically
2749+create a configuration file like <code>myconfig.pro</code>, which can be used
2750+with
2751 <pre>
2752-java -jar proguard.jar @proguard.pro
2753+bin/proguard @myconfig.pro
2754 </pre>
2755 <p>
2756-The configuration file would contain the following options:
2757+The configuration file specifies the input, the output, and the entry points
2758+of the application:
2759 <pre>
2760--injars proguard.jar
2761--outjars proguard_out.jar
2762+-injars myapplication.jar
2763+-outjars myapplication_out.jar
2764 -libraryjars &lt;java.home&gt;/lib/rt.jar
2765--printmapping proguard.map
2766+-printmapping myapplication.map
2767
2768--keep public class proguard.ProGuard {
2769+-keep public class mypackage.MyMain {
2770 public static void main(java.lang.String[]);
2771 }
2772 </pre>
2773 <p>
2774-Note the use of the <code>&lt;java.home&gt;</code> system property; it is
2775-replaced automatically.
2776-<p>
2777-Also note that all type names are fully specified:
2778-<code>proguard.ProGuard</code> and <code>java.lang.String[]</code>.
2779-<p>
2780+Note the use of the <code>&lt;java.home&gt;</code> system property. ProGuard
2781+automatically replaces it when parsing the file.
2782+<p>
2783+The <a href="usage.html#keep"><code>-keep</code></a> option specifies the
2784+entry point of the application that has to be preserved.
2785 The access modifiers <code>public</code> and <code>static</code> are not
2786 really required in this case, since we know a priori that the specified class
2787 and method have the proper access flags. It just looks more familiar this way.
2788 <p>
2789+Note that all type names are fully specified:
2790+<code>mypackage.MyMain</code> and <code>java.lang.String[]</code>.
2791+<p>
2792 We're writing out an obfuscation mapping file with <a
2793 href="usage.html#printmapping"><code>-printmapping</code></a>, for
2794 de-obfuscating any stack traces later on, or for incremental obfuscation of
2795@@ -103,11 +121,10 @@
2796 <a href="#enumerations">enumerations</a>, <a href="#serializable">serializable
2797 classes</a>, <a href="#beans">bean classes</a>, <a
2798 href="#annotations">annotations</a>, and <a href="#resourcefiles">resource
2799-files</a>. For processing 'simple' applications like ProGuard, that is not
2800-required.
2801-
2802-<a name="applet">&nbsp;</a>
2803-<h3>A typical applet</h3>
2804+files</a>.
2805+
2806+<h3><a name="applet">A typical applet</a></h3>
2807+
2808 These options shrink, optimize, and obfuscate the applet
2809 <code>mypackage.MyApplet</code>:
2810 <pre>
2811@@ -129,15 +146,15 @@
2812 href="#annotations">annotations</a>, and <a href="#resourcefiles">resource
2813 files</a>.
2814
2815-<a name="midlet">&nbsp;</a>
2816-<h3>A typical midlet</h3>
2817+<h3><a name="midlet">A typical midlet</a></h3>
2818+
2819 These options shrink, optimize, obfuscate, and preverify the midlet
2820 <code>mypackage.MyMIDlet</code>:
2821 <pre>
2822 -injars in.jar
2823 -outjars out.jar
2824--libraryjars /usr/local/java/wtk2.1/lib/midpapi20.jar
2825--libraryjars /usr/local/java/wtk2.1/lib/cldcapi11.jar
2826+-libraryjars /usr/local/java/wtk2.5.2/lib/midpapi20.jar
2827+-libraryjars /usr/local/java/wtk2.5.2/lib/cldcapi11.jar
2828 -overloadaggressively
2829 -repackageclasses ''
2830 -allowaccessmodification
2831@@ -172,8 +189,8 @@
2832 Note that you will still have to adapt the midlet jar size in the
2833 corresponding jad file; ProGuard doesn't do that for you.
2834
2835-<a name="jcapplet">&nbsp;</a>
2836-<h3>A typical Java Card applet</h3>
2837+<h3><a name="jcapplet">A typical Java Card applet</a></h3>
2838+
2839 These options shrink, optimize, and obfuscate the Java Card applet
2840 <code>mypackage.MyApplet</code>:
2841 <pre>
2842@@ -192,8 +209,8 @@
2843 it now targets the Java Card run-time environment. This environment doesn't
2844 have java.lang.Class, so we're telling ProGuard not to worry about it.
2845
2846-<a name="xlet">&nbsp;</a>
2847-<h3>A typical xlet</h3>
2848+<h3><a name="xlet">A typical xlet</a></h3>
2849+
2850 These options shrink, optimize, and obfuscate the xlet
2851 <code>mypackage.MyXlet</code>:
2852 <pre>
2853@@ -212,15 +229,16 @@
2854 The configuration is very similar to the configuration for midlets, except that
2855 it now targets the CDC run-time environment with the Java TV API.
2856
2857-<a name="androidapplication">&nbsp;</a>
2858-<h3>A typical Android application</h3>
2859-These options shrink, optimize, and obfuscate the simple Android application
2860-based on a single activity <code>mypackage.MyActivity</code>:
2861+<h3><a name="androidactivity">A simple Android activity</a></h3>
2862+
2863+These options shrink, optimize, and obfuscate the single Android
2864+activity <code>mypackage.MyActivity</code>:
2865 <pre>
2866--injars in.jar
2867--outjars out.jar
2868--libraryjars /usr/local/java/android-1.5_r1/platforms/android-1.5/android.jar
2869--overloadaggressively
2870+-injars bin/classes
2871+-outjars bin/classes-processed.jar
2872+-libraryjars /usr/local/java/android-sdk/platforms/android-9/android.jar
2873+
2874+-dontpreverify
2875 -repackageclasses ''
2876 -allowaccessmodification
2877 -optimizations !code/simplification/arithmetic
2878@@ -228,27 +246,157 @@
2879 -keep public class mypackage.MyActivity
2880 </pre>
2881 <p>
2882-The configuration is very similar to the configuration for midlets, except that
2883-it now targets the Android run-time environment.
2884+We're targeting the Android run-time and keeping the activity as an entry
2885+point.
2886+<p>
2887+Preverification is irrelevant for the dex compiler and the Dalvik VM, so we
2888+can switch it off with the
2889+<a href="usage.html#dontpreverify"><code>-dontpreverify</code></a> option.
2890 <p>
2891 The <a href="usage.html#optimizations"><code>-optimizations</code></a> option
2892 disables some arithmetic simplifications that Dalvik 1.0 and 1.5 can't handle.
2893-<p>
2894-If applicable, you should add options for processing <a href="#native">native
2895-methods</a>, <a href="#callback">callback methods</a>, and <a
2896-href="#resourcefiles">resource files</a>.
2897-
2898-<a name="library">&nbsp;</a>
2899-<h3>A typical library</h3>
2900+Note that the Dalvik VM also can't
2901+handle <a href="usage.html#overloadaggressively">aggressive overloading</a>
2902+(of static fields).
2903+<p>
2904+If applicable, you should add options for processing <a href="#native">native
2905+methods</a>, <a href="#callback">callback methods</a>,
2906+<a href="#enumerations">enumerations</a>,
2907+<a href="#annotations">annotations</a>, and
2908+<a href="#resourcefiles">resource files</a>.
2909+
2910+<h3><a name="androidapplication">A complete Android application</a></h3>
2911+
2912+These options shrink, optimize, and obfuscate all public activities, services,
2913+broadcast receivers, and content providers from the compiled classes and
2914+external libraries:
2915+<pre>
2916+-injars bin/classes
2917+-injars libs
2918+-outjars bin/classes-processed.jar
2919+-libraryjars /usr/local/java/android-sdk/platforms/android-9/android.jar
2920+
2921+-dontpreverify
2922+-repackageclasses ''
2923+-allowaccessmodification
2924+-optimizations !code/simplification/arithmetic
2925+-keepattributes *Annotation*
2926+
2927+-keep public class * extends android.app.Activity
2928+-keep public class * extends android.app.Application
2929+-keep public class * extends android.app.Service
2930+-keep public class * extends android.content.BroadcastReceiver
2931+-keep public class * extends android.content.ContentProvider
2932+
2933+-keep public class * extends android.view.View {
2934+ public &lt;init&gt;(android.content.Context);
2935+ public &lt;init&gt;(android.content.Context, android.util.AttributeSet);
2936+ public &lt;init&gt;(android.content.Context, android.util.AttributeSet, int);
2937+ public void set*(...);
2938+}
2939+
2940+-keepclasseswithmembers class * {
2941+ public &lt;init&gt;(android.content.Context, android.util.AttributeSet);
2942+}
2943+
2944+-keepclasseswithmembers class * {
2945+ public &lt;init&gt;(android.content.Context, android.util.AttributeSet, int);
2946+}
2947+
2948+-keepclassmembers class * extends android.content.Context {
2949+ public void *(android.view.View);
2950+ public void *(android.view.MenuItem);
2951+}
2952+
2953+-keepclassmembers class * implements android.os.Parcelable {
2954+ static android.os.Parcelable$Creator CREATOR;
2955+}
2956+
2957+-keepclassmembers class **.R$* {
2958+ public static &lt;fields&gt;;
2959+}
2960+</pre>
2961+<p>
2962+Most importantly, we're keeping all fundamental classes that may be referenced
2963+by the <code>AndroidManifest.xml</code> file of the application. If your
2964+manifest file contains other classes and methods, you may have to specify
2965+those as well.
2966+<p>
2967+We're keeping annotations, since they might be used by custom
2968+<code>RemoteViews</code>.
2969+<p>
2970+We're keeping any custom <code>View</code> extensions and other classes with
2971+typical constructors, since they might be referenced from XML layout files.
2972+<p>
2973+We're also keeping possible <code>onClick</code> handlers in
2974+custom <code>Context</code> extensions, since they might be referenced from
2975+XML layout files.
2976+<p>
2977+We're also keeping the required static fields in <code>Parcelable</code>
2978+implementations, since they are accessed by introspection.
2979+<p>
2980+Finally, we're keeping the static fields of referenced inner classes of
2981+auto-generated <code>R</code> classes, just in case your code is accessing
2982+those fields by introspection. Note that the compiler already inlines
2983+primitive fields, so ProGuard can generally remove all these classes entirely
2984+anyway (because the classes are not referenced and therefore not required).
2985+<p>
2986+If you're using additional Google APIs, you'll have to specify
2987+those as well, for instance:
2988+<pre>
2989+-libraryjars /usr/local/android-sdk/add-ons/google_apis-7_r01/libs/maps.jar
2990+</pre>
2991+<p>
2992+If you're using Google's optional License Verification Library, you can
2993+obfuscate its code along with your own code. You do have to preserve
2994+its <code>ILicensingService</code> interface for the library to work:
2995+<pre>
2996+-keep public interface com.android.vending.licensing.ILicensingService
2997+</pre>
2998+<p>
2999+If you're using the Android Compatibility library, you should add the
3000+following line, to let ProGuard know it's ok that the library references some
3001+classes that are not available in all versions of the API:
3002+<pre>
3003+-dontwarn android.support.**
3004+</pre>
3005+<p>
3006+If applicable, you should add options for processing <a href="#native">native
3007+methods</a>, <a href="#callback">callback methods</a>,
3008+<a href="#enumerations">enumerations</a>,
3009+and <a href="#resourcefiles">resource files</a>. You may also want to add
3010+options for producing <a href="#stacktrace">useful stack traces</a>. You can
3011+find a complete sample configuration in <code>examples/android.pro</code> in
3012+the ProGuard distribution.
3013+<p>
3014+The Ant and Eclipse build processes of the Android SDK already integrate
3015+ProGuard by default, with all the proper settings. You only need to enable
3016+ProGuard (for release builds) by uncommenting the line
3017+"<code>proguard.config=.....</code>" in the file
3018+<code>project.properties</code> (created or updated by Android SDK revision 17
3019+or higher). In case of problems, you may want to check if the configuration
3020+files that are listed on this line (<code>proguard-project.txt</code>,...)
3021+contain the necessary settings for your application. Note that the build
3022+processes are already setting the necessary program jars, library jars, and
3023+output jars for you.
3024+<p>
3025+For more information, you can consult the official <a target="other"
3026+href="http://developer.android.com/guide/developing/tools/proguard.html">Developer
3027+Guide</a> in the Android SDK.
3028+
3029+<h3><a name="library">A typical library</a></h3>
3030+
3031 These options shrink, optimize, and obfuscate an entire library, keeping all
3032 public and protected classes and class members, native method names, and
3033-serialization code:
3034+serialization code. The processed version of the library can then still be
3035+used as such, for developing code based on its public API.
3036 <pre>
3037 -injars in.jar
3038 -outjars out.jar
3039 -libraryjars &lt;java.home&gt;/lib/rt.jar
3040 -printmapping out.map
3041
3042+-keepparameternames
3043 -renamesourcefileattribute SourceFile
3044 -keepattributes Exceptions,InnerClasses,Signature,Deprecated,
3045 SourceFile,LineNumberTable,*Annotation*,EnclosingMethod
3046@@ -273,6 +421,7 @@
3047
3048 -keepclassmembers class * implements java.io.Serializable {
3049 static final long serialVersionUID;
3050+ private static final java.io.ObjectStreamField[] serialPersistentFields;
3051 private void writeObject(java.io.ObjectOutputStream);
3052 private void readObject(java.io.ObjectInputStream);
3053 java.lang.Object writeReplace();
3054@@ -289,12 +438,12 @@
3055 href="usage.html#keepclassmembernames"><code>-keepclassmembernames</code></a>
3056 option for the <code>class$</code> methods is not strictly necessary. These
3057 methods are inserted by the <code>javac</code> compiler and the
3058-<code>jikes</code> compiler respectively, to implement the <code>.class</code>
3059-construct. ProGuard will automatically detect them and deal with them, even
3060-when their names have been obfuscated. However, older versions of ProGuard and
3061-other obfuscators may rely on the original method names. It may therefore be
3062-helpful to preserve them, in case these other obfuscators are ever used for
3063-further obfuscation of the library.
3064+<code>jikes</code> compiler respectively, in JDK 1.2 and older, to implement
3065+the <code>.class</code> construct. ProGuard will automatically detect them and
3066+deal with them, even when their names have been obfuscated. However, other
3067+obfuscators may rely on the original method names. It may therefore be helpful
3068+to preserve them, in case these other obfuscators are ever used for further
3069+obfuscation of the library.
3070 <p>
3071 The "Exceptions" attribute has to be preserved, so the compiler knows which
3072 exceptions methods may throw.
3073@@ -307,6 +456,11 @@
3074 The "Signature" attribute is required to be able to access generic types when
3075 compiling in JDK 5.0 and higher.
3076 <p>
3077+The <a href="usage.html#keepparameternames"><code>-keepparameternames</code></a>
3078+option keeps the parameter names in the "LocalVariableTable" and
3079+"LocalVariableTypeTable" attributes of public library methods. Some IDEs can
3080+present these names to the developers who use the library.
3081+<p>
3082 Finally, we're keeping the "Deprecated" attribute and the attributes for
3083 producing <a href="#stacktrace">useful stack traces</a>.
3084 <p>
3085@@ -316,8 +470,8 @@
3086 href="#annotations">annotations</a>, which are all discussed in their
3087 respective examples.
3088
3089-<a name="applications">&nbsp;</a>
3090-<h3>All possible applications in the input jars</h3>
3091+<h3><a name="applications">All possible applications in the input jars</a></h3>
3092+
3093 These options shrink, optimize, and obfuscate all public applications in
3094 <code>in.jar</code>:
3095 <pre>
3096@@ -347,8 +501,8 @@
3097 href="#annotations">annotations</a>, and <a href="#resourcefiles">resource
3098 files</a>.
3099
3100-<a name="applets">&nbsp;</a>
3101-<h3>All possible applets in the input jars</h3>
3102+<h3><a name="applets">All possible applets in the input jars</a></h3>
3103+
3104 These options shrink, optimize, and obfuscate all public applets in
3105 <code>in.jar</code>:
3106 <pre>
3107@@ -372,15 +526,15 @@
3108 href="#annotations">annotations</a>, and <a href="#resourcefiles">resource
3109 files</a>.
3110
3111-<a name="midlets">&nbsp;</a>
3112-<h3>All possible midlets in the input jars</h3>
3113+<h3><a name="midlets">All possible midlets in the input jars</a></h3>
3114+
3115 These options shrink, optimize, obfuscate, and preverify all public midlets in
3116 <code>in.jar</code>:
3117 <pre>
3118 -injars in.jar
3119 -outjars out.jar
3120--libraryjars /usr/local/java/wtk2.1/lib/midpapi20.jar
3121--libraryjars /usr/local/java/wtk2.1/lib/cldcapi11.jar
3122+-libraryjars /usr/local/java/wtk2.5.2/lib/midpapi20.jar
3123+-libraryjars /usr/local/java/wtk2.5.2/lib/cldcapi11.jar
3124 -overloadaggressively
3125 -repackageclasses ''
3126 -allowaccessmodification
3127@@ -412,8 +566,8 @@
3128 Note that you will still have to adapt the midlet jar size in the
3129 corresponding jad file; ProGuard doesn't do that for you.
3130
3131-<a name="jcapplets">&nbsp;</a>
3132-<h3>All possible Java Card applets in the input jars</h3>
3133+<h3><a name="jcapplets">All possible Java Card applets in the input jars</a></h3>
3134+
3135 These options shrink, optimize, and obfuscate all public Java Card applets in
3136 <code>in.jar</code>:
3137 <pre>
3138@@ -435,8 +589,8 @@
3139 The <a href="usage.html#printseeds"><code>-printseeds</code></a> option prints
3140 out which applets exactly will be preserved.
3141
3142-<a name="xlets">&nbsp;</a>
3143-<h3>All possible xlets in the input jars</h3>
3144+<h3><a name="xlets">All possible xlets in the input jars</a></h3>
3145+
3146 These options shrink, optimize, and obfuscate all public xlets in
3147 <code>in.jar</code>:
3148 <pre>
3149@@ -458,38 +612,8 @@
3150 The <a href="usage.html#printseeds"><code>-printseeds</code></a> option prints
3151 out which xlets exactly will be preserved.
3152
3153-<a name="androidapplications">&nbsp;</a>
3154-<h3>All possible Android applications in the input jars</h3>
3155-These options shrink, optimize, and obfuscate all public activities, services,
3156-broadcast receivers, and content providers in <code>in.jar</code>:
3157-<pre>
3158--injars in.jar
3159--outjars out.jar
3160--libraryjars /usr/local/java/android-1.5_r1/platforms/android-1.5/android.jar
3161--overloadaggressively
3162--repackageclasses ''
3163--allowaccessmodification
3164--optimizations !code/simplification/arithmetic
3165--printseeds
3166-
3167--keep public class * extends android.app.Activity
3168--keep public class * extends android.app.Service
3169--keep public class * extends android.content.BroadcastReceiver
3170--keep public class * extends android.content.ContentProvider
3171-</pre>
3172-<p>
3173-We're keeping all classes that extend the base classes that may be referenced
3174-by the <code>AndroidManifest.xml</code> file of the application.
3175-<p>
3176-The <a href="usage.html#printseeds"><code>-printseeds</code></a> option prints
3177-out which implementations exactly will be preserved.
3178-<p>
3179-If applicable, you should add options for processing <a href="#native">native
3180-methods</a>, <a href="#callback">callback methods</a>, and <a
3181-href="#resourcefiles">resource files</a>.
3182-
3183-<a name="servlets">&nbsp;</a>
3184-<h3>All possible servlets in the input jars</h3>
3185+<h3><a name="servlets">All possible servlets in the input jars</a></h3>
3186+
3187 These options shrink, optimize, and obfuscate all public servlets in
3188 <code>in.jar</code>:
3189 <pre>
3190@@ -521,8 +645,77 @@
3191 href="#annotations">annotations</a>, and <a href="#resourcefiles">resource
3192 files</a>.
3193
3194-<a name="native">&nbsp;</a>
3195-<h3>Processing native methods</h3>
3196+<h3><a name="scala">Scala applications with the Scala runtime</a></h3>
3197+
3198+These options shrink, optimize, and obfuscate all public Scala applications in
3199+<code>in.jar</code>:
3200+<pre>
3201+-injars in.jar
3202+-injars /usr/local/java/scala-2.9.1/lib/scala-library.jar
3203+-outjars out.jar
3204+-libraryjars &lt;java.home&gt;/lib/rt.jar
3205+
3206+-dontwarn scala.**
3207+
3208+-keepclasseswithmembers public class * {
3209+ public static void main(java.lang.String[]);
3210+}
3211+
3212+-keep class * implements org.xml.sax.EntityResolver
3213+
3214+-keepclassmembers class * {
3215+ ** MODULE$;
3216+}
3217+
3218+-keepclassmembernames class scala.concurrent.forkjoin.ForkJoinPool {
3219+ long eventCount;
3220+ int workerCounts;
3221+ int runControl;
3222+ scala.concurrent.forkjoin.ForkJoinPool$WaitQueueNode syncStack;
3223+ scala.concurrent.forkjoin.ForkJoinPool$WaitQueueNode spareStack;
3224+}
3225+
3226+-keepclassmembernames class scala.concurrent.forkjoin.ForkJoinWorkerThread {
3227+ int base;
3228+ int sp;
3229+ int runState;
3230+}
3231+
3232+-keepclassmembernames class scala.concurrent.forkjoin.ForkJoinTask {
3233+ int status;
3234+}
3235+
3236+-keepclassmembernames class scala.concurrent.forkjoin.LinkedTransferQueue {
3237+ scala.concurrent.forkjoin.LinkedTransferQueue$PaddedAtomicReference head;
3238+ scala.concurrent.forkjoin.LinkedTransferQueue$PaddedAtomicReference tail;
3239+ scala.concurrent.forkjoin.LinkedTransferQueue$PaddedAtomicReference cleanMe;
3240+}
3241+</pre>
3242+<p>
3243+The configuration is essentially the same as
3244+for <a href="#applications">processing applications</a>, because Scala is
3245+compiled to ordinary Java bytecode. However, the example processes the Scala
3246+runtime library as well. The processed jar can be an order of magnitude
3247+smaller and a few times faster than the original code (for the Scala code
3248+examples, for instance).
3249+<p>
3250+The <a href="usage.html#dontwarn"><code>-dontwarn</code></a> option tells
3251+ProGuard not to complain about some artefacts in the Scala runtime, the way it
3252+is compiled by the <code>scalac</code> compiler (at least in Scala 2.9.1 and
3253+older). Note that this option should always be used with care.
3254+<p>
3255+The additional <a href="usage.html#keepoverview"><code>-keep</code></a>
3256+options make sure that some classes and some fields that are accessed by means
3257+of introspection are not removed or renamed.
3258+<p>
3259+If applicable, you should add options for processing <a href="#native">native
3260+methods</a>, <a href="#callback">callback methods</a>, <a
3261+href="#enumerations">enumerations</a>, <a href="#serializable">serializable
3262+classes</a>, <a href="#beans">bean classes</a>, <a
3263+href="#annotations">annotations</a>, and <a href="#resourcefiles">resource
3264+files</a>.
3265+<h3><a name="native">Processing native methods</a></h3>
3266+
3267 If your application, applet, servlet, library, etc., contains native methods,
3268 you'll want to preserve their names and their classes' names, so they can
3269 still be linked to the native library. The following additional option will
3270@@ -543,8 +736,8 @@
3271 entry points, which you'll have to specify explicitly. <a
3272 href="callback">Callback methods</a> are discussed below as a typical example.
3273
3274-<a name="callback">&nbsp;</a>
3275-<h3>Processing callback methods</h3>
3276+<h3><a name="callback">Processing callback methods</a></h3>
3277+
3278 If your application, applet, servlet, library, etc., contains callback
3279 methods, which are called from external code (native code, scripts,...),
3280 you'll want to preserve them, and probably their classes too. They are just
3281@@ -559,8 +752,8 @@
3282 <p>
3283 This will preserve the given class and method from being removed or renamed.
3284
3285-<a name="enumerations">&nbsp;</a>
3286-<h3>Processing enumeration classes</h3>
3287+<h3><a name="enumerations">Processing enumeration classes</a></h3>
3288+
3289 If your application, applet, servlet, library, etc., contains enumeration
3290 classes, you'll have to preserve some special methods. Enumerations were
3291 introduced in Java 5. The java compiler translates enumerations into classes
3292@@ -576,8 +769,8 @@
3293 }
3294 </pre>
3295
3296-<a name="serializable">&nbsp;</a>
3297-<h3>Processing serializable classes</h3>
3298+<h3><a name="serializable">Processing serializable classes</a></h3>
3299+
3300 More complex applications, applets, servlets, libraries, etc., may contain
3301 classes that are serialized. Depending on the way in which they are used, they
3302 may require special attention:
3303@@ -589,6 +782,7 @@
3304
3305 <pre>
3306 -keepclassmembers class * implements java.io.Serializable {
3307+ private static final java.io.ObjectStreamField[] serialPersistentFields;
3308 private void writeObject(java.io.ObjectOutputStream);
3309 private void readObject(java.io.ObjectInputStream);
3310 java.lang.Object writeReplace();
3311@@ -602,8 +796,7 @@
3312 option makes sure that any serialization methods are kept. By using this
3313 option instead of the basic <code>-keep</code> option, we're not
3314 forcing preservation of <i>all</i> serializable classes, just preservation
3315- of the listed members of classes that are actually used.
3316- <p>
3317+ of the listed members of classes that are actually used.</li>
3318
3319 <li>Sometimes, the serialized data are stored, and read back later into newer
3320 versions of the serializable classes. One then has to take care the classes
3321@@ -617,7 +810,7 @@
3322
3323 -keepclassmembers class * implements java.io.Serializable {
3324 static final long serialVersionUID;
3325- static final java.io.ObjectStreamField[] serialPersistentFields;
3326+ private static final java.io.ObjectStreamField[] serialPersistentFields;
3327 !static !transient &lt;fields&gt;;
3328 private void writeObject(java.io.ObjectOutputStream);
3329 private void readObject(java.io.ObjectInputStream);
3330@@ -632,7 +825,7 @@
3331 The <code>&lt;fields&gt;</code> line preserves all non-static,
3332 non-transient fields, with their original names. The introspection of the
3333 serialization process and the de-serialization process will then find
3334- consistent names.
3335+ consistent names.</li>
3336
3337 <li>Occasionally, the serialized data have to remain compatible, but the
3338 classes involved lack <code>serialVersionUID</code> fields. I imagine the
3339@@ -651,7 +844,7 @@
3340
3341 -keepclassmembers class * implements java.io.Serializable {
3342 static final long serialVersionUID;
3343- static final java.io.ObjectStreamField[] serialPersistentFields;
3344+ private static final java.io.ObjectStreamField[] serialPersistentFields;
3345 !static !transient &lt;fields&gt;;
3346 !private &lt;fields&gt;;
3347 !private &lt;methods&gt;;
3348@@ -668,7 +861,7 @@
3349 interfaces of the serializable classes (using something like "<code>-keep
3350 interface MyInterface</code>"), since these names are also used when
3351 computing the UID. A fast but sub-optimal alternative would be simply
3352- keeping all interfaces with "<code>-keep interface *</code>".
3353+ keeping all interfaces with "<code>-keep interface *</code>".</li>
3354
3355 </ul>
3356 <p>
3357@@ -679,8 +872,8 @@
3358 ever be serialized. Knowing your application and tuning the configuration
3359 often produces more compact results.
3360
3361-<a name="beans">&nbsp;</a>
3362-<h3>Processing bean classes</h3>
3363+<h3><a name="beans">Processing bean classes</a></h3>
3364+
3365 If your application, applet, servlet, library, etc., makes extensive use of
3366 introspection on bean classes to find bean editor classes, or getter and
3367 setter methods, then configuration may become painful. There's not much else
3368@@ -715,8 +908,8 @@
3369 array or non-array). The methods with the '<code>int</code>' arguments matches
3370 properties that are lists.
3371
3372-<a name="annotations">&nbsp;</a>
3373-<h3>Processing annotations</h3>
3374+<h3><a name="annotations">Processing annotations</a></h3>
3375+
3376 If your application, applet, servlet, library, etc., uses annotations, you may
3377 want to preserve them in the processed output. Annotations are represented by
3378 attributes that have no direct effect on the execution of the code. However,
3379@@ -744,8 +937,8 @@
3380 -keepattributes EnclosingMethod
3381 </pre>
3382
3383-<a name="database">&nbsp;</a>
3384-<h3>Processing database drivers</h3>
3385+<h3><a name="database">Processing database drivers</a></h3>
3386+
3387 Database drivers are implementations of the <code>Driver</code> interface.
3388 Since they are often created dynamically, you may want to preserve any
3389 implementations that you are processing as entry points:
3390@@ -758,8 +951,8 @@
3391 instantiating a driver in your code (without necessarily implementing any
3392 drivers yourself).
3393
3394-<a name="componentui">&nbsp;</a>
3395-<h3>Processing ComponentUI classes</h3>
3396+<h3><a name="componentui">Processing ComponentUI classes</a></h3>
3397+
3398 Swing UI look and feels are implemented as extensions of the
3399 <code>ComponentUI</code> class. For some reason, these have to contain a
3400 static method <code>createUI</code>, which the Swing API invokes using
3401@@ -773,8 +966,8 @@
3402 <p>
3403 This option also keeps the classes themselves.
3404
3405-<a name="rmi">&nbsp;</a>
3406-<h3>Processing RMI code</h3>
3407+<h3><a name="rmi">Processing RMI code</a></h3>
3408+
3409 Reportedly, the easiest way to handle RMI code is to process the code with
3410 ProGuard first and then invoke the <code>rmic</code> tool. If that is not
3411 possible, you may want to try something like this:
3412@@ -798,8 +991,29 @@
3413 handling code performs introspection to check whether the method signatures
3414 are compatible.
3415
3416-<a name="resourcefiles">&nbsp;</a>
3417-<h3>Processing resource files</h3>
3418+<h3><a name="injection">Processing resource injection</a></h3>
3419+
3420+If your application is using JEE-style resource injection, the application
3421+container will automatically assign instances of resource classes to fields and
3422+methods that are annotated with <code>@Resource</code>. The container applies
3423+introspection, even accessing private class members directly. It typically
3424+constructs a resource name based on the type name and the class member name.
3425+We then have to avoid that such class members are removed or renamed:
3426+<pre>
3427+-keepclassmembers class * {
3428+ @javax.annotation.Resource *;
3429+}
3430+</pre>
3431+<p>
3432+The Spring framework has another similar annotation <code>@Autowired</code>:
3433+<pre>
3434+-keepclassmembers class * {
3435+ @org.springframework.beans.factory.annotation.Autowired *;
3436+}
3437+</pre>
3438+
3439+<h3><a name="resourcefiles">Processing resource files</a></h3>
3440+
3441 If your application, applet, servlet, library, etc., contains resource files,
3442 it may be necessary to adapt their names and/or their contents when the
3443 application is obfuscated. The following two options can achieve this
3444@@ -818,8 +1032,31 @@
3445 replaces these names by the obfuscated names (if any). You'll probably want to
3446 adapt the filters to suit your application.
3447
3448-<a name="stacktrace">&nbsp;</a>
3449-<h3>Producing useful obfuscated stack traces</h3>
3450+<h3><a name="manifestfiles">Processing manifest files</a></h3>
3451+
3452+As illustrated in the previous section, manifest files can be treated like
3453+ordinary resource files. ProGuard can adapt obfuscated class names in the
3454+files, but it won't make any other changes. If you want anything else, you
3455+should apply an external tool. For instance, if a manifest file contains
3456+signing information, you should sign the jar again after it has been
3457+processed.
3458+<p>
3459+If you're merging several input jars into a single output jar, you'll have to
3460+pick one, typically by specifying <a href="usage.html#filters">filters</a>:
3461+<pre>
3462+-injars in1.jar
3463+-injars in2.jar(!META-INF/MANIFEST.MF)
3464+-injars in3.jar(!META-INF/MANIFEST.MF)
3465+-outjars out.jar
3466+</pre>
3467+<p>
3468+The filters will let ProGuard copy the manifest file from the first jar and
3469+ignore any manifest files in the second and third input jars. Note that
3470+ProGuard will leave the order of the files in the jars unchanged; manifest
3471+files are not necessarily put first.
3472+
3473+<h3><a name="stacktrace">Producing useful obfuscated stack traces</a></h3>
3474+
3475 These options let obfuscated applications or libraries produce stack traces
3476 that can still be deciphered later on:
3477 <pre>
3478@@ -844,8 +1081,8 @@
3479 <code>out.map</code>. The information can then be used by the <a
3480 href="retrace/index.html">ReTrace</a> tool to restore the original stack trace.
3481
3482-<a name="repackaging">&nbsp;</a>
3483-<h3>Obfuscating package names</h3>
3484+<h3><a name="repackaging">Obfuscating package names</a></h3>
3485+
3486 Package names can be obfuscated in various ways, with increasing levels of
3487 obfuscation and compactness. For example, consider the following classes:
3488 <pre>
3489@@ -951,8 +1188,8 @@
3490 all code. Notably, you may have to take into account that your application may
3491 contain <a href="#resourcefiles">resource files</a> that have to be adapted.
3492
3493-<a name="restructuring">&nbsp;</a>
3494-<h3>Restructuring the output archives</h3>
3495+<h3><a name="restructuring">Restructuring the output archives</a></h3>
3496+
3497 In simple applications, all output classes and resources files are merged into
3498 a single jar. For example:
3499 <pre>
3500@@ -1022,12 +1259,12 @@
3501 always tries to package output archives in a sensible way, reconstructing the
3502 input entries as much as required.
3503
3504-<a name="filtering">&nbsp;</a>
3505-<h3>Filtering the input and the output</h3>
3506+<h3><a name="filtering">Filtering the input and the output</a></h3>
3507
3508-If you want even greater control, you can add filters to the input and the
3509-output, filtering out zips, ears, wars, jars, and/or ordinary files. For
3510-example, if you want to disregard certain files from an input jar:
3511+If you want even greater control, you can add
3512+<a href="usage.html#filters">filters</a> to the input and the output,
3513+filtering out zips, ears, wars, jars, and/or ordinary files. For example, if
3514+you want to disregard certain files from an input jar:
3515 <pre>
3516 -injars in.jar(!images/**)
3517 -outjars out.jar
3518@@ -1080,10 +1317,10 @@
3519 <code>resources_out.jar</code>.
3520 <p>
3521 Again, the filtering can be arbitrarily complex, especially when combined with
3522-the grouping of input and output.
3523-
3524-<a name="multiple">&nbsp;</a>
3525-<h3>Processing multiple applications at once</h3>
3526+grouping input and output.
3527+
3528+<h3><a name="multiple">Processing multiple applications at once</a></h3>
3529+
3530 You can process several dependent or independent applications (or applets,
3531 midlets,...) in one go, in order to save time and effort. ProGuard's input and
3532 output handling offers various ways to keep the output nicely structured.
3533@@ -1100,10 +1337,10 @@
3534 </pre>
3535 <p>
3536 After processing, the directory <code>processed_applications</code> will
3537-contain the processed application jars, with their original names.
3538-
3539-<a name="incremental">&nbsp;</a>
3540-<h3>Incremental obfuscation</h3>
3541+contain processed versions of application jars, with their original names.
3542+
3543+<h3><a name="incremental">Incremental obfuscation</a></h3>
3544+
3545 After having <a href="#application">processed an application</a>, e.g.
3546 ProGuard itself, you can still incrementally add other pieces of code that
3547 depend on it, e.g. the ProGuard GUI:
3548@@ -1149,18 +1386,18 @@
3549 }
3550 </pre>
3551
3552-<a name="microedition">&nbsp;</a>
3553-<h3>Preverifying class files for Java Micro Edition</h3>
3554+<h3><a name="microedition">Preverifying class files for Java Micro Edition</a></h3>
3555+
3556 Even if you're not interested in shrinking, optimizing, and obfuscating your
3557 midlets, as shown in the <a href="#midlets">midlets example</a>, you can still
3558 use ProGuard to preverify the class files for Java Micro Edition. ProGuard
3559-produces slightly more compact results compared to the traditional external
3560+produces slightly more compact results than the traditional external
3561 preverifier.
3562 <pre>
3563 -injars in.jar
3564 -outjars out.jar
3565--libraryjars /usr/local/java/wtk2.1/lib/midpapi20.jar
3566--libraryjars /usr/local/java/wtk2.1/lib/cldcapi11.jar
3567+-libraryjars /usr/local/java/wtk2.5.2/lib/midpapi20.jar
3568+-libraryjars /usr/local/java/wtk2.5.2/lib/cldcapi11.jar
3569
3570 -dontshrink
3571 -dontoptimize
3572@@ -1175,8 +1412,8 @@
3573 that we don't need any <code>-keep</code> options to specify entry points; all
3574 class files are simply preverified.
3575
3576-<a name="upgrade">&nbsp;</a>
3577-<h3>Upgrading class files to Java 6</h3>
3578+<h3><a name="upgrade">Upgrading class files to Java 6</a></h3>
3579+
3580 The following options upgrade class files to Java 6, by updating their
3581 internal version numbers and preverifying them. The class files can then be
3582 loaded more efficiently by the Java 6 Virtual Machine.
3583@@ -1198,8 +1435,8 @@
3584 any <code>-keep</code> options to specify entry points; all class files are
3585 simply updated and preverified.
3586
3587-<a name="deadcode">&nbsp;</a>
3588-<h3>Finding dead code</h3>
3589+<h3><a name="deadcode">Finding dead code</a></h3>
3590+
3591 These options list unused classes, fields, and methods in the application
3592 <code>mypackage.MyApplication</code>:
3593 <pre>
3594@@ -1232,8 +1469,8 @@
3595 }
3596 </pre>
3597
3598-<a name="structure">&nbsp;</a>
3599-<h3>Printing out the internal structure of class files</h3>
3600+<h3><a name="structure">Printing out the internal structure of class files</a></h3>
3601+
3602 These options print out the internal structure of all class files in the input
3603 jar:
3604 <pre>
3605@@ -1250,8 +1487,7 @@
3606 Note how we don't need to specify the Java run-time jar, because we're not
3607 processing the input jar at all.
3608
3609-<a name="annotated">&nbsp;</a>
3610-<h3>Using annotations to configure ProGuard</h3>
3611+<h3><a name="annotated">Using annotations to configure ProGuard</a></h3>
3612
3613 The traditional ProGuard configuration allows to keep a clean separation
3614 between the code and the configuration for shrinking, optimization, and
3615@@ -1291,12 +1527,12 @@
3616 <p>
3617 The directory <code>examples/annotations</code> contains more examples that
3618 illustrate some of the possibilities.
3619-<p>
3620
3621-<hr>
3622+<hr />
3623+<noscript><div><a target="_top" href="../index.html" class="button">Show menu</a></div></noscript>
3624 <address>
3625-Copyright &copy; 2002-2009
3626-<a href="http://www.graphics.cornell.edu/~eric/">Eric Lafortune</a>.
3627+Copyright &copy; 2002-2012
3628+<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>.
3629 </address>
3630 </body>
3631 </html>
3632
3633=== modified file 'docs/manual/gui.html'
3634--- docs/manual/gui.html 2009-10-09 16:17:49 +0000
3635+++ docs/manual/gui.html 2012-07-12 00:24:28 +0000
3636@@ -1,10 +1,21 @@
3637-<!doctype html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
3638+<!doctype html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
3639 <html>
3640 <head>
3641 <meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
3642 <meta http-equiv="content-style-type" content="text/css">
3643 <link rel="stylesheet" type="text/css" href="style.css">
3644 <title>ProGuard GUI</title>
3645+<script type="text/javascript" language="JavaScript">
3646+<!--
3647+if (window.self==window.top)
3648+ window.top.location.replace("../index.html#"+window.location.pathname+window.location.hash);
3649+else {
3650+ var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), "");
3651+ if (window.top.location.hash!=hash)
3652+ window.top.location.hash=hash;
3653+}
3654+//-->
3655+</script>
3656 </head>
3657 <body>
3658
3659@@ -15,10 +26,12 @@
3660 <p class="code">
3661 <code><b>java -jar proguardgui.jar</b> [-nosplash] </code>[<i>configuration_file</i>]
3662 </p>
3663-The GUI will pop up in a window. With the <code>-nosplash</code> option, you
3664-can switch off the short opening animation. If you have specified a ProGuard
3665-configuration file, it will be loaded. The GUI works like a wizard. You can
3666-edit the configuration and execute ProGuard through a few tabs:
3667+Alternatively, the <code>bin</code> directory contains some short Linux and
3668+Windows scripts containing this command. The GUI will pop up in a window. With
3669+the <code>-nosplash</code> option, you can switch off the short opening
3670+animation. If you have specified a ProGuard configuration file, it will be
3671+loaded. The GUI works like a wizard. You can edit the configuration and
3672+execute ProGuard through a few tabs:
3673 <p>
3674
3675 <table cellspacing="5" cellpadding="5">
3676@@ -57,8 +70,7 @@
3677 href="introduction.html">Introduction</a> of this manual.
3678 <p>
3679
3680-<a name="proguard">&nbsp;</a>
3681-<h2>The ProGuard Tab</h2>
3682+<h2><a name="proguard">The ProGuard Tab</a></h2>
3683
3684 The <i>ProGuard</i> tab presents a welcome message and one important button at
3685 the bottom:
3686@@ -75,8 +87,7 @@
3687 creating a new configuration from scratch.
3688 <p>
3689
3690-<a name="inputoutput">&nbsp;</a>
3691-<h2>The Input/Output Tab</h2>
3692+<h2><a name="inputoutput">The Input/Output Tab</a></h2>
3693
3694 The <i>Input/Output</i> tab contains two lists, respectively to specify the
3695 program jars (or wars, ears, zips, or directories), and the library jars (or
3696@@ -88,12 +99,12 @@
3697 entries specify the destinations to which the processed results will be
3698 written. They are preceded by arrows, to distinguish them from input
3699 entries. The results of each consecutive list of input entries will be
3700- written to the subsequent consecutive list of output entries.
3701+ written to the subsequent consecutive list of output entries.</li>
3702
3703 <li>The library jars are not copied to the output jars; they contain class
3704 files that are used by class files in the program jars and that are
3705 necessary for correct processing. This list typically at least contains the
3706- targeted Java runtime jar.
3707+ targeted Java runtime jar.</li>
3708 </ul>
3709 <p>
3710
3711@@ -145,16 +156,15 @@
3712
3713 Corresponding configuration options:
3714 <ul type="none">
3715-<li>-<a href="usage.html#injars">injars</a>
3716-<li>-<a href="usage.html#outjars">outjars</a>
3717-<li>-<a href="usage.html#libraryjars">libraryjars</a>
3718-<li><a href="usage.html#classpath"><i>class_path</i></a>
3719-<li><a href="usage.html#filters"><i>filters</i></a>
3720+<li>-<a href="usage.html#injars">injars</a></li>
3721+<li>-<a href="usage.html#outjars">outjars</a></li>
3722+<li>-<a href="usage.html#libraryjars">libraryjars</a></li>
3723+<li><a href="usage.html#classpath"><i>class_path</i></a></li>
3724+<li><a href="usage.html#filters"><i>filters</i></a></li>
3725 </ul>
3726 <p>
3727
3728-<a name="shrinking">&nbsp;</a>
3729-<h2>The Shrinking Tab</h2>
3730+<h2><a name="shrinking">The Shrinking Tab</a></h2>
3731
3732 The <i>Shrinking</i> tab presents a number of options that affect the
3733 shrinking step. The basic options are followed by a few lists of classes and
3734@@ -224,41 +234,41 @@
3735 <ul>
3736 <li>The <b>Comments</b> text field allows to add optional comments to this
3737 entry. The comments will identify the entry in the list and they will
3738- appear as comments in the configuration file.
3739+ appear as comments in the configuration file.</li>
3740
3741 <li>The <b>Keep</b> selection allows to specify whether you want to protect
3742 the specified classes and their specified class members, or just the
3743 specified class members from the specified classes, or the specified
3744 classes and the specified class members, if the class members are present.
3745 Note that class members will only be protected if they are explicitly
3746- specified, even if only by means of a wildcard.
3747+ specified, even if only by means of a wildcard.</li>
3748
3749 <li>The <b>Allow</b> selection allows to specify whether you want to allow the
3750 the specified classes and their specified class members to be shrunk,
3751- optimized and/or obfuscated.
3752+ optimized and/or obfuscated.</li>
3753
3754 <li>The <b>Access</b> selections allows to specify constraints on the class or
3755- classes, based on their access modifiers.
3756+ classes, based on their access modifiers.</li>
3757
3758 <li>The <b>Annotation</b> text field takes the fully-qualified name of an
3759 annotation that is required for matching classes. The annotation name can
3760 contain wildcards. This is an advanced option for defining <i>keep</i>
3761- annotations.
3762+ annotations.</li>
3763
3764 <li>The <b>Class</b> text field takes the fully-qualified name of the class or
3765- classes. The class name can contain wildcards.
3766+ classes. The class name can contain wildcards.</li>
3767
3768 <li>The <b>Annotation</b> text field takes the fully-qualified name of an
3769 annotation that is required for the class or interface that the above
3770 class must extend. The annotation name can contain wildcards. This is an
3771- advanced option for defining <i>keep</i> annotations.
3772+ advanced option for defining <i>keep</i> annotations.</li>
3773
3774 <li>The <b>Extends/implements class</b> text field takes the fully-qualified
3775- name of the class or interface that the above classes must extend.
3776+ name of the class or interface that the above classes must extend.</li>
3777
3778 <li>The <b>Class members</b> list allows to specify a list of fields and
3779 methods to keep. It can be edited by means of a list of buttons on the
3780- right-hand side.
3781+ right-hand side.</li>
3782 </ul>
3783 <p>
3784
3785@@ -270,18 +280,18 @@
3786
3787 <ul>
3788 <li>The <b>Access</b> selections allows to specify constraints on the field or
3789- fields, based on their access modifiers.
3790+ fields, based on their access modifiers.</li>
3791
3792 <li>The <b>Annotation</b> text field takes the fully-qualified name of an
3793 annotation that is required for matching fields. The annotation name can
3794 contain wildcards. This is an advanced option for defining <i>keep</i>
3795- annotations.
3796+ annotations.</li>
3797
3798 <li>The <b>Return type</b> text field takes the fully-qualified type of the
3799- field or fields. The type can contain wildcards.
3800+ field or fields. The type can contain wildcards.</li>
3801
3802 <li>The <b>Name</b> text field takes the name of the field or fields. The field
3803- name can contain wildcards.
3804+ name can contain wildcards.</li>
3805 </ul>
3806 <p>
3807
3808@@ -293,36 +303,35 @@
3809
3810 <ul>
3811 <li>The <b>Access</b> selections allows to specify constraints on the method or
3812- methods, based on their access modifiers.
3813+ methods, based on their access modifiers.</li>
3814
3815 <li>The <b>Annotation</b> text field takes the fully-qualified name of an
3816 annotation that is required for matching methods. The annotation name can
3817 contain wildcards. This is an advanced option for defining <i>keep</i>
3818- annotations.
3819+ annotations.</li>
3820
3821-<li>The <b>Return type</b> text field takes the fully-qualified type of the method or methods. The type can contain wildcards.
3822+<li>The <b>Return type</b> text field takes the fully-qualified type of the method or methods. The type can contain wildcards.</li>
3823
3824 <li>The <b>Name</b> text field takes the name of the method or methods. The
3825- method name can contain wildcards.
3826+ method name can contain wildcards.</li>
3827
3828 <li>The <b>Arguments</b> text field takes the comma-separated list of
3829 fully-qualified method arguments. Each of these arguments can contain
3830- wildcards.
3831+ wildcards.</li>
3832 </ul>
3833 <p>
3834
3835 Corresponding configuration options:
3836 <ul type="none">
3837-<li>-<a href="usage.html#dontshrink">dontshrink</a>
3838-<li>-<a href="usage.html#printusage">printusage</a>
3839-<li>-<a href="usage.html#keep">keep</a>
3840-<li>-<a href="usage.html#keepclassmembers">keepclassmembers</a>
3841-<li>-<a href="usage.html#keepclasseswithmembers">keepclasseswithmembers</a>
3842+<li>-<a href="usage.html#dontshrink">dontshrink</a></li>
3843+<li>-<a href="usage.html#printusage">printusage</a></li>
3844+<li>-<a href="usage.html#keep">keep</a></li>
3845+<li>-<a href="usage.html#keepclassmembers">keepclassmembers</a></li>
3846+<li>-<a href="usage.html#keepclasseswithmembers">keepclasseswithmembers</a></li>
3847 </ul>
3848 <p>
3849
3850-<a name="obfuscation">&nbsp;</a>
3851-<h2>The Obfuscation Tab</h2>
3852+<h2><a name="obfuscation">The Obfuscation Tab</a></h2>
3853
3854 The <i>Obfuscation</i> tab presents a number of options that affect the
3855 obfuscation step. The basic options are followed by a few lists of classes and
3856@@ -336,32 +345,32 @@
3857
3858 Corresponding configuration options:
3859 <ul type="none">
3860-<li>-<a href="usage.html#dontobfuscate">dontobfuscate</a>
3861-<li>-<a href="usage.html#printmapping">printmapping</a>
3862-<li>-<a href="usage.html#applymapping">applymapping</a>
3863-<li>-<a href="usage.html#obfuscationdictionary">obfuscationdictionary</a>
3864-<li>-<a href="usage.html#classobfuscationdictionary">classobfuscationdictionary</a>
3865-<li>-<a href="usage.html#packageobfuscationdictionary">packageobfuscationdictionary</a>
3866-<li>-<a href="usage.html#overloadaggressively">overloadaggressively</a>
3867-<li>-<a href="usage.html#useuniqueclassmembernames">useuniqueclassmembernames</a>
3868-<li>-<a href="usage.html#dontusemixedcaseclassnames">dontusemixedcaseclassnames</a>
3869-<li>-<a href="usage.html#keeppackagenames">keeppackagenames</a>
3870-<li>-<a href="usage.html#flattenpackagehierarchy">flattenpackagehierarchy</a>
3871-<li>-<a href="usage.html#repackageclasses">repackageclasses</a>
3872-<li>-<a href="usage.html#keepattributes">keepattributes</a>
3873-<li>-<a href="usage.html#renamesourcefileattribute">renamesourcefileattribute</a>
3874-<li>-<a href="usage.html#adaptclassstrings">adaptclassstrings</a>
3875-<li>-<a href="usage.html#adaptresourcefilenames">adaptresourcefilenames</a>
3876-<li>-<a href="usage.html#adaptresourcefilecontents">adaptresourcefilecontents</a>
3877-<li>-<a href="usage.html#keepnames">keepnames</a>
3878-<li>-<a href="usage.html#keepclassmembernames">keepclassmembernames</a>
3879-<li>-<a href="usage.html#keepclasseswithmembernames">keepclasseswithmembernames</a>
3880-<li><a href="usage.html#classspecification"><i>class_specification</i></a>
3881+<li>-<a href="usage.html#dontobfuscate">dontobfuscate</a></li>
3882+<li>-<a href="usage.html#printmapping">printmapping</a></li>
3883+<li>-<a href="usage.html#applymapping">applymapping</a></li>
3884+<li>-<a href="usage.html#obfuscationdictionary">obfuscationdictionary</a></li>
3885+<li>-<a href="usage.html#classobfuscationdictionary">classobfuscationdictionary</a></li>
3886+<li>-<a href="usage.html#packageobfuscationdictionary">packageobfuscationdictionary</a></li>
3887+<li>-<a href="usage.html#overloadaggressively">overloadaggressively</a></li>
3888+<li>-<a href="usage.html#useuniqueclassmembernames">useuniqueclassmembernames</a></li>
3889+<li>-<a href="usage.html#dontusemixedcaseclassnames">dontusemixedcaseclassnames</a></li>
3890+<li>-<a href="usage.html#keeppackagenames">keeppackagenames</a></li>
3891+<li>-<a href="usage.html#flattenpackagehierarchy">flattenpackagehierarchy</a></li>
3892+<li>-<a href="usage.html#repackageclasses">repackageclasses</a></li>
3893+<li>-<a href="usage.html#keepattributes">keepattributes</a></li>
3894+<li>-<a href="usage.html#keepparameternames">keepparameternames</a></li>
3895+<li>-<a href="usage.html#renamesourcefileattribute">renamesourcefileattribute</a></li>
3896+<li>-<a href="usage.html#adaptclassstrings">adaptclassstrings</a></li>
3897+<li>-<a href="usage.html#adaptresourcefilenames">adaptresourcefilenames</a></li>
3898+<li>-<a href="usage.html#adaptresourcefilecontents">adaptresourcefilecontents</a></li>
3899+<li>-<a href="usage.html#keepnames">keepnames</a></li>
3900+<li>-<a href="usage.html#keepclassmembernames">keepclassmembernames</a></li>
3901+<li>-<a href="usage.html#keepclasseswithmembernames">keepclasseswithmembernames</a></li>
3902+<li><a href="usage.html#classspecification"><i>class_specification</i></a></li>
3903 </ul>
3904 <p>
3905
3906-<a name="optimization">&nbsp;</a>
3907-<h2>The Optimization Tab</h2>
3908+<h2><a name="optimization">The Optimization Tab</a></h2>
3909
3910 The <i>Optimization</i> tab presents a number of options that affect the
3911 optimization step. The basic options are followed by a few lists of class
3912@@ -375,18 +384,17 @@
3913
3914 Corresponding configuration options:
3915 <ul type="none">
3916-<li>-<a href="usage.html#dontoptimize">dontoptimize</a>
3917-<li>-<a href="usage.html#optimizations">optimizations</a>
3918-<li>-<a href="usage.html#optimizationpasses">optimizationpasses</a>
3919-<li>-<a href="usage.html#allowaccessmodification">allowaccessmodification</a>
3920-<li>-<a href="usage.html#mergeinterfacesaggressively">mergeinterfacesaggressively</a>
3921-<li>-<a href="usage.html#assumenosideeffects">assumenosideeffects</a>
3922-<li><a href="usage.html#classspecification"><i>class_specification</i></a>
3923+<li>-<a href="usage.html#dontoptimize">dontoptimize</a></li>
3924+<li>-<a href="usage.html#optimizations">optimizations</a></li>
3925+<li>-<a href="usage.html#optimizationpasses">optimizationpasses</a></li>
3926+<li>-<a href="usage.html#allowaccessmodification">allowaccessmodification</a></li>
3927+<li>-<a href="usage.html#mergeinterfacesaggressively">mergeinterfacesaggressively</a></li>
3928+<li>-<a href="usage.html#assumenosideeffects">assumenosideeffects</a></li>
3929+<li><a href="usage.html#classspecification"><i>class_specification</i></a></li>
3930 </ul>
3931 <p>
3932
3933-<a name="information">&nbsp;</a>
3934-<h2>The Information Tab</h2>
3935+<h2><a name="information">The Information Tab</a></h2>
3936
3937 The <i>Information</i> tab presents a number of options for preverification
3938 and targeting, and for the information that ProGuard returns when processing
3939@@ -396,26 +404,26 @@
3940
3941 Corresponding configuration options:
3942 <ul type="none">
3943-<li>-<a href="usage.html#dontpreverify">dontpreverify</a>
3944-<li>-<a href="usage.html#microedition">microedition</a>
3945-<li>-<a href="usage.html#target">target</a>
3946-<li>-<a href="usage.html#verbose">verbose</a>
3947-<li>-<a href="usage.html#dontnote">dontnote</a>
3948-<li>-<a href="usage.html#dontwarn">dontwarn</a>
3949-<li>-<a href="usage.html#ignorewarnings">ignorewarnings</a>
3950-<li>-<a href="usage.html#dontskipnonpubliclibraryclasses">dontskipnonpubliclibraryclasses</a>
3951-<li>-<a href="usage.html#dontskipnonpubliclibraryclassmembers">dontskipnonpubliclibraryclassmembers</a>
3952-<li>-<a href="usage.html#keepdirectories">keepdirectories</a>
3953-<li>-<a href="usage.html#forceprocessing">forceprocessing</a>
3954-<li>-<a href="usage.html#printseeds">printseeds</a>
3955-<li>-<a href="usage.html#printconfiguration">printconfiguration</a>
3956-<li>-<a href="usage.html#dump">dump</a>
3957-<li>-<a href="usage.html#whyareyoukeeping">whyareyoukeeping</a>
3958+<li>-<a href="usage.html#dontpreverify">dontpreverify</a></li>
3959+<li>-<a href="usage.html#microedition">microedition</a></li>
3960+<li>-<a href="usage.html#target">target</a></li>
3961+<li>-<a href="usage.html#verbose">verbose</a></li>
3962+<li>-<a href="usage.html#dontnote">dontnote</a></li>
3963+<li>-<a href="usage.html#dontwarn">dontwarn</a></li>
3964+<li>-<a href="usage.html#ignorewarnings">ignorewarnings</a></li>
3965+<li>-<a href="usage.html#skipnonpubliclibraryclasses">skipnonpubliclibraryclasses</a></li>
3966+<li>-<a href="usage.html#dontskipnonpubliclibraryclasses">dontskipnonpubliclibraryclasses</a></li>
3967+<li>-<a href="usage.html#dontskipnonpubliclibraryclassmembers">dontskipnonpubliclibraryclassmembers</a></li>
3968+<li>-<a href="usage.html#keepdirectories">keepdirectories</a></li>
3969+<li>-<a href="usage.html#forceprocessing">forceprocessing</a></li>
3970+<li>-<a href="usage.html#printseeds">printseeds</a></li>
3971+<li>-<a href="usage.html#printconfiguration">printconfiguration</a></li>
3972+<li>-<a href="usage.html#dump">dump</a></li>
3973+<li>-<a href="usage.html#whyareyoukeeping">whyareyoukeeping</a></li>
3974 </ul>
3975 <p>
3976
3977-<a name="process">&nbsp;</a>
3978-<h2>The Process Tab</h2>
3979+<h2><a name="process">The Process Tab</a></h2>
3980
3981 The <i>Process</i> tab has an output console for displaying the configuration
3982 and the messages while processing. There are three important buttons at the
3983@@ -433,8 +441,7 @@
3984 </table>
3985 <p>
3986
3987-<a name="retrace">&nbsp;</a>
3988-<h2>The ReTrace Tab</h2>
3989+<h2><a name="retrace">The ReTrace Tab</a></h2>
3990
3991 The <i>ReTrace</i> tab has a panel with a few settings, an input text area for
3992 the obfuscated stack trace, and an output console to view the de-obfuscated
3993@@ -442,16 +449,16 @@
3994
3995 <ul>
3996 <li>The <b>Verbose</b> check box in the settings panel allows to toggle between
3997- normal mode and verbose mode.
3998+ normal mode and verbose mode.</li>
3999
4000 <li>The <b>Mapping file</b> text field takes the name of the required mapping
4001 file that ProGuard wrote while processing the original code. The file name
4002 can be entered manually or by means of the <b>Browse...</b> button that
4003- opens a file chooser.
4004+ opens a file chooser.</li>
4005
4006 <li>The <b>Obfuscated stack trace</b> text area allows to enter the stack
4007 trace, typically by copying and pasting it from elsewhere. Alternatively,
4008- it can be loaded from a file by means of the load button below.
4009+ it can be loaded from a file by means of the load button below.</li>
4010 </ul>
4011
4012 There are two buttons at the bottom:
4013@@ -463,12 +470,12 @@
4014 <tr><td class="button">ReTrace!</td>
4015 <td>executes ReTrace with the current settings.</td></tr>
4016 </table>
4017-<p>
4018
4019-<hr>
4020+<hr />
4021+<noscript><div><a target="_top" href="../index.html" class="button">Show menu</a></div></noscript>
4022 <address>
4023-Copyright &copy; 2002-2009
4024-<a href="http://www.graphics.cornell.edu/~eric/">Eric Lafortune</a>.
4025+Copyright &copy; 2002-2012
4026+<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>.
4027 </address>
4028 </body>
4029 </html>
4030
4031=== modified file 'docs/manual/index.html'
4032--- docs/manual/index.html 2009-10-09 16:17:49 +0000
4033+++ docs/manual/index.html 2012-07-12 00:24:28 +0000
4034@@ -1,39 +1,51 @@
4035-<!doctype html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
4036+<!doctype html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
4037 <html>
4038 <head>
4039 <meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
4040 <meta http-equiv="content-style-type" content="text/css">
4041 <link rel="stylesheet" type="text/css" href="style.css">
4042 <title>ProGuard Manual</title>
4043+<script type="text/javascript" language="JavaScript">
4044+<!--
4045+if (window.self==window.top)
4046+ window.top.location.replace("../index.html#"+window.location.pathname+window.location.hash);
4047+else {
4048+ var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), "");
4049+ if (window.top.location.hash!=hash)
4050+ window.top.location.hash=hash;
4051+}
4052+//-->
4053+</script>
4054 </head>
4055 <body>
4056
4057 <h2>ProGuard</h2>
4058
4059 <ol>
4060-<li><a href="introduction.html">Introduction</a>
4061-<li><a href="usage.html">Usage</a>
4062-<li><a href="limitations.html">Limitations</a>
4063-<li><a href="examples.html">Examples</a>
4064-<li><a href="troubleshooting.html">Troubleshooting</a>
4065-<li><a href="refcard.html">Reference Card</a>
4066-<li><a href="gui.html">Graphical User Interface</a>
4067-<li><a href="ant.html">Ant Task</a>
4068-<li><a href="wtk.html">JME Wireless Toolkit Integration</a>
4069+<li><a href="introduction.html">Introduction</a></li>
4070+<li><a href="usage.html">Usage</a></li>
4071+<li><a href="limitations.html">Limitations</a></li>
4072+<li><a href="examples.html">Examples</a></li>
4073+<li><a href="troubleshooting.html">Troubleshooting</a></li>
4074+<li><a href="refcard.html">Reference Card</a></li>
4075+<li><a href="gui.html">Graphical User Interface</a></li>
4076+<li><a href="ant.html">Ant Task</a></li>
4077+<li><a href="wtk.html">JME Wireless Toolkit Integration</a></li>
4078 </ol>
4079
4080 <h2>ReTrace</h2>
4081
4082 <ol>
4083-<li><a href="retrace/introduction.html">Introduction</a>
4084-<li><a href="retrace/usage.html">Usage</a>
4085-<li><a href="retrace/examples.html">Examples</a>
4086+<li><a href="retrace/introduction.html">Introduction</a></li>
4087+<li><a href="retrace/usage.html">Usage</a></li>
4088+<li><a href="retrace/examples.html">Examples</a></li>
4089 </ol>
4090
4091-<hr>
4092+<hr />
4093+<noscript><div><a target="_top" href="../index.html" class="button">Show menu</a></div></noscript>
4094 <address>
4095-Copyright &copy; 2002-2009
4096-<a href="http://www.graphics.cornell.edu/~eric/">Eric Lafortune</a>.
4097+Copyright &copy; 2002-2012
4098+<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>.
4099 </address>
4100 </body>
4101 </html>
4102
4103=== modified file 'docs/manual/introduction.html'
4104--- docs/manual/introduction.html 2009-10-09 16:17:49 +0000
4105+++ docs/manual/introduction.html 2012-07-12 00:24:28 +0000
4106@@ -1,10 +1,21 @@
4107-<!doctype html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
4108+<!doctype html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
4109 <html>
4110 <head>
4111 <meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
4112 <meta http-equiv="content-style-type" content="text/css">
4113 <link rel="stylesheet" type="text/css" href="style.css">
4114 <title>ProGuard Introduction</title>
4115+<script type="text/javascript" language="JavaScript">
4116+<!--
4117+if (window.self==window.top)
4118+ window.top.location.replace("../index.html#"+window.location.pathname+window.location.hash);
4119+else {
4120+ var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), "");
4121+ if (window.top.location.hash!=hash)
4122+ window.top.location.hash=hash;
4123+}
4124+//-->
4125+</script>
4126 </head>
4127 <body>
4128
4129@@ -17,8 +28,7 @@
4130 fields, and methods using short meaningless names. These first steps make the
4131 code base smaller, more efficient, and harder to reverse-engineer. The final
4132 preverification step adds preverification information to the classes, which is
4133-required for Java Micro Edition or which improves the start-up time for Java
4134-6.
4135+required for Java Micro Edition and for Java 6 and higher.
4136 <p>
4137 Each of these steps is optional. For instance, ProGuard can also be used to
4138 just list dead code in an application, or to preverify class files for
4139@@ -62,13 +72,13 @@
4140 </table>
4141 <p>
4142
4143-ProGuard typically reads the <b>input jars</b> (or wars, ears, zips, or
4144-directories). It then shrinks, optimizes, obfuscates, and preverifies them.
4145-Optionally, multiple optimization passes can be performed, each typically
4146-followed by another shrinking step. ProGuard writes the processed results to
4147-one or more <b>output jars</b> (or wars, ears, zips, or directories). The
4148-input may contain resource files, whose names and contents can optionally be
4149-updated to reflect the obfuscated class names.
4150+ProGuard first reads the <b>input jars</b> (or wars, ears, zips, or
4151+directories). It then subsequently shrinks, optimizes, obfuscates, and
4152+preverifies them. You can optionally let ProGuard perform multiple
4153+optimization passes. ProGuard writes the processed results to one or
4154+more <b>output jars</b> (or wars, ears, zips, or directories). The input may
4155+contain resource files, whose names and contents can optionally be updated to
4156+reflect the obfuscated class names.
4157 <p>
4158 ProGuard requires the <b>library jars</b> (or wars, ears, zips, or
4159 directories) of the input jars to be specified. These are essentially the
4160@@ -76,63 +86,69 @@
4161 reconstruct the class dependencies that are necessary for proper processing.
4162 The library jars themselves always remain unchanged. You should still put them
4163 in the class path of your final application.
4164-<p>
4165+
4166+<h3>Entry points</h3>
4167+
4168 In order to determine which code has to be preserved and which code can be
4169 discarded or obfuscated, you have to specify one or more <i>entry points</i> to
4170 your code. These entry points are typically classes with main methods, applets,
4171-midlets, etc.
4172+midlets, activities, etc.
4173 <ul>
4174 <li>In the <b>shrinking step</b>, ProGuard starts from these seeds and
4175 recursively determines which classes and class members are used. All other
4176- classes and class members are discarded.
4177+ classes and class members are discarded.</li>
4178
4179 <li>In the <b>optimization step</b>, ProGuard further optimizes the code.
4180 Among other optimizations, classes and methods that are not entry points
4181 can be made private, static, or final, unused parameters can be removed,
4182- and some methods may be inlined.
4183+ and some methods may be inlined.</li>
4184
4185 <li>In the <b>obfuscation step</b>, ProGuard renames classes and class members
4186 that are not entry points. In this entire process, keeping the entry
4187- points ensures that they can still be accessed by their original names.
4188+ points ensures that they can still be accessed by their original names.</li>
4189
4190 <li>The <b>preverification step</b> is the only step that doesn't have to know
4191- the entry points.
4192+ the entry points.</li>
4193 </ul>
4194 <p>
4195 The <a href="usage.html">Usage section</a> of this manual describes the
4196 necessary <a href="usage.html#keepoptions"><code>-keep</code> options</a> and
4197 the <a href="examples.html">Examples section</a> provides plenty of examples.
4198
4199-<h3>Introspection</h3>
4200+<h3>Reflection</h3>
4201
4202-Introspection presents particular problems for any automatic processing of
4203-code. In ProGuard, classes or class members in your code that are created or
4204-invoked dynamically (that is, by name) have to be specified as entry points
4205-too. For example, <code>Class.forName()</code> constructs may refer to any
4206-class at run-time. It is generally impossible to foresee which classes have to
4207-be preserved (with their original names), since the class names might be read
4208-from a configuration file, for instance. You therefore have to specify them in
4209-your ProGuard configuration, with the same simple <code>-keep</code> options.
4210+Reflection and introspection present particular problems for any automatic
4211+processing of code. In ProGuard, classes or class members in your code that
4212+are created or invoked dynamically (that is, by name) have to be specified as
4213+entry points too. For example, <code>Class.forName()</code> constructs may
4214+refer to any class at run-time. It is generally impossible to compute which
4215+classes have to be preserved (with their original names), since the class
4216+names might be read from a configuration file, for instance. You therefore
4217+have to specify them in your ProGuard configuration, with the same
4218+simple <code>-keep</code> options.
4219 <p>
4220 However, ProGuard will already detect and handle the following cases for you:
4221
4222 <ul>
4223-<li><code>Class.forName("SomeClass")</code>
4224-<li><code>SomeClass.class</code>
4225-<li><code>SomeClass.class.getField("someField")</code>
4226-<li><code>SomeClass.class.getDeclaredField("someField")</code>
4227-<li><code>SomeClass.class.getMethod("someMethod", new Class[] {})</code>
4228-<li><code>SomeClass.class.getMethod("someMethod", new Class[] { A.class })</code>
4229-<li><code>SomeClass.class.getMethod("someMethod", new Class[] { A.class, B.class })</code>
4230-<li><code>SomeClass.class.getDeclaredMethod("someMethod", new Class[] {})</code>
4231-<li><code>SomeClass.class.getDeclaredMethod("someMethod", new Class[] { A.class })</code>
4232-<li><code>SomeClass.class.getDeclaredMethod("someMethod", new Class[] { A.class, B.class })</code>
4233+<li><code>Class.forName("SomeClass")</code></li>
4234+<li><code>SomeClass.class</code></li>
4235+<li><code>SomeClass.class.getField("someField")</code></li>
4236+<li><code>SomeClass.class.getDeclaredField("someField")</code></li>
4237+<li><code>SomeClass.class.getMethod("someMethod", new Class[] {})</code></li>
4238+<li><code>SomeClass.class.getMethod("someMethod", new Class[] { A.class })</code></li>
4239+<li><code>SomeClass.class.getMethod("someMethod", new Class[] { A.class, B.class })</code></li>
4240+<li><code>SomeClass.class.getDeclaredMethod("someMethod", new Class[] {})</code></li>
4241+<li><code>SomeClass.class.getDeclaredMethod("someMethod", new Class[] { A.class })</code></li>
4242+<li><code>SomeClass.class.getDeclaredMethod("someMethod", new Class[] { A.class, B.class })</code></li>
4243+<li><code>AtomicIntegerFieldUpdater.newUpdater(SomeClass.class, "someField")</code></li>
4244+<li><code>AtomicLongFieldUpdater.newUpdater(SomeClass.class, "someField")</code></li>
4245+<li><code>AtomicReferenceFieldUpdater.newUpdater(SomeClass.class, SomeType.class, "someField")</code></li>
4246 </ul>
4247
4248 The names of the classes and class members may of course be different, but the
4249 constructs should be literally the same for ProGuard to recognize them. The
4250 referenced classes and class members are preserved in the shrinking phase, and
4251-the string arguments are properly replaced in the obfuscation phase.
4252+the string arguments are properly updated in the obfuscation phase.
4253 <p>
4254 Furthermore, ProGuard will offer some suggestions if keeping some classes or
4255 class members appears necessary. For example, ProGuard will note constructs
4256@@ -142,15 +158,15 @@
4257 configuration accordingly.
4258 <p>
4259 For proper results, you should at least be somewhat familiar with the code
4260-that you are processing. Obfuscating code that performs a lot of introspection
4261+that you are processing. Obfuscating code that performs a lot of reflection
4262 may require trial and error, especially without the necessary information
4263 about the internals of the code.
4264-<p>
4265
4266-<hr>
4267+<hr />
4268+<noscript><div><a target="_top" href="../index.html" class="button">Show menu</a></div></noscript>
4269 <address>
4270-Copyright &copy; 2002-2009
4271-<a href="http://www.graphics.cornell.edu/~eric/">Eric Lafortune</a>.
4272+Copyright &copy; 2002-2012
4273+<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>.
4274 </address>
4275 </body>
4276 </html>
4277
4278=== modified file 'docs/manual/limitations.html'
4279--- docs/manual/limitations.html 2009-10-09 16:17:49 +0000
4280+++ docs/manual/limitations.html 2012-07-12 00:24:28 +0000
4281@@ -1,10 +1,21 @@
4282-<!doctype html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
4283+<!doctype html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
4284 <html>
4285 <head>
4286 <meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
4287 <meta http-equiv="content-style-type" content="text/css">
4288 <link rel="stylesheet" type="text/css" href="style.css">
4289 <title>ProGuard Limitations</title>
4290+<script type="text/javascript" language="JavaScript">
4291+<!--
4292+if (window.self==window.top)
4293+ window.top.location.replace("../index.html#"+window.location.pathname+window.location.hash);
4294+else {
4295+ var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), "");
4296+ if (window.top.location.hash!=hash)
4297+ window.top.location.hash=hash;
4298+}
4299+//-->
4300+</script>
4301 </head>
4302 <body>
4303
4304@@ -13,16 +24,7 @@
4305 When using ProGuard, you should be aware of a few technical issues, all of
4306 which are easily avoided or resolved:
4307 <p>
4308-<ul>
4309-
4310-<li>For efficiency, ProGuard always ignores any <b>private or package visible
4311- library classes</b> while reading library jars. If any of them are
4312- extended by public library classes, and then extended again by input
4313- classes, ProGuard will complain it can't find them. In that case, you'll
4314- have to use the <code>-dontskipnonpubliclibraryclasses</code> option, and
4315- maybe even the <code>-dontskipnonpubliclibraryclassmembers</code> option.
4316- The graphical user interface has checkboxes for these settings.
4317- <p>
4318+<ul class="spacious">
4319
4320 <li>For best results, ProGuard's optimization algorithms assume that the
4321 processed code never <b>intentionally throws NullPointerExceptions</b> or
4322@@ -33,32 +35,35 @@
4323 <code>myObject</code> might be null, causing a NullPointerException. In
4324 some way this is a good thing: optimized code may throw fewer exceptions.
4325 Should this entire assumption be false, you'll have to switch off
4326- optimization using the <code>-dontoptimize</code> option.
4327- <p>
4328+ optimization using the <code>-dontoptimize</code> option.</li>
4329+
4330+<li>ProGuard's optimization algorithms currently also assume that the
4331+ processed code never creates <b>busy-waiting loops</b> without at least
4332+ testing on a volatile field. Again, it may remove such loops. Should this
4333+ assumption be false, you'll have to switch off optimization using
4334+ the <code>-dontoptimize</code> option.</li>
4335
4336 <li>If an input jar and a library jar contain classes in the <b>same
4337 package</b>, the obfuscated output jar may contain class names that
4338 overlap with class names in the library jar. This is most likely if the
4339 library jar has been obfuscated before, as it will then probably contain
4340 classes named 'a', 'b', etc. Packages should therefore never be split
4341- across input jars and library jars.
4342- <p>
4343+ across input jars and library jars.</li>
4344
4345-<li>When obfuscating, ProGuard will write out class files named
4346- "<code>a.class</code>", "<code>b.class</code>", etc. If there is a large
4347- numbers of classes in the same package, it may also write out
4348- <b>"<code>aux.class</code>"</b>. Windows doesn't allow creating files with
4349- this reserved name (among a few other names), so it's generally better to
4350- write the output to a jar, in order to avoid such problems.
4351- <p>
4352+<li>When obfuscating, ProGuard writes out class files named
4353+ "<code>a.class</code>", "<code>b.class</code>", etc. If a package contains
4354+ a large number of classes, ProGuard may also write out
4355+ <b>"<code>aux.class</code>"</b>. Inconveniently, Windows refuses to create
4356+ files with this reserved name (among a few other names). It's generally
4357+ better to write the output to a jar, in order to avoid such problems.</li>
4358
4359 </ul>
4360-<p>
4361
4362-<hr>
4363+<hr />
4364+<noscript><div><a target="_top" href="../index.html" class="button">Show menu</a></div></noscript>
4365 <address>
4366-Copyright &copy; 2002-2009
4367-<a href="http://www.graphics.cornell.edu/~eric/">Eric Lafortune</a>.
4368+Copyright &copy; 2002-2012
4369+<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>.
4370 </address>
4371 </body>
4372 </html>
4373
4374=== modified file 'docs/manual/optimizations.html'
4375--- docs/manual/optimizations.html 2009-10-09 16:17:49 +0000
4376+++ docs/manual/optimizations.html 2012-07-12 00:24:28 +0000
4377@@ -1,10 +1,21 @@
4378-<!doctype html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
4379+<!doctype html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
4380 <html>
4381 <head>
4382 <meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
4383 <meta http-equiv="content-style-type" content="text/css">
4384 <link rel="stylesheet" type="text/css" href="style.css">
4385 <title>Optimizations</title>
4386+<script type="text/javascript" language="JavaScript">
4387+<!--
4388+if (window.self==window.top)
4389+ window.top.location.replace("../index.html#"+window.location.pathname+window.location.hash);
4390+else {
4391+ var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), "");
4392+ if (window.top.location.hash!=hash)
4393+ window.top.location.hash=hash;
4394+}
4395+//-->
4396+</script>
4397 </head>
4398 <body>
4399
4400@@ -124,6 +135,9 @@
4401 <code><b>code/simplification/branch</b></code></dt>
4402 <dd>Performs peephole optimizations for branch instructions.</dd>
4403
4404+<dt><code><b>code/simplification/string</b></code></dt>
4405+<dd>Performs peephole optimizations for constant strings.</dd>
4406+
4407 <dt><div>(<i>best used with</i> <code>code/removal/advanced</code>)</div>
4408 <code><b>code/simplification/advanced</b></code></dt>
4409 <dd>Simplifies code based on control flow analysis and data flow
4410@@ -142,17 +156,17 @@
4411 <dd>Removes unused variables from the local variable frame.</dd>
4412
4413 <dt><code><b>code/removal/exception</b></code></dt>
4414-<dd>Removes exceptions with empty catch blocks.</dd>
4415+<dd>Removes exceptions with empty try blocks.</dd>
4416
4417 <dt><code><b>code/allocation/variable</b></code></dt>
4418 <dd>Optimizes variable allocation on the local variable frame.</dd>
4419 </dl>
4420-<p>
4421
4422-<hr>
4423+<hr />
4424+<noscript><div><a target="_top" href="../index.html" class="button">Show menu</a></div></noscript>
4425 <address>
4426-Copyright &copy; 2002-2009
4427-<a href="http://www.graphics.cornell.edu/~eric/">Eric Lafortune</a>.
4428+Copyright &copy; 2002-2012
4429+<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>.
4430 </address>
4431 </body>
4432 </html>
4433
4434=== modified file 'docs/manual/refcard.html'
4435--- docs/manual/refcard.html 2009-10-09 16:17:49 +0000
4436+++ docs/manual/refcard.html 2012-07-12 00:24:28 +0000
4437@@ -1,10 +1,21 @@
4438-<!doctype html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
4439+<!doctype html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
4440 <html>
4441 <head>
4442 <meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
4443 <meta http-equiv="content-style-type" content="text/css">
4444 <link rel="stylesheet" type="text/css" href="style.css">
4445 <title>ProGuard Reference Card</title>
4446+<script type="text/javascript" language="JavaScript">
4447+<!--
4448+if (window.self==window.top)
4449+ window.top.location.replace("../index.html#"+window.location.pathname+window.location.hash);
4450+else {
4451+ var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), "");
4452+ if (window.top.location.hash!=hash)
4453+ window.top.location.hash=hash;
4454+}
4455+//-->
4456+</script>
4457 </head>
4458 <body>
4459
4460@@ -52,7 +63,7 @@
4461 <tr>
4462 <td valign="top"><a href="usage.html#outjars"><code><b>-outjars</b></code></a>
4463 <a href="usage.html#classpath"><i>class_path</i></a></td>
4464-<td>Specifies the name of the output jars (or wars, ears, zips, or
4465+<td>Specifies the names of the output jars (or wars, ears, zips, or
4466 directories).</td>
4467 </tr>
4468
4469@@ -63,8 +74,13 @@
4470 </tr>
4471
4472 <tr>
4473+<td valign="top"><a href="usage.html#skipnonpubliclibraryclasses"><code><b>-skipnonpubliclibraryclasses</b></code></a></td>
4474+<td>Ignore non-public library classes.</td>
4475+</tr>
4476+
4477+<tr>
4478 <td valign="top"><a href="usage.html#dontskipnonpubliclibraryclasses"><code><b>-dontskipnonpubliclibraryclasses</b></code></a></td>
4479-<td>Don't ignore non-public library classes.</td>
4480+<td>Don't ignore non-public library classes (the default).</td>
4481 </tr>
4482
4483 <tr>
4484@@ -281,6 +297,11 @@
4485 </tr>
4486
4487 <tr>
4488+<td valign="top"><a href="usage.html#keepparameternames"><code><b>-keepparameternames</b></code></a></td>
4489+<td>Keep the parameter names and types of methods that are kept.</td>
4490+</tr>
4491+
4492+<tr>
4493 <td valign="top"><a href="usage.html#renamesourcefileattribute"><code><b>-renamesourcefileattribute</b></code></a>
4494 [<i>string</i>]</td>
4495 <td>Put the given constant string in the <code>SourceFile</code>
4496@@ -345,28 +366,28 @@
4497 <tr>
4498 <td valign="top"><a href="usage.html#printconfiguration"><code><b>-printconfiguration</b></code></a>
4499 [<a href="usage.html#filename"><i>filename</i></a>]</td>
4500+<td>Write out the entire configuration in traditional ProGuard style, to the
4501+ standard output or to the given file.</td>
4502+</tr>
4503+
4504+<tr>
4505+<td valign="top"><a href="usage.html#dump"><code><b>-dump</b></code></a>
4506+ [<a href="usage.html#filename"><i>filename</i></a>]</td>
4507 <td>Write out the internal structure of the processed class files, to the
4508 standard output or to the given file.</td>
4509 </tr>
4510
4511-<tr>
4512-<td valign="top"><a href="usage.html#dump"><code><b>-dump</b></code></a>
4513- [<a href="usage.html#filename"><i>filename</i></a>]</td>
4514-<td>Write out the entire configuration in traditional ProGuard style, to the
4515- standard output or to the given file.</td>
4516-</tr>
4517-
4518 </table>
4519 <p>
4520 Notes:
4521 <ul>
4522
4523 <li><i>class_path</i> is a list of jars, wars, ears, zips, and directories,
4524- with optional filters, separated by path separators.
4525+ with optional filters, separated by path separators.</li>
4526 <li><i>filename</i> can contain Java system properties delimited by
4527- '<b>&lt;</b>' and '<b>&gt;</b>'.
4528+ '<b>&lt;</b>' and '<b>&gt;</b>'.</li>
4529 <li>If <i>filename</i> contains special characters, the entire name
4530- should be quoted with single or double quotes.
4531+ should be quoted with single or double quotes.</li>
4532 </ul>
4533 <p>
4534
4535@@ -443,23 +464,23 @@
4536 Notes:
4537 <ul>
4538 <li>Class names must always be fully qualified, i.e. including their package
4539- names.
4540+ names.</li>
4541 <li>Types in <i>classname</i>, <i>annotationtype</i>, <i>returntype</i>, and
4542 <i>argumenttype</i> can contain wildcards: '<code><b>?</b></code>' for a
4543 single character, '<code><b>*</b></code>' for any number of characters
4544 (but not the package separator), '<code><b>**</b></code>' for any number
4545 of (any) characters, '<code><b>%</b></code>' for any primitive type,
4546- '<code><b>***</b></code>' for any type, and '<code><b>...</b></code>' for any number of arguments..
4547+ '<code><b>***</b></code>' for any type, and '<code><b>...</b></code>' for any number of arguments.</li>
4548 <li><i>fieldname</i> and <i>methodname</i> can contain wildcards as well:
4549 '<code><b>?</b></code>' for a single character and '<code><b>*</b></code>'
4550- for any number of characters.
4551+ for any number of characters.</li>
4552 </ul>
4553-<p>
4554
4555-<hr>
4556+<hr />
4557+<noscript><div><a target="_top" href="../index.html" class="button">Show menu</a></div></noscript>
4558 <address>
4559-Copyright &copy; 2002-2009
4560-<a href="http://www.graphics.cornell.edu/~eric/">Eric Lafortune</a>.
4561+Copyright &copy; 2002-2012
4562+<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>.
4563 </address>
4564 </body>
4565 </html>
4566
4567=== modified file 'docs/manual/retrace/examples.html'
4568--- docs/manual/retrace/examples.html 2009-10-09 16:17:49 +0000
4569+++ docs/manual/retrace/examples.html 2012-07-12 00:24:28 +0000
4570@@ -1,10 +1,21 @@
4571-<!doctype html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
4572+<!doctype html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
4573 <html>
4574 <head>
4575 <meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
4576 <meta http-equiv="content-style-type" content="text/css">
4577 <link rel="stylesheet" type="text/css" href="../style.css">
4578 <title>ReTrace Examples</title>
4579+<script type="text/javascript" language="JavaScript">
4580+<!--
4581+if (window.self==window.top)
4582+ window.top.location.replace("../../index.html#"+window.location.pathname+window.location.hash);
4583+else {
4584+ var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), "");
4585+ if (window.top.location.hash!=hash)
4586+ window.top.location.hash=hash;
4587+}
4588+//-->
4589+</script>
4590 </head>
4591 <body>
4592
4593@@ -12,13 +23,13 @@
4594
4595 Some typical example uses:
4596 <ol>
4597-<li><a href="#with">Restoring a stack trace with line numbers</a>
4598-<li><a href="#withverbose">Restoring a stack trace with line numbers (verbose)</a>
4599-<li><a href="#without">Restoring a stack trace without line numbers</a>
4600+<li><a href="#with">Restoring a stack trace with line numbers</a></li>
4601+<li><a href="#withverbose">Restoring a stack trace with line numbers
4602+ (verbose)</a></li>
4603+<li><a href="#without">Restoring a stack trace without line numbers</a></li>
4604 </ol>
4605
4606-<a name="with">&nbsp;</a>
4607-<h3>Restoring a stack trace with line numbers</h3>
4608+<h3><a name="with">Restoring a stack trace with line numbers</a></h3>
4609
4610 Assume for instance ProGuard itself has been obfuscated using the following
4611 extra options:
4612@@ -133,8 +144,7 @@
4613 at proguard.ProGuard.main(ProGuard:429)
4614 </pre>
4615
4616-<a name="withverbose">&nbsp;</a>
4617-<h3>Restoring a stack trace with line numbers (verbose)</h3>
4618+<h3><a name="withverbose">Restoring a stack trace with line numbers (verbose)</a></h3>
4619
4620 In the previous example, we could also use the verbose flag:
4621 <pre>
4622@@ -189,8 +199,7 @@
4623 </pre>
4624
4625
4626-<a name="without">&nbsp;</a>
4627-<h3>Restoring a stack trace without line numbers</h3>
4628+<h3><a name="without">Restoring a stack trace without line numbers</a></h3>
4629
4630 Assume for instance ProGuard itself has been obfuscated using the following
4631 extra options, this time without preserving the line number tables:
4632@@ -324,12 +333,12 @@
4633 execute
4634 at proguard.ProGuard.main(Unknown Source)
4635 </pre>
4636-<p>
4637
4638-<hr>
4639+<hr />
4640+<noscript><div><a target="_top" href="../../index.html" class="button">Show menu</a></div></noscript>
4641 <address>
4642-Copyright &copy; 2002-2009
4643-<a href="http://www.graphics.cornell.edu/~eric/">Eric Lafortune</a>.
4644+Copyright &copy; 2002-2012
4645+<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>.
4646 </address>
4647 </body>
4648 </html>
4649
4650=== modified file 'docs/manual/retrace/index.html'
4651--- docs/manual/retrace/index.html 2009-10-09 16:17:49 +0000
4652+++ docs/manual/retrace/index.html 2012-07-12 00:24:28 +0000
4653@@ -1,25 +1,37 @@
4654-<!doctype html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
4655+<!doctype html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
4656 <html>
4657 <head>
4658 <meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
4659 <meta http-equiv="content-style-type" content="text/css">
4660 <link rel="stylesheet" type="text/css" href="../style.css">
4661 <title>ReTrace Manual</title>
4662+<script type="text/javascript" language="JavaScript">
4663+<!--
4664+if (window.self==window.top)
4665+ window.top.location.replace("../../index.html#"+window.location.pathname+window.location.hash);
4666+else {
4667+ var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), "");
4668+ if (window.top.location.hash!=hash)
4669+ window.top.location.hash=hash;
4670+}
4671+//-->
4672+</script>
4673 </head>
4674 <body>
4675
4676 <h2>ReTrace</h2>
4677
4678 <ol>
4679-<li><a href="introduction.html">Introduction</a>
4680-<li><a href="usage.html">Usage</a>
4681-<li><a href="examples.html">Examples</a>
4682+<li><a href="introduction.html">Introduction</a></li>
4683+<li><a href="usage.html">Usage</a></li>
4684+<li><a href="examples.html">Examples</a></li>
4685 </ol>
4686
4687-<hr>
4688+<hr />
4689+<noscript><div><a target="_top" href="../../index.html" class="button">Show menu</a></div></noscript>
4690 <address>
4691-Copyright &copy; 2002-2009
4692-<a href="http://www.graphics.cornell.edu/~eric/">Eric Lafortune</a>.
4693+Copyright &copy; 2002-2012
4694+<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>.
4695 </address>
4696 </body>
4697 </html>
4698
4699=== modified file 'docs/manual/retrace/introduction.html'
4700--- docs/manual/retrace/introduction.html 2009-10-09 16:17:49 +0000
4701+++ docs/manual/retrace/introduction.html 2012-07-12 00:24:28 +0000
4702@@ -1,10 +1,21 @@
4703-<!doctype html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
4704+<!doctype html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
4705 <html>
4706 <head>
4707 <meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
4708 <meta http-equiv="content-style-type" content="text/css">
4709 <link rel="stylesheet" type="text/css" href="../style.css">
4710 <title>ReTrace Introduction</title>
4711+<script type="text/javascript" language="JavaScript">
4712+<!--
4713+if (window.self==window.top)
4714+ window.top.location.replace("../../index.html#"+window.location.pathname+window.location.hash);
4715+else {
4716+ var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), "");
4717+ if (window.top.location.hash!=hash)
4718+ window.top.location.hash=hash;
4719+}
4720+//-->
4721+</script>
4722 </head>
4723 <body>
4724
4725@@ -56,12 +67,12 @@
4726 look like without obfuscation. The restoration is based on the mapping file
4727 that ProGuard can write out during obfuscation. The mapping file links the
4728 original class names and class member names to their obfuscated names.
4729-<p>
4730
4731-<hr>
4732+<hr />
4733+<noscript><div><a target="_top" href="../../index.html" class="button">Show menu</a></div></noscript>
4734 <address>
4735-Copyright &copy; 2002-2009
4736-<a href="http://www.graphics.cornell.edu/~eric/">Eric Lafortune</a>.
4737+Copyright &copy; 2002-2012
4738+<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>.
4739 </address>
4740 </body>
4741 </html>
4742
4743=== modified file 'docs/manual/retrace/usage.html'
4744--- docs/manual/retrace/usage.html 2009-10-09 16:17:49 +0000
4745+++ docs/manual/retrace/usage.html 2012-07-12 00:24:28 +0000
4746@@ -1,10 +1,21 @@
4747-<!doctype html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
4748+<!doctype html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
4749 <html>
4750 <head>
4751 <meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
4752 <meta http-equiv="content-style-type" content="text/css">
4753 <link rel="stylesheet" type="text/css" href="../style.css">
4754 <title>ReTrace Usage</title>
4755+<script type="text/javascript" language="JavaScript">
4756+<!--
4757+if (window.self==window.top)
4758+ window.top.location.replace("../../index.html#"+window.location.pathname+window.location.hash);
4759+else {
4760+ var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), "");
4761+ if (window.top.location.hash!=hash)
4762+ window.top.location.hash=hash;
4763+}
4764+//-->
4765+</script>
4766 </head>
4767 <body>
4768
4769@@ -17,7 +28,8 @@
4770 <code><b>java -jar retrace.jar </b></code>[<i>options...</i>]
4771 <i>mapping_file</i> [<i>stacktrace_file</i>]
4772 </p>
4773-These are the arguments:
4774+Alternatively, the <code>bin</code> directory contains some short Linux and
4775+Windows scripts containing this command. These are the arguments:
4776
4777 <dl>
4778 <dt><i>mapping_file</i></dt>
4779@@ -48,7 +60,7 @@
4780 de-obfuscate more general types of input than just stack traces. The
4781 default is suitable for stack traces produced by most JVMs:
4782 <pre>
4783- (?:\s*%c:.*)|(?:\s*at\s+%c.%m\s*\(.*?(?::%l)?\)\s*)
4784+ (?:.*?\bat\s+%c.%m\s*\(.*?(?::%l)?\)\s*)|(?:(?:.*?[:"]\s+)?%c(?::.*)?)
4785 </pre>
4786 The regular expression is a Java regular expression (cfr. the documentation
4787 of <code>java.util.regex.Pattern</code>), with a few additional wildcards:
4788@@ -87,14 +99,13 @@
4789
4790 <ul>
4791 <li>If all line numbers have been preserved while obfuscating the application,
4792- ReTrace will be able to restore the stack trace completely.
4793- <p>
4794+ ReTrace will be able to restore the stack trace completely.</li>
4795
4796 <li>If the line numbers have been removed, mapping obfuscated method names
4797 back to their original names has become ambiguous. Retrace will list all
4798 possible original method names for each line in the stack trace. The user
4799 can then try to deduce the actual stack trace manually, based on the logic
4800- of the program.
4801+ of the program.</li>
4802
4803 </ul>
4804 <p>
4805@@ -105,12 +116,12 @@
4806
4807 Unobfuscated elements and obfuscated elements for which no mapping is available
4808 will be left unchanged.
4809-<p>
4810
4811-<hr>
4812+<hr />
4813+<noscript><div><a target="_top" href="../../index.html" class="button">Show menu</a></div></noscript>
4814 <address>
4815-Copyright &copy; 2002-2009
4816-<a href="http://www.graphics.cornell.edu/~eric/">Eric Lafortune</a>.
4817+Copyright &copy; 2002-2012
4818+<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>.
4819 </address>
4820 </body>
4821 </html>
4822
4823=== modified file 'docs/manual/sections.html'
4824--- docs/manual/sections.html 2008-05-15 10:39:48 +0000
4825+++ docs/manual/sections.html 2012-07-12 00:24:28 +0000
4826@@ -1,4 +1,4 @@
4827-<!doctype html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
4828+<!doctype html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
4829 <html>
4830 <head>
4831 <meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
4832@@ -42,22 +42,18 @@
4833 document.write(document.location.hostname == "proguard.sourceforge.net" ?
4834 "http://sourceforge.net/sflogo.php?group_id=54750&amp;type=1" :
4835 "../sflogo.png");
4836-document.write("\" width=\"88\" height=\"31\" alt=\"SourceForge\">");
4837+document.write("\" width=\"88\" height=\"31\" alt=\"SourceForge\" />");
4838 //-->
4839 </script>
4840 <noscript>
4841-<img src="../sflogo.png" width="88" height="31" alt="SourceForge">
4842+<img src="../sflogo.png" width="88" height="31" alt="SourceForge" />
4843 </noscript>
4844
4845 </a>
4846
4847 <p>
4848-<a href="http://www.luciad.com/" target="other">
4849-<img src="../luciadlogo.png" width="88" height="24" alt="Luciad"></a>
4850-
4851-<p>
4852-<a href="http://www.javadocking.com/" target="other">
4853-<img src="../sanawarelogo.png" width="88" height="24" alt="Luciad"></a>
4854+<a href="http://www.saikoa.com/" target="_top">
4855+<img src="../saikoalogo.png" width="88" height="19" alt="Saikoa" /></a>
4856 </center>
4857
4858 </body>
4859
4860=== modified file 'docs/manual/style.css'
4861--- docs/manual/style.css 2009-10-09 16:17:49 +0000
4862+++ docs/manual/style.css 2012-07-12 00:24:28 +0000
4863@@ -2,20 +2,24 @@
4864
4865 /* Global settings. */
4866
4867-body {
4868+body
4869+{
4870 background: #FFFFFF;
4871 }
4872
4873-h1 {
4874+h1
4875+{
4876 text-align: center;
4877 }
4878
4879-h2 {
4880+h2
4881+{
4882 background: #EEEEFF;
4883 padding: 10px;
4884 }
4885
4886-dt {
4887+dt
4888+{
4889 padding: 6px;
4890 }
4891
4892@@ -25,23 +29,50 @@
4893 float: right;
4894 }
4895
4896-dd {
4897+dd
4898+{
4899 padding: 6px;
4900 }
4901
4902-pre {
4903+pre
4904+{
4905 padding: 10px;
4906 background: #E0E0E0;
4907 }
4908
4909+.spacious li
4910+{
4911+ padding: 8px;
4912+}
4913+
4914+.shifted li
4915+{
4916+ margin-left: 50px;
4917+}
4918+
4919+img.float
4920+{
4921+ float: left;
4922+}
4923+
4924 a
4925 {
4926 text-decoration: none;
4927 }
4928
4929+a.button
4930+{
4931+ color: #000000;
4932+ text-decoration: none;
4933+ background: #E0E0E0;
4934+ border: 1px outset #FFFFFF;
4935+ float: right;
4936+}
4937+
4938 /* Settings for variable width code. */
4939
4940-p.code {
4941+p.code
4942+{
4943 padding: 10px;
4944 background: #E0E0E0;
4945 }
4946@@ -49,34 +80,39 @@
4947
4948 /* Settings for diagrams. */
4949
4950-table.diagram {
4951+table.diagram
4952+{
4953 padding: 8px;
4954 border: none;
4955 border-spacing: 2px;
4956 }
4957
4958-td.transparentblock {
4959+td.transparentblock
4960+{
4961 text-align: center;
4962 padding: 10px 0px;
4963 }
4964
4965-td.whiteblock {
4966+td.whiteblock
4967+{
4968 width: 100px;
4969 text-align: center;
4970- border: solid #C0C0C0 1px;
4971+ border: 1px solid #C0C0C0;
4972 background: #E0E0E0;
4973 padding: 10px 0px;
4974 }
4975
4976-td.lightblock {
4977+td.lightblock
4978+{
4979 width: 100px;
4980 text-align: center;
4981- border: solid #8888FF 1px;
4982+ border: 1px solid #8888FF;
4983 background: #BBBBFF;
4984 padding: 20px 0px;
4985 }
4986
4987-td.darkblock {
4988+td.darkblock
4989+{
4990 width: 100px;
4991 text-align: center;
4992 background: #8888FF;
4993@@ -85,8 +121,9 @@
4994
4995 /* Settings for buttons. */
4996
4997-td.button {
4998+td.button
4999+{
5000 background: #E0E0E0;
The diff has been truncated for viewing.

Subscribers

People subscribed via source and target branches