Merge lp:~scarneiro/ubuntu/quantal/proguard/fix-for-888982 into lp:ubuntu/quantal/proguard
- Quantal (12.10)
- fix-for-888982
- Merge into quantal
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 |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
James Page | Approve | ||
Ubuntu branches | Pending | ||
Review via email:
|
Commit message
Description of the change
This is a new upstream version of proguard. It is needed to fix an FTBFS
in mobile-
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
![](/+icing/build/overlay/assets/skins/sam/images/close.gif)
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 | 1 | debian/patches | ||
7 | 0 | 2 | ||
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 | 1 | series | ||
13 | 0 | 2 | ||
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 | 1 | 2 | ||
19 | 0 | 2 | ||
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 | 30 | 30 | ||
25 | 31 | http://proguard.sourceforge.net/ | 31 | http://proguard.sourceforge.net/ |
26 | 32 | 32 | ||
28 | 33 | Copyright (c) 2002-2009 Eric Lafortune (eric@graphics.cornell.edu) | 33 | Copyright (c) 2002-2012 Eric Lafortune (eric@graphics.cornell.edu) |
29 | 34 | 34 | ||
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 | 2 | 2 | ||
35 | 3 | REM Start-up script for ProGuard -- free class file shrinker, optimizer, | 3 | REM Start-up script for ProGuard -- free class file shrinker, optimizer, |
36 | 4 | REM obfuscator, and preverifier for Java bytecode. | 4 | REM obfuscator, and preverifier for Java bytecode. |
37 | 5 | REM | ||
38 | 6 | REM Note: when passing file names containing spaces to this script, | ||
39 | 7 | REM you'll have to add escaped quotes around them, e.g. | ||
40 | 8 | REM "\"C:/My Directory/My File.txt\"" | ||
41 | 5 | 9 | ||
42 | 6 | IF EXIST "%PROGUARD_HOME%" GOTO home | 10 | IF EXIST "%PROGUARD_HOME%" GOTO home |
43 | 7 | SET PROGUARD_HOME=.. | 11 | SET PROGUARD_HOME=.. |
44 | 8 | :home | 12 | :home |
45 | 9 | 13 | ||
47 | 10 | java -jar "%PROGUARD_HOME%"\lib\proguard.jar %1 %2 %3 %4 %5 %6 %7 %8 %9 | 14 | java -jar "%PROGUARD_HOME%"\lib\proguard.jar %* |
48 | 11 | 15 | ||
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 | 2 | # | 2 | # |
54 | 3 | # Start-up script for ProGuard -- free class file shrinker, optimizer, | 3 | # Start-up script for ProGuard -- free class file shrinker, optimizer, |
55 | 4 | # obfuscator, and preverifier for Java bytecode. | 4 | # obfuscator, and preverifier for Java bytecode. |
56 | 5 | # | ||
57 | 6 | # Note: when passing file names containing spaces to this script, | ||
58 | 7 | # you'll have to add escaped quotes around them, e.g. | ||
59 | 8 | # "\"/My Directory/My File.txt\"" | ||
60 | 5 | 9 | ||
63 | 6 | PROGUARD_HOME=`dirname "$0"` | 10 | PROGUARD_HOME=`dirname "$0"`/.. |
62 | 7 | PROGUARD_HOME=`dirname "$PROGUARD_HOME"` | ||
64 | 8 | 11 | ||
65 | 9 | java -jar $PROGUARD_HOME/lib/proguard.jar "$@" | 12 | java -jar $PROGUARD_HOME/lib/proguard.jar "$@" |
66 | 10 | 13 | ||
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 | 2 | 2 | ||
72 | 3 | REM Start-up script for the GUI of ProGuard -- free class file shrinker, | 3 | REM Start-up script for the GUI of ProGuard -- free class file shrinker, |
73 | 4 | REM optimizer, obfuscator, and preverifier for Java bytecode. | 4 | REM optimizer, obfuscator, and preverifier for Java bytecode. |
74 | 5 | REM | ||
75 | 6 | REM Note: when passing file names containing spaces to this script, | ||
76 | 7 | REM you'll have to add escaped quotes around them, e.g. | ||
77 | 8 | REM "\"C:/My Directory/My File.txt\"" | ||
78 | 5 | 9 | ||
79 | 6 | IF EXIST "%PROGUARD_HOME%" GOTO home | 10 | IF EXIST "%PROGUARD_HOME%" GOTO home |
80 | 7 | SET PROGUARD_HOME=.. | 11 | SET PROGUARD_HOME=.. |
81 | 8 | :home | 12 | :home |
82 | 9 | 13 | ||
84 | 10 | java -jar "%PROGUARD_HOME%"\lib\proguardgui.jar %1 %2 %3 %4 %5 %6 %7 %8 %9 | 14 | java -jar "%PROGUARD_HOME%"\lib\proguardgui.jar %* |
85 | 11 | 15 | ||
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 | 2 | # | 2 | # |
91 | 3 | # Start-up script for the GUI of ProGuard -- free class file shrinker, | 3 | # Start-up script for the GUI of ProGuard -- free class file shrinker, |
92 | 4 | # optimizer, obfuscator, and preverifier for Java bytecode. | 4 | # optimizer, obfuscator, and preverifier for Java bytecode. |
98 | 5 | 5 | # | |
99 | 6 | PROGUARD_HOME=`dirname "$0"` | 6 | # Note: when passing file names containing spaces to this script, |
100 | 7 | PROGUARD_HOME=`dirname "$PROGUARD_HOME"` | 7 | # you'll have to add escaped quotes around them, e.g. |
101 | 8 | 8 | # "\"/My Directory/My File.txt\"" | |
102 | 9 | java -jar $PROGUARD_HOME/lib/proguardgui.jar "$@" | 9 | |
103 | 10 | PROGUARD_HOME=`dirname "$0"`/.. | ||
104 | 11 | |||
105 | 12 | # On Linux, Java 1.6.0_24 and higher hang when starting the GUI: | ||
106 | 13 | # http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7027598 | ||
107 | 14 | # We're using the -D option as a workaround. | ||
108 | 15 | java -DsuppressSwingDropSupport=true -jar $PROGUARD_HOME/lib/proguardgui.jar "$@" | ||
109 | 10 | 16 | ||
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 | 2 | 2 | ||
115 | 3 | REM Start-up script for Retrace -- companion tool for ProGuard, free class file | 3 | REM Start-up script for Retrace -- companion tool for ProGuard, free class file |
116 | 4 | REM shrinker, optimizer, obfuscator, and preverifier for Java bytecode. | 4 | REM shrinker, optimizer, obfuscator, and preverifier for Java bytecode. |
117 | 5 | REM | ||
118 | 6 | REM Note: when passing file names containing spaces to this script, | ||
119 | 7 | REM you'll have to add escaped quotes around them, e.g. | ||
120 | 8 | REM "\"C:/My Directory/My File.txt\"" | ||
121 | 5 | 9 | ||
122 | 6 | IF EXIST "%PROGUARD_HOME%" GOTO home | 10 | IF EXIST "%PROGUARD_HOME%" GOTO home |
123 | 7 | SET PROGUARD_HOME=.. | 11 | SET PROGUARD_HOME=.. |
124 | 8 | :home | 12 | :home |
125 | 9 | 13 | ||
127 | 10 | java -jar "%PROGUARD_HOME%"\lib\retrace.jar %1 %2 %3 %4 %5 %6 %7 %8 %9 | 14 | java -jar "%PROGUARD_HOME%"\lib\retrace.jar %* |
128 | 11 | 15 | ||
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 | 2 | # | 2 | # |
134 | 3 | # Start-up script for Retrace -- companion tool for ProGuard, free class file | 3 | # Start-up script for Retrace -- companion tool for ProGuard, free class file |
135 | 4 | # shrinker, optimizer, obfuscator, and preverifier for Java bytecode. | 4 | # shrinker, optimizer, obfuscator, and preverifier for Java bytecode. |
136 | 5 | # | ||
137 | 6 | # Note: when passing file names containing spaces to this script, | ||
138 | 7 | # you'll have to add escaped quotes around them, e.g. | ||
139 | 8 | # "\"/My Directory/My File.txt\"" | ||
140 | 5 | 9 | ||
143 | 6 | PROGUARD_HOME=`dirname "$0"` | 10 | PROGUARD_HOME=`dirname "$0"`/.. |
142 | 7 | PROGUARD_HOME=`dirname "$PROGUARD_HOME"` | ||
144 | 8 | 11 | ||
145 | 9 | java -jar $PROGUARD_HOME/lib/retrace.jar "$@" | 12 | java -jar $PROGUARD_HOME/lib/retrace.jar "$@" |
146 | 10 | 13 | ||
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 | 1 | ProGuard, Java class file shrinker, optimizer, obfuscator, and preverifier | ||
152 | 2 | ========================================================================== | ||
153 | 3 | |||
154 | 4 | This directory contains a number of alternative ways to build ProGuard: | ||
155 | 5 | |||
156 | 6 | - build.sh : a shell script for GNU/Linux | ||
157 | 7 | - makefile : a makefile for GNU/Linux | ||
158 | 8 | - build.xml : an Ant build file for all platforms | ||
159 | 9 | |||
160 | 10 | - As a final alternative, you can also easily compile the code from the | ||
161 | 11 | command line: | ||
162 | 12 | |||
163 | 13 | mkdir classes | ||
164 | 14 | javac -sourcepath src -d classes src/proguard/ProGuard.java | ||
165 | 15 | javac -sourcepath src -d classes src/proguard/gui/ProGuardGUI.java | ||
166 | 16 | javac -sourcepath src -d classes src/proguard/retrace/ReTrace.java | ||
167 | 17 | |||
168 | 18 | For the ProGuard Ant task: | ||
169 | 19 | |||
170 | 20 | javac -sourcepath src -d classes -classpath lib/ant.jar \ | ||
171 | 21 | src/proguard/ant/ProGuardTask.java | ||
172 | 22 | |||
173 | 23 | For the Java Micro Edition Wireless Tool Kit (JME WTK) obfuscator plug-in: | ||
174 | 24 | |||
175 | 25 | javac -sourcepath src -d classes -classpath wtklib/kenv.zip \ | ||
176 | 26 | src/proguard/wtk/ProGuardObfuscator.java | ||
177 | 27 | |||
178 | 28 | Note that you'll have to install Ant and the JME WTK yourself. | ||
179 | 29 | |||
180 | 30 | Enjoy! | ||
181 | 31 | |||
182 | 32 | http://proguard.sourceforge.net/ | ||
183 | 33 | |||
184 | 34 | Copyright (c) 2002-2012 Eric Lafortune (eric@graphics.cornell.edu) | ||
185 | 0 | 35 | ||
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 | 1 | proguard (4.8-0ubuntu1) quantal; urgency=low | ||
191 | 2 | |||
192 | 3 | * New upstream release. Necessary to fix FTBFS on | ||
193 | 4 | mobile-atlas-creator package. (LP: #888982) | ||
194 | 5 | * debian/control: Added build-essential to Build Depends. | ||
195 | 6 | * debian/pathes/debian-changes-4.8: create proguard and | ||
196 | 7 | proguardgui shell scripts. | ||
197 | 8 | |||
198 | 9 | -- Sebastian Carneiro <scarneiro@fibertel.com.ar> Wed, 11 Jul 2012 20:52:33 -0300 | ||
199 | 10 | |||
200 | 1 | proguard (4.4-2) unstable; urgency=low | 11 | proguard (4.4-2) unstable; urgency=low |
201 | 2 | 12 | ||
202 | 3 | * update to source format 3.0 (quilt) | 13 | * update to source format 3.0 (quilt) |
203 | 4 | 14 | ||
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 | 1 | Source: proguard | 1 | Source: proguard |
209 | 2 | Section: devel | 2 | Section: devel |
210 | 3 | Priority: optional | 3 | Priority: optional |
213 | 4 | Maintainer: Sam Clegg <samo@debian.org> | 4 | Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com> |
214 | 5 | Build-Depends: debhelper (>= 7.0.15), cdbs, default-jdk, ant | 5 | XSBC-Original-Maintainer: Sam Clegg <samo@debian.org> |
215 | 6 | Build-Depends: debhelper (>= 7.0.15), cdbs, default-jdk, ant, build-essential | ||
216 | 6 | Standards-Version: 3.8.3 | 7 | Standards-Version: 3.8.3 |
217 | 7 | 8 | ||
218 | 8 | Package: proguard | 9 | Package: proguard |
219 | 9 | 10 | ||
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 | 1 | Description: Upstream changes introduced in version 4.4-2 | ||
225 | 2 | This patch has been created by dpkg-source during the package build. | ||
226 | 3 | Here's the last changelog entry, hopefully it gives details on why | ||
227 | 4 | those changes were made: | ||
228 | 5 | . | ||
229 | 6 | proguard (4.4-2) unstable; urgency=low | ||
230 | 7 | . | ||
231 | 8 | * update to source format 3.0 (quilt) | ||
232 | 9 | . | ||
233 | 10 | The person named in the Author field signed this changelog entry. | ||
234 | 11 | Author: Sam Clegg <samo@debian.org> | ||
235 | 12 | |||
236 | 13 | --- | ||
237 | 14 | The information above should follow the Patch Tagging Guidelines, please | ||
238 | 15 | checkout http://dep.debian.net/deps/dep3/ to learn about the format. Here | ||
239 | 16 | are templates for supplementary fields that you might want to add: | ||
240 | 17 | |||
241 | 18 | Origin: <vendor|upstream|other>, <url of original patch> | ||
242 | 19 | Bug: <url in upstream bugtracker> | ||
243 | 20 | Bug-Debian: http://bugs.debian.org/<bugnumber> | ||
244 | 21 | Forwarded: <no|not-needed|url proving that it has been forwarded> | ||
245 | 22 | Reviewed-By: <name and email of someone who approved the patch> | ||
246 | 23 | Last-Update: <YYYY-MM-DD> | ||
247 | 24 | |||
248 | 25 | --- /dev/null | ||
249 | 26 | +++ proguard-4.4/proguard | ||
250 | 27 | @@ -0,0 +1,3 @@ | ||
251 | 28 | +#!/bin/sh | ||
252 | 29 | + | ||
253 | 30 | +exec java -Xss300000 -jar /usr/share/java/proguard.jar "$@" | ||
254 | 31 | --- /dev/null | ||
255 | 32 | +++ proguard-4.4/proguardgui | ||
256 | 33 | @@ -0,0 +1,3 @@ | ||
257 | 34 | +#!/bin/sh | ||
258 | 35 | + | ||
259 | 36 | +exec java -Xss300000 -cp /usr/share/java/proguard.jar:/usr/share/java/proguardgui.jar proguard.gui.ProGuardGUI "$@" | ||
260 | 37 | 0 | ||
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 | 1 | Description: Creates proguard and proguardgui shell scripts | ||
266 | 2 | This patch adds proguard and proguardgui shell scripts for starting up | ||
267 | 3 | proguard. | ||
268 | 4 | . | ||
269 | 5 | Bug-Ubuntu: https://launchpad.net/bugs/888982 | ||
270 | 6 | Forwarded: not-needed | ||
271 | 7 | Last-Update: 2012-11-07 | ||
272 | 8 | |||
273 | 9 | --- /dev/null | ||
274 | 10 | +++ proguard-4.8/proguard | ||
275 | 11 | @@ -0,0 +1,3 @@ | ||
276 | 12 | +#!/bin/sh | ||
277 | 13 | + | ||
278 | 14 | +exec java -Xss300000 -jar /usr/share/java/proguard.jar "$@" | ||
279 | 15 | --- /dev/null | ||
280 | 16 | +++ proguard-4.8/proguardgui | ||
281 | 17 | @@ -0,0 +1,3 @@ | ||
282 | 18 | +#!/bin/sh | ||
283 | 19 | + | ||
284 | 20 | +exec java -Xss300000 -cp /usr/share/java/proguard.jar:/usr/share/java/proguardgui.jar proguard.gui.ProGuardGUI "$@" | ||
285 | 0 | 21 | ||
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 @@ | |||
291 | 1 | debian-changes-4.4-2 | 1 | debian-changes-4.8 |
292 | 2 | 2 | ||
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 @@ | |||
298 | 1 | <!doctype html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> | 1 | <!doctype html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> |
299 | 2 | <html> | 2 | <html> |
300 | 3 | <head> | 3 | <head> |
301 | 4 | <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"> | 4 | <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"> |
302 | 5 | <meta http-equiv="content-style-type" content="text/css"> | 5 | <meta http-equiv="content-style-type" content="text/css"> |
303 | 6 | <link rel="stylesheet" type="text/css" href="style.css"> | 6 | <link rel="stylesheet" type="text/css" href="style.css"> |
304 | 7 | <title>ProGuard FAQ</title> | 7 | <title>ProGuard FAQ</title> |
305 | 8 | <script type="text/javascript" language="JavaScript"> | ||
306 | 9 | <!-- | ||
307 | 10 | if (window.self==window.top) | ||
308 | 11 | window.top.location.replace("index.html#"+window.location.pathname+window.location.hash); | ||
309 | 12 | else { | ||
310 | 13 | var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), ""); | ||
311 | 14 | if (window.top.location.hash!=hash) | ||
312 | 15 | window.top.location.hash=hash; | ||
313 | 16 | } | ||
314 | 17 | //--> | ||
315 | 18 | </script> | ||
316 | 8 | </head> | 19 | </head> |
317 | 9 | <body> | 20 | <body> |
318 | 10 | 21 | ||
319 | @@ -13,35 +24,37 @@ | |||
320 | 13 | <h3>Contents</h3> | 24 | <h3>Contents</h3> |
321 | 14 | 25 | ||
322 | 15 | <ol> | 26 | <ol> |
326 | 16 | <li><a href="#shrinking">What is shrinking?</a> | 27 | <li><a href="#shrinking">What is shrinking?</a></li> |
327 | 17 | <li><a href="#obfuscation">What is obfuscation?</a> | 28 | <li><a href="#obfuscation">What is obfuscation?</a></li> |
328 | 18 | <li><a href="#preverification">What is preverification?</a> | 29 | <li><a href="#preverification">What is preverification?</a></li> |
329 | 19 | <li><a href="#optimization">What kind of optimizations does <b>ProGuard</b> | 30 | <li><a href="#optimization">What kind of optimizations does <b>ProGuard</b> |
331 | 20 | support?</a> | 31 | support?</a></li> |
332 | 21 | <li><a href="#commercial">Can I use <b>ProGuard</b> to process my commercial | 32 | <li><a href="#commercial">Can I use <b>ProGuard</b> to process my commercial |
334 | 22 | application?</a> | 33 | application?</a></li> |
335 | 23 | <li><a href="#jdk1.4">Does <b>ProGuard</b> work with Java 2? Java 5? Java | 34 | <li><a href="#jdk1.4">Does <b>ProGuard</b> work with Java 2? Java 5? Java |
342 | 24 | 6?</a> | 35 | 6?</a></li> |
343 | 25 | <li><a href="#jme">Does <b>ProGuard</b> work with Java Micro Edition?</a> | 36 | <li><a href="#jme">Does <b>ProGuard</b> work with Java Micro Edition?</a></li> |
344 | 26 | <li><a href="#android">Does <b>ProGuard</b> work for Google Android code?</a> | 37 | <li><a href="#android">Does <b>ProGuard</b> work for Google Android |
345 | 27 | <li><a href="#blackberry">Does <b>ProGuard</b> work for Blackberry code?</a> | 38 | code?</a></li> |
346 | 28 | <li><a href="#ant">Does <b>ProGuard</b> have support for Ant?</a> | 39 | <li><a href="#blackberry">Does <b>ProGuard</b> work for Blackberry |
347 | 29 | <li><a href="#gui">Does <b>ProGuard</b> come with a GUI?</a> | 40 | code?</a></li> |
348 | 41 | <li><a href="#ant">Does <b>ProGuard</b> have support for Ant?</a></li> | ||
349 | 42 | <li><a href="#gui">Does <b>ProGuard</b> come with a GUI?</a></li> | ||
350 | 30 | <li><a href="#forname">Does <b>ProGuard</b> handle <code>Class.forName</code> | 43 | <li><a href="#forname">Does <b>ProGuard</b> handle <code>Class.forName</code> |
355 | 31 | calls?</a> | 44 | calls?</a></li> |
356 | 32 | <li><a href="#resource">Does <b>ProGuard</b> handle resource files?</a> | 45 | <li><a href="#resource">Does <b>ProGuard</b> handle resource files?</a></li> |
357 | 33 | <li><a href="#encrypt">Does <b>ProGuard</b> encrypt strings constants?</a> | 46 | <li><a href="#encrypt">Does <b>ProGuard</b> encrypt string constants?</a></li> |
358 | 34 | <li><a href="#flow">Does <b>ProGuard</b> perform control flow obfuscation?</a> | 47 | <li><a href="#flow">Does <b>ProGuard</b> perform control flow |
359 | 48 | obfuscation?</a></li> | ||
360 | 35 | <li><a href="#incremental">Does <b>ProGuard</b> support incremental | 49 | <li><a href="#incremental">Does <b>ProGuard</b> support incremental |
362 | 36 | obfuscation?</a> | 50 | obfuscation?</a></li> |
363 | 37 | <li><a href="#keywords">Can <b>ProGuard</b> obfuscate using reserved | 51 | <li><a href="#keywords">Can <b>ProGuard</b> obfuscate using reserved |
365 | 38 | keywords?</a> | 52 | keywords?</a></li> |
366 | 39 | <li><a href="#stacktrace">Can <b>ProGuard</b> reconstruct obfuscated stack | 53 | <li><a href="#stacktrace">Can <b>ProGuard</b> reconstruct obfuscated stack |
368 | 40 | traces?</a> | 54 | traces?</a></li> |
369 | 41 | </ol> | 55 | </ol> |
370 | 42 | 56 | ||
373 | 43 | <a name="shrinking"> </a> | 57 | <h3><a name="shrinking">What is shrinking?</a></h3> |
372 | 44 | <h3>What is shrinking?</h3> | ||
374 | 45 | 58 | ||
375 | 46 | Java source code (.java files) is typically compiled to bytecode (.class | 59 | Java source code (.java files) is typically compiled to bytecode (.class |
376 | 47 | files). Bytecode is more compact than Java source code, but it may still | 60 | files). Bytecode is more compact than Java source code, but it may still |
377 | @@ -50,8 +63,7 @@ | |||
378 | 50 | unused classes, fields, and methods. The program remains functionally | 63 | unused classes, fields, and methods. The program remains functionally |
379 | 51 | equivalent, including the information given in exception stack traces. | 64 | equivalent, including the information given in exception stack traces. |
380 | 52 | 65 | ||
383 | 53 | <a name="obfuscation"> </a> | 66 | <h3><a name="obfuscation">What is obfuscation?</a></h3> |
382 | 54 | <h3>What is obfuscation?</h3> | ||
384 | 55 | 67 | ||
385 | 56 | By default, compiled bytecode still contains a lot of debugging information: | 68 | By default, compiled bytecode still contains a lot of debugging information: |
386 | 57 | source file names, line numbers, field names, method names, argument names, | 69 | source file names, line numbers, field names, method names, argument names, |
387 | @@ -63,8 +75,7 @@ | |||
388 | 63 | bonus. The program remains functionally equivalent, except for the class | 75 | bonus. The program remains functionally equivalent, except for the class |
389 | 64 | names, method names, and line numbers given in exception stack traces. | 76 | names, method names, and line numbers given in exception stack traces. |
390 | 65 | 77 | ||
393 | 66 | <a name="preverification"> </a> | 78 | <h3><a name="preverification">What is preverification?</a></h3> |
392 | 67 | <h3>What is preverification?</h3> | ||
394 | 68 | 79 | ||
395 | 69 | When loading class files, the class loader performs some sophisticated | 80 | When loading class files, the class loader performs some sophisticated |
396 | 70 | verification of the byte code. This analysis makes sure the code can't | 81 | verification of the byte code. This analysis makes sure the code can't |
397 | @@ -77,8 +88,7 @@ | |||
398 | 77 | perform the preverification step too, for instance allowing to retarget older | 88 | perform the preverification step too, for instance allowing to retarget older |
399 | 78 | class files at Java 6. | 89 | class files at Java 6. |
400 | 79 | 90 | ||
403 | 80 | <a name="optimization"> </a> | 91 | <h3><a name="optimization">What kind of optimizations does <b>ProGuard</b> support?</a></h3> |
402 | 81 | <h3>What kind of optimizations does <b>ProGuard</b> support?</h3> | ||
404 | 82 | 92 | ||
405 | 83 | Apart from removing unused classes, fields, and methods in the shrinking step, | 93 | Apart from removing unused classes, fields, and methods in the shrinking step, |
406 | 84 | <b>ProGuard</b> can also perform optimizations at the bytecode level, inside | 94 | <b>ProGuard</b> can also perform optimizations at the bytecode level, inside |
407 | @@ -87,24 +97,24 @@ | |||
408 | 87 | and liveness analysis, <b>ProGuard</b> can: | 97 | and liveness analysis, <b>ProGuard</b> can: |
409 | 88 | 98 | ||
410 | 89 | <ul> | 99 | <ul> |
426 | 90 | <li>Evaluate constant expressions. | 100 | <li>Evaluate constant expressions.</li> |
427 | 91 | <li>Remove unnecessary field accesses and method calls. | 101 | <li>Remove unnecessary field accesses and method calls.</li> |
428 | 92 | <li>Remove unnecessary branches. | 102 | <li>Remove unnecessary branches.</li> |
429 | 93 | <li>Remove unnecessary comparisons and instanceof tests. | 103 | <li>Remove unnecessary comparisons and instanceof tests.</li> |
430 | 94 | <li>Remove unused code blocks. | 104 | <li>Remove unused code blocks.</li> |
431 | 95 | <li>Merge identical code blocks. | 105 | <li>Merge identical code blocks.</li> |
432 | 96 | <li>Reduce variable allocation. | 106 | <li>Reduce variable allocation.</li> |
433 | 97 | <li>Remove write-only fields and unused method parameters. | 107 | <li>Remove write-only fields and unused method parameters.</li> |
434 | 98 | <li>Inline constant fields, method parameters, and return values. | 108 | <li>Inline constant fields, method parameters, and return values.</li> |
435 | 99 | <li>Inline methods that are short or only called once. | 109 | <li>Inline methods that are short or only called once.</li> |
436 | 100 | <li>Simplify tail recursion calls. | 110 | <li>Simplify tail recursion calls.</li> |
437 | 101 | <li>Merge classes and interfaces. | 111 | <li>Merge classes and interfaces.</li> |
438 | 102 | <li>Make methods private, static, and final when possible. | 112 | <li>Make methods private, static, and final when possible.</li> |
439 | 103 | <li>Make classes static and final when possible. | 113 | <li>Make classes static and final when possible.</li> |
440 | 104 | <li>Replace interfaces that have single implementations. | 114 | <li>Replace interfaces that have single implementations.</li> |
441 | 105 | <li>Perform over 200 peephole optimizations, like replacing ...*2 by | 115 | <li>Perform over 200 peephole optimizations, like replacing ...*2 by |
444 | 106 | ...<<1. | 116 | ...<<1.</li> |
445 | 107 | <li>Optionally remove logging code. | 117 | <li>Optionally remove logging code.</li> |
446 | 108 | </ul> | 118 | </ul> |
447 | 109 | The positive effects of these optimizations will depend on your code and on | 119 | The positive effects of these optimizations will depend on your code and on |
448 | 110 | the virtual machine on which the code is executed. Simple virtual machines may | 120 | the virtual machine on which the code is executed. Simple virtual machines may |
449 | @@ -113,27 +123,28 @@ | |||
450 | 113 | <p> | 123 | <p> |
451 | 114 | Some notable optimizations that aren't supported yet: | 124 | Some notable optimizations that aren't supported yet: |
452 | 115 | <ul> | 125 | <ul> |
455 | 116 | <li>Moving constant expressions out of loops. | 126 | <li>Moving constant expressions out of loops.</li> |
456 | 117 | <li>Optimizations that require escape analysis. | 127 | <li>Optimizations that require escape analysis |
457 | 128 | (<a href="http://www.saikoa.com/dexguard" target="_top">DexGuard</a> | ||
458 | 129 | does).</li> | ||
459 | 118 | </ul> | 130 | </ul> |
460 | 119 | 131 | ||
463 | 120 | <a name="commercial"> </a> | 132 | <h3><a name="commercial">Can I use <b>ProGuard</b> to process my commercial application?</a></h3> |
462 | 121 | <h3>Can I use <b>ProGuard</b> to process my commercial application?</h3> | ||
464 | 122 | 133 | ||
465 | 123 | Yes, you can. <b>ProGuard</b> itself is distributed under the GPL, but this | 134 | Yes, you can. <b>ProGuard</b> itself is distributed under the GPL, but this |
466 | 124 | doesn't affect the programs that you process. Your code remains yours, and | 135 | doesn't affect the programs that you process. Your code remains yours, and |
467 | 125 | its license can remain the same. | 136 | its license can remain the same. |
468 | 126 | 137 | ||
471 | 127 | <a name="jdk1.4"> </a> | 138 | <h3><a name="jdk1.4">Does <b>ProGuard</b> work with Java 2? Java 5? Java 6? Java 7?</a></h3> |
470 | 128 | <h3>Does <b>ProGuard</b> work with Java 2? Java 5? Java 6?</h3> | ||
472 | 129 | 139 | ||
474 | 130 | Yes, <b>ProGuard</b> supports all JDKs from 1.1 up to and including 6.0. Java 2 | 140 | Yes, <b>ProGuard</b> supports all JDKs from 1.1 up to and including 7.0. Java 2 |
475 | 131 | introduced some small differences in the class file format. Java 5 added | 141 | introduced some small differences in the class file format. Java 5 added |
478 | 132 | attributes for generics and for annotations. Java 6 introduced preverification | 142 | attributes for generics and for annotations. Java 6 introduced optional |
479 | 133 | attributes. <b>ProGuard</b> handles all versions correctly. | 143 | preverification attributes. Java 7 made preverification obligatory and |
480 | 144 | introduced support for dynamic languages. <b>ProGuard</b> handles all versions | ||
481 | 145 | correctly. | ||
482 | 134 | 146 | ||
485 | 135 | <a name="jme"> </a> | 147 | <h3><a name="jme">Does <b>ProGuard</b> work with Java Micro Edition?</a></h3> |
484 | 136 | <h3>Does <b>ProGuard</b> work with Java Micro Edition?</h3> | ||
486 | 137 | 148 | ||
487 | 138 | Yes. <b>ProGuard</b> itself runs in Java Standard Edition, but you can freely | 149 | Yes. <b>ProGuard</b> itself runs in Java Standard Edition, but you can freely |
488 | 139 | specify the run-time environment at which your programs are targeted, | 150 | specify the run-time environment at which your programs are targeted, |
489 | @@ -144,16 +155,14 @@ | |||
490 | 144 | <b>ProGuard</b> also comes with an obfuscator plug-in for the JME Wireless | 155 | <b>ProGuard</b> also comes with an obfuscator plug-in for the JME Wireless |
491 | 145 | Toolkit. | 156 | Toolkit. |
492 | 146 | 157 | ||
495 | 147 | <a name="android"> </a> | 158 | <h3><a name="android">Does <b>ProGuard</b> work for Google Android code?</a></h3> |
494 | 148 | <h3>Does <b>ProGuard</b> work for Google Android code?</h3> | ||
496 | 149 | 159 | ||
497 | 150 | Yes. Google's <code>dx</code> compiler converts ordinary jar files into files | 160 | Yes. Google's <code>dx</code> compiler converts ordinary jar files into files |
498 | 151 | that run on Android devices. By preprocessing the original jar files, | 161 | that run on Android devices. By preprocessing the original jar files, |
499 | 152 | <b>ProGuard</b> can significantly reduce the file sizes and boost the run-time | 162 | <b>ProGuard</b> can significantly reduce the file sizes and boost the run-time |
500 | 153 | performance of the code. | 163 | performance of the code. |
501 | 154 | 164 | ||
504 | 155 | <a name="blackberry"> </a> | 165 | <h3><a name="blackberry">Does <b>ProGuard</b> work for Blackberry code?</a></h3> |
503 | 156 | <h3>Does <b>ProGuard</b> work for Blackberry code?</h3> | ||
505 | 157 | 166 | ||
506 | 158 | It should. RIM's proprietary <code>rapc</code> compiler converts ordinary JME | 167 | It should. RIM's proprietary <code>rapc</code> compiler converts ordinary JME |
507 | 159 | jar files into cod files that run on Blackberry devices. The compiler performs | 168 | jar files into cod files that run on Blackberry devices. The compiler performs |
508 | @@ -163,24 +172,21 @@ | |||
509 | 163 | bugs. It sometimes fails on obfuscated code that is valid and accepted by other | 172 | bugs. It sometimes fails on obfuscated code that is valid and accepted by other |
510 | 164 | JME tools and VMs. Your mileage may therefore vary. | 173 | JME tools and VMs. Your mileage may therefore vary. |
511 | 165 | 174 | ||
514 | 166 | <a name="ant"> </a> | 175 | <h3><a name="ant">Does <b>ProGuard</b> have support for Ant?</a></h3> |
513 | 167 | <h3>Does <b>ProGuard</b> have support for Ant?</h3> | ||
515 | 168 | 176 | ||
516 | 169 | Yes. <b>ProGuard</b> provides an Ant task, so that it integrates seamlessly | 177 | Yes. <b>ProGuard</b> provides an Ant task, so that it integrates seamlessly |
517 | 170 | into your Ant build processes. You can still use configurations in | 178 | into your Ant build processes. You can still use configurations in |
518 | 171 | <b>ProGuard</b>'s own readable format. Alternatively, if you prefer XML, you | 179 | <b>ProGuard</b>'s own readable format. Alternatively, if you prefer XML, you |
519 | 172 | can specify the equivalent XML configuration. | 180 | can specify the equivalent XML configuration. |
520 | 173 | 181 | ||
523 | 174 | <a name="gui"> </a> | 182 | <h3><a name="gui">Does <b>ProGuard</b> come with a GUI?</a></h3> |
522 | 175 | <h3>Does <b>ProGuard</b> come with a GUI?</h3> | ||
524 | 176 | 183 | ||
525 | 177 | Yes. First of all, <b>ProGuard</b> is perfectly usable as a command-line tool | 184 | Yes. First of all, <b>ProGuard</b> is perfectly usable as a command-line tool |
526 | 178 | that can easily be integrated into any automatic build process. For casual | 185 | that can easily be integrated into any automatic build process. For casual |
527 | 179 | users, there's also a graphical user interface that simplifies creating, | 186 | users, there's also a graphical user interface that simplifies creating, |
528 | 180 | loading, editing, executing, and saving ProGuard configurations. | 187 | loading, editing, executing, and saving ProGuard configurations. |
529 | 181 | 188 | ||
532 | 182 | <a name="forname"> </a> | 189 | <h3><a name="forname">Does <b>ProGuard</b> handle <code>Class.forName</code> calls?</a></h3> |
531 | 183 | <h3>Does <b>ProGuard</b> handle <code>Class.forName</code> calls?</h3> | ||
533 | 184 | 190 | ||
534 | 185 | Yes. <b>ProGuard</b> automatically handles constructs like | 191 | Yes. <b>ProGuard</b> automatically handles constructs like |
535 | 186 | <code>Class.forName("SomeClass")</code> and <code>SomeClass.class</code>. The | 192 | <code>Class.forName("SomeClass")</code> and <code>SomeClass.class</code>. The |
536 | @@ -195,22 +201,23 @@ | |||
537 | 195 | implementations may need to be preserved. The user can adapt his configuration | 201 | implementations may need to be preserved. The user can adapt his configuration |
538 | 196 | accordingly. | 202 | accordingly. |
539 | 197 | 203 | ||
542 | 198 | <a name="resource"> </a> | 204 | <h3><a name="resource">Does <b>ProGuard</b> handle resource files?</a></h3> |
541 | 199 | <h3>Does <b>ProGuard</b> handle resource files?</h3> | ||
543 | 200 | 205 | ||
544 | 201 | Yes. <b>ProGuard</b> copies all non-class resource files, optionally adapting | 206 | Yes. <b>ProGuard</b> copies all non-class resource files, optionally adapting |
545 | 202 | their names and their contents to the obfuscation that has been applied. | 207 | their names and their contents to the obfuscation that has been applied. |
546 | 203 | 208 | ||
557 | 204 | <a name="encrypt"> </a> | 209 | <h3><a name="encrypt">Does <b>ProGuard</b> encrypt string constants?</a></h3> |
558 | 205 | <h3>Does <b>ProGuard</b> encrypt strings constants?</h3> | 210 | |
559 | 206 | 211 | No. String encryption in program code has to be perfectly reversible by | |
560 | 207 | No. Storing encrypted string constants in program code is fairly futile, since | 212 | definition, so it only improves the obfuscation level. It increases the |
561 | 208 | the encryption has to be perfectly reversible by definition. Moreover, the | 213 | footprint of the code. However, by popular demand, ProGuard's sibling for |
562 | 209 | decryption costs additional memory and computation at run-time. If this feature | 214 | Android <a href="http://www.saikoa.com/dexguard" |
563 | 210 | is ever incorporated, I'll provide a tool to decrypt the strings as well. | 215 | target="_top"><b>DexGuard</b></a> does support string encryption, along with |
564 | 211 | 216 | class encryption and hiding of access to sensitive APIs. <b>DexGuard</b> is | |
565 | 212 | <a name="flow"> </a> | 217 | distributed by <a href="http://www.saikoa.com/" target="_top">Saikoa</a> and |
566 | 213 | <h3>Does <b>ProGuard</b> perform flow obfuscation?</h3> | 218 | is not open source. |
567 | 219 | |||
568 | 220 | <h3><a name="flow">Does <b>ProGuard</b> perform flow obfuscation?</a></h3> | ||
569 | 214 | 221 | ||
570 | 215 | Not explicitly. Control flow obfuscation injects additional branches into the | 222 | Not explicitly. Control flow obfuscation injects additional branches into the |
571 | 216 | bytecode, in an attempt to fool decompilers. <b>ProGuard</b> does not do this, | 223 | bytecode, in an attempt to fool decompilers. <b>ProGuard</b> does not do this, |
572 | @@ -218,15 +225,13 @@ | |||
573 | 218 | optimization step often already restructures the code to the point where most | 225 | optimization step often already restructures the code to the point where most |
574 | 219 | decompilers get confused. | 226 | decompilers get confused. |
575 | 220 | 227 | ||
578 | 221 | <a name="incremental"> </a> | 228 | <h3><a name="incremental">Does <b>ProGuard</b> support incremental obfuscation?</a></h3> |
577 | 222 | <h3>Does <b>ProGuard</b> support incremental obfuscation?</h3> | ||
579 | 223 | 229 | ||
580 | 224 | Yes. This feature allows you to specify a previous obfuscation mapping file in | 230 | Yes. This feature allows you to specify a previous obfuscation mapping file in |
581 | 225 | a new obfuscation step, in order to produce add-ons or patches for obfuscated | 231 | a new obfuscation step, in order to produce add-ons or patches for obfuscated |
582 | 226 | code. | 232 | code. |
583 | 227 | 233 | ||
586 | 228 | <a name="keywords"> </a> | 234 | <h3><a name="keywords">Can <b>ProGuard</b> obfuscate using reserved keywords?</a></h3> |
585 | 229 | <h3>Can <b>ProGuard</b> obfuscate using reserved keywords?</h3> | ||
587 | 230 | 235 | ||
588 | 231 | Yes. You can specify your own obfuscation dictionary, such as a list of | 236 | Yes. You can specify your own obfuscation dictionary, such as a list of |
589 | 232 | reserved key words, identifiers with foreign characters, random source files, | 237 | reserved key words, identifiers with foreign characters, random source files, |
590 | @@ -234,8 +239,7 @@ | |||
591 | 234 | Decent decompilers can automatically replace reserved keywords, and the effect | 239 | Decent decompilers can automatically replace reserved keywords, and the effect |
592 | 235 | can be undone fairly easily, by obfuscating again with simpler names. | 240 | can be undone fairly easily, by obfuscating again with simpler names. |
593 | 236 | 241 | ||
596 | 237 | <a name="stacktrace"> </a> | 242 | <h3><a name="stacktrace">Can <b>ProGuard</b> reconstruct obfuscated stack traces?</a></h3> |
595 | 238 | <h3>Can <b>ProGuard</b> reconstruct obfuscated stack traces?</h3> | ||
597 | 239 | 243 | ||
598 | 240 | Yes. <b>ProGuard</b> comes with a companion tool, <b>ReTrace</b>, that can | 244 | Yes. <b>ProGuard</b> comes with a companion tool, <b>ReTrace</b>, that can |
599 | 241 | 'de-obfuscate' stack traces produced by obfuscated applications. The | 245 | 'de-obfuscate' stack traces produced by obfuscated applications. The |
600 | @@ -245,10 +249,11 @@ | |||
601 | 245 | reverse mapping. Please refer to the <a href="manual/index.html">ProGuard User | 249 | reverse mapping. Please refer to the <a href="manual/index.html">ProGuard User |
602 | 246 | Manual</a> for more details. | 250 | Manual</a> for more details. |
603 | 247 | 251 | ||
605 | 248 | <hr> | 252 | <hr /> |
606 | 253 | <noscript><div><a target="_top" href="index.html" class="button">Show menu</a></div></noscript> | ||
607 | 249 | <address> | 254 | <address> |
610 | 250 | Copyright © 2002-2009 | 255 | Copyright © 2002-2012 |
611 | 251 | <a href="http://www.graphics.cornell.edu/~eric/">Eric Lafortune</a>. | 256 | <a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>. |
612 | 252 | </address> | 257 | </address> |
613 | 253 | </body> | 258 | </body> |
614 | 254 | </html> | 259 | </html> |
615 | 255 | 260 | ||
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 | 7 | <H1>Special Exception to the GNU General Public License</H1> | 7 | <H1>Special Exception to the GNU General Public License</H1> |
621 | 8 | 8 | ||
622 | 9 | <P> | 9 | <P> |
624 | 10 | Copyright © 2002-2009 Eric Lafortune | 10 | Copyright © 2002-2012 Eric Lafortune |
625 | 11 | </P> | 11 | </P> |
626 | 12 | 12 | ||
627 | 13 | <P> | 13 | <P> |
628 | @@ -33,13 +33,17 @@ | |||
629 | 33 | In addition, as a special exception, Eric Lafortune gives permission to link | 33 | In addition, as a special exception, Eric Lafortune gives permission to link |
630 | 34 | the code of this program with the following stand-alone applications: | 34 | the code of this program with the following stand-alone applications: |
631 | 35 | <ul> | 35 | <ul> |
639 | 36 | <li>Apache Ant, | 36 | <li>Apache Ant,</li> |
640 | 37 | <li>Apache Maven, | 37 | <li>Apache Maven,</li> |
641 | 38 | <li>the Eclipse ProGuardDT GUI, | 38 | <li>the Google Android SDK,</li> |
642 | 39 | <li>the EclipseME JME IDE, | 39 | <li>the Eclipse ProGuardDT GUI,</li> |
643 | 40 | <li>the Sun NetBeans Java IDE, | 40 | <li>the EclipseME JME IDE,</li> |
644 | 41 | <li>the Sun JME Wireless Toolkit, and | 41 | <li>the Oracle NetBeans Java IDE,</li> |
645 | 42 | <li>the Javaground Tools, | 42 | <li>the Oracle JME Wireless Toolkit,</li> |
646 | 43 | <li>the Simple Build Tool for Scala (and its scripts),</li> | ||
647 | 44 | <li>the NeoMAD Tools by Neomades,</li> | ||
648 | 45 | <li>the Javaground Tools, and</li> | ||
649 | 46 | <li>the Sanaware Tools,</li> | ||
650 | 43 | </ul> | 47 | </ul> |
651 | 44 | and distribute linked combinations including the two. You must obey the GNU | 48 | and distribute linked combinations including the two. You must obey the GNU |
652 | 45 | General Public License in all respects for all of the code used other than | 49 | General Public License in all respects for all of the code used other than |
653 | 46 | 50 | ||
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 @@ | |||
659 | 1 | <!doctype html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> | 1 | <!doctype html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> |
660 | 2 | <html> | 2 | <html> |
661 | 3 | <head> | 3 | <head> |
662 | 4 | <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"> | 4 | <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"> |
663 | 5 | <meta http-equiv="content-style-type" content="text/css"> | 5 | <meta http-equiv="content-style-type" content="text/css"> |
664 | 6 | <link rel="stylesheet" type="text/css" href="style.css"> | 6 | <link rel="stylesheet" type="text/css" href="style.css"> |
665 | 7 | <title>ProGuard Acknowledgements</title> | 7 | <title>ProGuard Acknowledgements</title> |
666 | 8 | <script type="text/javascript" language="JavaScript"> | ||
667 | 9 | <!-- | ||
668 | 10 | if (window.self==window.top) | ||
669 | 11 | window.top.location.replace("index.html#"+window.location.pathname+window.location.hash); | ||
670 | 12 | else { | ||
671 | 13 | var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), ""); | ||
672 | 14 | if (window.top.location.hash!=hash) | ||
673 | 15 | window.top.location.hash=hash; | ||
674 | 16 | } | ||
675 | 17 | //--> | ||
676 | 18 | </script> | ||
677 | 8 | </head> | 19 | </head> |
678 | 9 | <body> | 20 | <body> |
679 | 10 | 21 | ||
680 | @@ -12,7 +23,7 @@ | |||
681 | 12 | 23 | ||
682 | 13 | The first versions of <b>ProGuard</b> grew out of <b>RetroGuard</b>, which its | 24 | The first versions of <b>ProGuard</b> grew out of <b>RetroGuard</b>, which its |
683 | 14 | author Mark Welsh kindly made available under the GNU Lesser General Public | 25 | author Mark Welsh kindly made available under the GNU Lesser General Public |
685 | 15 | License. <b>RetroGuard</b> is a very nice piece of code, but it only performed | 26 | License. RetroGuard is a very nice piece of code, but it only performed |
686 | 16 | obfuscation. I started from the class file parsing code and wrote my own | 27 | obfuscation. I started from the class file parsing code and wrote my own |
687 | 17 | shrinker, optimizer, obfuscator, and preverifier. As of version 4.0, all of the | 28 | shrinker, optimizer, obfuscator, and preverifier. As of version 4.0, all of the |
688 | 18 | original code has been rewritten, so the most obvious remaining similarity are | 29 | original code has been rewritten, so the most obvious remaining similarity are |
689 | @@ -33,35 +44,34 @@ | |||
690 | 33 | Daniel Sjöblom, Jan Filipsky, Charles Smith, Gerrit Telkamp, Noel | 44 | Daniel Sjöblom, Jan Filipsky, Charles Smith, Gerrit Telkamp, Noel |
691 | 34 | Grandin, Torbjörn Söderstedt, Clemens Eisserer, Clark Bassett, | 45 | Grandin, Torbjörn Söderstedt, Clemens Eisserer, Clark Bassett, |
692 | 35 | Eduard Welch, Dawid Weiss, Andrew Wilson, Sean Owen, Niels Gron, Ishan Mehta, | 46 | Eduard Welch, Dawid Weiss, Andrew Wilson, Sean Owen, Niels Gron, Ishan Mehta, |
694 | 36 | Steven Adams, Xavier Kral, | 47 | Steven Adams, Xavier Kral, Stefan Martin, Toby Reyelts, |
695 | 37 | and many others. Thanks! Your feedback has been invaluable. | 48 | and many others. Thanks! Your feedback has been invaluable. |
696 | 38 | <p> | 49 | <p> |
697 | 39 | 50 | ||
700 | 40 | I am developing ProGuard in my spare time, which is possible thanks to my | 51 | <a href="http://www.saikoa.com/" target="_top">Saikoa</a> is providing the |
701 | 41 | day-time job at <a href="http://www.luciad.com/" target="other">Luciad</a>. | 52 | financial resources for this project. At Saikoa, we're also developing |
702 | 53 | ProGuard's sibling for Android, | ||
703 | 54 | <a href="http://www.saikoa.com/dexguard" target="_top">DexGuard</a>. | ||
704 | 42 | <p> | 55 | <p> |
705 | 43 | 56 | ||
706 | 44 | <a href="http://sourceforge.net/projects/proguard/" | 57 | <a href="http://sourceforge.net/projects/proguard/" |
721 | 45 | target="other">SourceForge</a> is generously providing the resources for | 58 | target="other">SourceForge</a> is providing the resources for hosting this |
722 | 46 | hosting this project and many other projects. | 59 | project and many other projects. |
723 | 47 | <p> | 60 | <p> |
724 | 48 | 61 | ||
725 | 49 | JetBrains is kindly providing a license for its IntelliJ IDEA development | 62 | The code and these web pages were written using Oracle/Sun's JDKs, Linux, |
726 | 50 | environment. | 63 | IntelliJ IDEA, GNU emacs, bash, sed, awk, and a whole host of other tools that |
727 | 51 | <p> | 64 | continue to make programming interesting. |
728 | 52 | 65 | <p> | |
729 | 53 | The code and these web pages were written using Sun's JDKs, Linux, IntelliJ | 66 | |
730 | 54 | IDEA, GNU emacs, bash, sed, awk, and a whole host of other tools that continue | 67 | And finally, I'm a great fan of Sanaware's <a |
717 | 55 | to make programming interesting. | ||
718 | 56 | <p> | ||
719 | 57 | |||
720 | 58 | And finally, I'm a great fan of the <a | ||
731 | 59 | href="http://www.javadocking.com/" target="other">Java Docking Library</a>. | 68 | href="http://www.javadocking.com/" target="other">Java Docking Library</a>. |
732 | 60 | 69 | ||
734 | 61 | <hr> | 70 | <hr /> |
735 | 71 | <noscript><div><a target="_top" href="index.html" class="button">Show menu</a></div></noscript> | ||
736 | 62 | <address> | 72 | <address> |
739 | 63 | Copyright © 2002-2009 | 73 | Copyright © 2002-2012 |
740 | 64 | <a href="http://www.graphics.cornell.edu/~eric/">Eric Lafortune</a>. | 74 | <a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>. |
741 | 65 | </address> | 75 | </address> |
742 | 66 | 76 | ||
743 | 67 | </body> | 77 | </body> |
744 | 68 | 78 | ||
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 @@ | |||
750 | 1 | <!doctype html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> | 1 | <!doctype html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> |
751 | 2 | <html> | 2 | <html> |
752 | 3 | <head> | 3 | <head> |
753 | 4 | <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"> | 4 | <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"> |
754 | 5 | <meta http-equiv="content-style-type" content="text/css"> | 5 | <meta http-equiv="content-style-type" content="text/css"> |
755 | 6 | <link rel="stylesheet" type="text/css" href="style.css"> | 6 | <link rel="stylesheet" type="text/css" href="style.css"> |
756 | 7 | <title>ProGuard Alternatives</title> | 7 | <title>ProGuard Alternatives</title> |
757 | 8 | <script type="text/javascript" language="JavaScript"> | ||
758 | 9 | <!-- | ||
759 | 10 | if (window.self==window.top) | ||
760 | 11 | window.top.location.replace("index.html#"+window.location.pathname+window.location.hash); | ||
761 | 12 | else { | ||
762 | 13 | var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), ""); | ||
763 | 14 | if (window.top.location.hash!=hash) | ||
764 | 15 | window.top.location.hash=hash; | ||
765 | 16 | } | ||
766 | 17 | //--> | ||
767 | 18 | </script> | ||
768 | 8 | </head> | 19 | </head> |
769 | 9 | <body> | 20 | <body> |
770 | 10 | 21 | ||
771 | @@ -34,612 +45,682 @@ | |||
772 | 34 | </tr> | 45 | </tr> |
773 | 35 | 46 | ||
774 | 36 | <tr> | 47 | <tr> |
776 | 37 | <td><a target="other" href="http://www.graphics.cornell.edu/~eric/">Eric Lafortune</a></td> | 48 | <td><a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a></td> |
777 | 38 | <td><a target="_top" href="http://proguard.sourceforge.net/">ProGuard</a></td> | 49 | <td><a target="_top" href="http://proguard.sourceforge.net/">ProGuard</a></td> |
782 | 39 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td> | 50 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> |
783 | 40 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td> | 51 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> |
784 | 41 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td> | 52 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> |
785 | 42 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td> | 53 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> |
786 | 43 | <td>Free (GPL)</td> | 54 | <td>Free (GPL)</td> |
787 | 44 | </tr> | 55 | </tr> |
788 | 45 | 56 | ||
789 | 46 | <tr> | 57 | <tr> |
790 | 47 | <td><a target="other" rel="nofollow" href="http://www.informatik.uni-oldenburg.de/leute/hoenicke.html">Jochen Hoenicke</a></td> | 58 | <td><a target="other" rel="nofollow" href="http://www.informatik.uni-oldenburg.de/leute/hoenicke.html">Jochen Hoenicke</a></td> |
791 | 48 | <td><a target="other" href="http://jode.sourceforge.net/">Jode</a></td> | 59 | <td><a target="other" href="http://jode.sourceforge.net/">Jode</a></td> |
796 | 49 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td> | 60 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> |
797 | 50 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td> | 61 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> |
798 | 51 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td> | 62 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> |
799 | 52 | <td align="center"><br></td> | 63 | <td align="center"><br /></td> |
800 | 53 | <td>Free (GPL)</td> | 64 | <td>Free (GPL)</td> |
801 | 54 | </tr> | 65 | </tr> |
802 | 55 | 66 | ||
803 | 56 | <tr> | 67 | <tr> |
804 | 57 | <td><a target="other" rel="nofollow" href="http://www.nq4.de/">NQ4</a></td> | ||
805 | 58 | <td><a target="other" href="http://www.nq4.de/">Joga</a></td> | ||
806 | 59 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td> | ||
807 | 60 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td> | ||
808 | 61 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td> | ||
809 | 62 | <td align="center"><br></td> | ||
810 | 63 | <td>Free (no source)</td> | ||
811 | 64 | </tr> | ||
812 | 65 | |||
813 | 66 | <tr> | ||
814 | 67 | <td><a target="other" rel="nofollow" href="http://www.cs.cornell.edu/nystrom/">Nate Nystrom</a></td> | 68 | <td><a target="other" rel="nofollow" href="http://www.cs.cornell.edu/nystrom/">Nate Nystrom</a></td> |
815 | 68 | <td><a target="other" href="http://www.cs.purdue.edu/homes/hosking/bloat/">Bloat</a></td> | 69 | <td><a target="other" href="http://www.cs.purdue.edu/homes/hosking/bloat/">Bloat</a></td> |
820 | 69 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td> | 70 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> |
821 | 70 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td> | 71 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> |
822 | 71 | <td align="center"><br></td> | 72 | <td align="center"><br /></td> |
823 | 72 | <td align="center"><br></td> | 73 | <td align="center"><br /></td> |
824 | 73 | <td>Free</td> | 74 | <td>Free</td> |
825 | 74 | </tr> | 75 | </tr> |
826 | 75 | 76 | ||
827 | 76 | <tr> | 77 | <tr> |
828 | 77 | <td><a target="other" rel="nofollow" href="http://sourceforge.net/users/hchacha/">Hidetoshi Ohuchi</a></td> | 78 | <td><a target="other" rel="nofollow" href="http://sourceforge.net/users/hchacha/">Hidetoshi Ohuchi</a></td> |
829 | 78 | <td><a target="other" href="http://jarg.sourceforge.net/">Jarg</a></td> | 79 | <td><a target="other" href="http://jarg.sourceforge.net/">Jarg</a></td> |
834 | 79 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td> | 80 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> |
835 | 80 | <td align="center"><br></td> | 81 | <td align="center"><br /></td> |
836 | 81 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td> | 82 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> |
837 | 82 | <td align="center"><br></td> | 83 | <td align="center"><br /></td> |
838 | 83 | <td>Free (BSD)</td> | 84 | <td>Free (BSD)</td> |
839 | 84 | </tr> | 85 | </tr> |
840 | 85 | 86 | ||
841 | 86 | <tr> | 87 | <tr> |
842 | 87 | <td><a target="other" rel="nofollow" href="http://www.geocities.com/CapeCanaveral/Hall/2334/resume.html">Alexander Shvets</a></td> | ||
843 | 88 | <td><a target="other" href="http://www.geocities.com/CapeCanaveral/Hall/2334/Programs/cafebabe.html">CafeBabe</a></td> | ||
844 | 89 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td> | ||
845 | 90 | <td align="center"><br></td> | ||
846 | 91 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td> | ||
847 | 92 | <td align="center"><br></td> | ||
848 | 93 | <td>Free</td> | ||
849 | 94 | </tr> | ||
850 | 95 | |||
851 | 96 | <tr> | ||
852 | 97 | <td><a target="other" rel="nofollow" href="http://www.yworks.com/">yWorks</a></td> | 88 | <td><a target="other" rel="nofollow" href="http://www.yworks.com/">yWorks</a></td> |
853 | 98 | <td><a target="other" href="http://www.yworks.com/en/products_yguard_about.htm">yGuard</a></td> | 89 | <td><a target="other" href="http://www.yworks.com/en/products_yguard_about.htm">yGuard</a></td> |
858 | 99 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td> | 90 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> |
859 | 100 | <td align="center"><br></td> | 91 | <td align="center"><br /></td> |
860 | 101 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td> | 92 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> |
861 | 102 | <td align="center"><br></td> | 93 | <td align="center"><br /></td> |
862 | 103 | <td>Free (no source)</td> | 94 | <td>Free (no source)</td> |
863 | 104 | </tr> | 95 | </tr> |
864 | 105 | 96 | ||
865 | 106 | <tr> | 97 | <tr> |
866 | 107 | <td><a target="other" rel="nofollow" href="http://www.cs.purdue.edu/homes/grothoff/">Christian Grothoff</a></td> | ||
867 | 108 | <td><a target="other" href="http://www.ovmj.org/jamit/">Jamit</a></td> | ||
868 | 109 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td> | ||
869 | 110 | <td align="center"><br></td> | ||
870 | 111 | <td align="center"><br></td> | ||
871 | 112 | <td align="center"><br></td> | ||
872 | 113 | <td>Free (GPL)</td> | ||
873 | 114 | </tr> | ||
874 | 115 | |||
875 | 116 | <tr> | ||
876 | 117 | <td><a target="other" rel="nofollow" href="http://mojo.codehaus.org/">Mojo</a></td> | 98 | <td><a target="other" rel="nofollow" href="http://mojo.codehaus.org/">Mojo</a></td> |
877 | 118 | <td><a target="other" href="http://mojo.codehaus.org/minijar-maven-plugin/">Minijar</a></td> | 99 | <td><a target="other" href="http://mojo.codehaus.org/minijar-maven-plugin/">Minijar</a></td> |
882 | 119 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td> | 100 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> |
883 | 120 | <td align="center"><br></td> | 101 | <td align="center"><br /></td> |
884 | 121 | <td align="center"><br></td> | 102 | <td align="center"><br /></td> |
885 | 122 | <td align="center"><br></td> | 103 | <td align="center"><br /></td> |
886 | 123 | <td>Free (Apache)</td> | 104 | <td>Free (Apache)</td> |
887 | 124 | </tr> | 105 | </tr> |
888 | 125 | 106 | ||
889 | 126 | <tr> | 107 | <tr> |
890 | 127 | <td><a target="other" rel="nofollow" href="http://www.riggshill.com/">RiggsHill Software</a></td> | 108 | <td><a target="other" rel="nofollow" href="http://www.riggshill.com/">RiggsHill Software</a></td> |
891 | 128 | <td><a target="other" href="http://genjar.sourceforge.net/">GenJar</a></td> | 109 | <td><a target="other" href="http://genjar.sourceforge.net/">GenJar</a></td> |
896 | 129 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td> | 110 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> |
897 | 130 | <td align="center"><br></td> | 111 | <td align="center"><br /></td> |
898 | 131 | <td align="center"><br></td> | 112 | <td align="center"><br /></td> |
899 | 132 | <td align="center"><br></td> | 113 | <td align="center"><br /></td> |
900 | 133 | <td>Free (Apache)</td> | 114 | <td>Free (Apache)</td> |
901 | 134 | </tr> | 115 | </tr> |
902 | 135 | 116 | ||
903 | 136 | <tr> | 117 | <tr> |
904 | 137 | <td><a target="other" rel="nofollow" href="http://ant.apache.org/">Apache</a></td> | 118 | <td><a target="other" rel="nofollow" href="http://ant.apache.org/">Apache</a></td> |
911 | 138 | <td><a target="other" href="http://ant.apache.org/manual/OptionalTypes/classfileset.html">Ant Classfileset</a></td> | 119 | <td><a target="other" href="http://ant.apache.org/manual/Types/classfileset.html">Ant Classfileset</a></td> |
912 | 139 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td> | 120 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> |
913 | 140 | <td align="center"><br></td> | 121 | <td align="center"><br /></td> |
914 | 141 | <td align="center"><br></td> | 122 | <td align="center"><br /></td> |
915 | 142 | <td align="center"><br></td> | 123 | <td align="center"><br /></td> |
916 | 143 | <td>Free (Apache)</td> | 124 | <td>Free (Apache)</td> |
917 | 125 | </tr> | ||
918 | 126 | |||
919 | 127 | <tr> | ||
920 | 128 | <td><a target="other" rel="nofollow" href="http://www.celton.mobi/">Carsten Elton Sørensen</a></td> | ||
921 | 129 | <td><a target="other" href="http://code.google.com/p/treeshaker/">Treeshaker</a></td> | ||
922 | 130 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> | ||
923 | 131 | <td align="center"><br /></td> | ||
924 | 132 | <td align="center"><br /></td> | ||
925 | 133 | <td align="center"><br /></td> | ||
926 | 134 | <td>Free (Apache)</td> | ||
927 | 135 | </tr> | ||
928 | 136 | |||
929 | 137 | <tr> | ||
930 | 138 | <td><a target="other" rel="nofollow" href="http://www.ucdetector.org/">Jörg Spieler</a></td> | ||
931 | 139 | <td><a target="other" href="http://www.ucdetector.org/">UCDetector</a></td> | ||
932 | 140 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> | ||
933 | 141 | <td align="center"><br /></td> | ||
934 | 142 | <td align="center"><br /></td> | ||
935 | 143 | <td align="center"><br /></td> | ||
936 | 144 | <td>Free (EPL)</td> | ||
937 | 144 | </tr> | 145 | </tr> |
938 | 145 | 146 | ||
939 | 146 | <tr> | 147 | <tr> |
940 | 147 | <td><a target="other" rel="nofollow" href="http://www.curious-creature.org/">Romain Guy</a></td> | 148 | <td><a target="other" rel="nofollow" href="http://www.curious-creature.org/">Romain Guy</a></td> |
941 | 148 | <td><a target="other" href="http://www.jroller.com/gfx/entry/get_what_you_need_from">Harvester</a></td> | 149 | <td><a target="other" href="http://www.jroller.com/gfx/entry/get_what_you_need_from">Harvester</a></td> |
946 | 149 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td> | 150 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> |
947 | 150 | <td align="center"><br></td> | 151 | <td align="center"><br /></td> |
948 | 151 | <td align="center"><br></td> | 152 | <td align="center"><br /></td> |
949 | 152 | <td align="center"><br></td> | 153 | <td align="center"><br /></td> |
950 | 153 | <td>Free (BSD)</td> | 154 | <td>Free (BSD)</td> |
951 | 154 | </tr> | 155 | </tr> |
952 | 155 | 156 | ||
953 | 156 | <tr> | 157 | <tr> |
960 | 157 | <td><a target="other" rel="nofollow" href="https://dcd.dev.java.net/">Emeric Vernat</a></td> | 158 | <td><a target="other" rel="nofollow" href="http://java.net/projects/dcd/">Emeric Vernat</a></td> |
961 | 158 | <td><a target="other" href="https://dcd.dev.java.net/">DCD</a></td> | 159 | <td><a target="other" href="http://java.net/projects/dcd/">DCD</a></td> |
962 | 159 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td> | 160 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> |
963 | 160 | <td align="center"><br></td> | 161 | <td align="center"><br /></td> |
964 | 161 | <td align="center"><br></td> | 162 | <td align="center"><br /></td> |
965 | 162 | <td align="center"><br></td> | 163 | <td align="center"><br /></td> |
966 | 163 | <td>Free (LGPL)</td> | 164 | <td>Free (LGPL)</td> |
967 | 164 | </tr> | 165 | </tr> |
968 | 165 | 166 | ||
969 | 166 | <tr> | 167 | <tr> |
970 | 167 | <td><a target="other" rel="nofollow" href="http://sadun-util.sourceforge.net/">Cristiano Sadun</a></td> | 168 | <td><a target="other" rel="nofollow" href="http://sadun-util.sourceforge.net/">Cristiano Sadun</a></td> |
971 | 168 | <td><a target="other" href="http://sadun-util.sourceforge.net/pack.html">Pack</a></td> | 169 | <td><a target="other" href="http://sadun-util.sourceforge.net/pack.html">Pack</a></td> |
986 | 169 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td> | 170 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> |
987 | 170 | <td align="center"><br></td> | 171 | <td align="center"><br /></td> |
988 | 171 | <td align="center"><br></td> | 172 | <td align="center"><br /></td> |
989 | 172 | <td align="center"><br></td> | 173 | <td align="center"><br /></td> |
976 | 173 | <td>Free (LGPL)</td> | ||
977 | 174 | </tr> | ||
978 | 175 | |||
979 | 176 | <tr> | ||
980 | 177 | <td><a target="other" rel="nofollow" href="http://darcs.brianweb.net/">Brian Alliet</a></td> | ||
981 | 178 | <td><a target="other" href="http://darcs.brianweb.net/gcclass/">Gcclass</a></td> | ||
982 | 179 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td> | ||
983 | 180 | <td align="center"><br></td> | ||
984 | 181 | <td align="center"><br></td> | ||
985 | 182 | <td align="center"><br></td> | ||
990 | 183 | <td>Free (LGPL)</td> | 174 | <td>Free (LGPL)</td> |
991 | 184 | </tr> | 175 | </tr> |
992 | 185 | 176 | ||
993 | 186 | <tr> | 177 | <tr> |
994 | 187 | <td><a target="other" rel="nofollow" href="http://www.sable.mcgill.ca/">Sable</a></td> | 178 | <td><a target="other" rel="nofollow" href="http://www.sable.mcgill.ca/">Sable</a></td> |
995 | 188 | <td><a target="other" href="http://www.sable.mcgill.ca/soot/">Soot</a></td> | 179 | <td><a target="other" href="http://www.sable.mcgill.ca/soot/">Soot</a></td> |
1000 | 189 | <td align="center"><br></td> | 180 | <td align="center"><br /></td> |
1001 | 190 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td> | 181 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> |
1002 | 191 | <td align="center"><br></td> | 182 | <td align="center"><br /></td> |
1003 | 192 | <td align="center"><br></td> | 183 | <td align="center"><br /></td> |
1004 | 193 | <td>Free (LGPL)</td> | 184 | <td>Free (LGPL)</td> |
1005 | 194 | </tr> | 185 | </tr> |
1006 | 195 | 186 | ||
1007 | 196 | <tr> | 187 | <tr> |
1008 | 197 | <td><a target="other" rel="nofollow" href="http://www.garret.ru/~knizhnik/">Konstantin Knizhnik</a></td> | 188 | <td><a target="other" rel="nofollow" href="http://www.garret.ru/~knizhnik/">Konstantin Knizhnik</a></td> |
1009 | 198 | <td><a target="other" href="http://www.garret.ru/~knizhnik/javago/ReadMe.htm">JavaGO</a></td> | 189 | <td><a target="other" href="http://www.garret.ru/~knizhnik/javago/ReadMe.htm">JavaGO</a></td> |
1024 | 199 | <td align="center"><br></td> | 190 | <td align="center"><br /></td> |
1025 | 200 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td> | 191 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> |
1026 | 201 | <td align="center"><br></td> | 192 | <td align="center"><br /></td> |
1027 | 202 | <td align="center"><br></td> | 193 | <td align="center"><br /></td> |
1014 | 203 | <td>Free</td> | ||
1015 | 204 | </tr> | ||
1016 | 205 | |||
1017 | 206 | <tr> | ||
1018 | 207 | <td><a target="other" rel="nofollow" href="http://donquixote.cafebabe.jp/">Haruaki Tamada</a></td> | ||
1019 | 208 | <td><a target="other" href="http://donquixote.cafebabe.jp/">DonQuixote</a></td> | ||
1020 | 209 | <td align="center"><br></td> | ||
1021 | 210 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td> | ||
1022 | 211 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td> | ||
1023 | 212 | <td align="center"><br></td> | ||
1028 | 213 | <td>Free</td> | 194 | <td>Free</td> |
1029 | 214 | </tr> | 195 | </tr> |
1030 | 215 | 196 | ||
1031 | 216 | <tr> | 197 | <tr> |
1032 | 217 | <td><a target="other" rel="nofollow" href="http://www.sable.mcgill.ca/">Sable</a></td> | 198 | <td><a target="other" rel="nofollow" href="http://www.sable.mcgill.ca/">Sable</a></td> |
1033 | 218 | <td><a target="other" href="http://www.sable.mcgill.ca/JBCO/">JBCO</a></td> | 199 | <td><a target="other" href="http://www.sable.mcgill.ca/JBCO/">JBCO</a></td> |
1038 | 219 | <td align="center"><br></td> | 200 | <td align="center"><br /></td> |
1039 | 220 | <td align="center"><br></td> | 201 | <td align="center"><br /></td> |
1040 | 221 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td> | 202 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> |
1041 | 222 | <td align="center"><br></td> | 203 | <td align="center"><br /></td> |
1042 | 223 | <td>Free (LGPL)</td> | 204 | <td>Free (LGPL)</td> |
1043 | 224 | </tr> | 205 | </tr> |
1044 | 225 | 206 | ||
1045 | 226 | <tr> | 207 | <tr> |
1046 | 208 | <td><a target="other" rel="nofollow" href="http://classencrypt.sourceforge.net/">Jeffrey Wheaton</a></td> | ||
1047 | 209 | <td><a target="other" href="http://classencrypt.sourceforge.net/">ClassEncrypt</a></td> | ||
1048 | 210 | <td align="center"><br /></td> | ||
1049 | 211 | <td align="center"><br /></td> | ||
1050 | 212 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> | ||
1051 | 213 | <td align="center"><br /></td> | ||
1052 | 214 | <td>Free (GPL)</td> | ||
1053 | 215 | </tr> | ||
1054 | 216 | |||
1055 | 217 | <tr> | ||
1056 | 227 | <td><a target="other" rel="nofollow" href="http://sourceforge.net/users/glurk/">Thorsten Heit</a></td> | 218 | <td><a target="other" rel="nofollow" href="http://sourceforge.net/users/glurk/">Thorsten Heit</a></td> |
1057 | 228 | <td><a target="other" href="http://sourceforge.net/projects/javaguard/">JavaGuard</a></td> | 219 | <td><a target="other" href="http://sourceforge.net/projects/javaguard/">JavaGuard</a></td> |
1062 | 229 | <td align="center"><br></td> | 220 | <td align="center"><br /></td> |
1063 | 230 | <td align="center"><br></td> | 221 | <td align="center"><br /></td> |
1064 | 231 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td> | 222 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> |
1065 | 232 | <td align="center"><br></td> | 223 | <td align="center"><br /></td> |
1066 | 233 | <td>Free (LGPL)</td> | 224 | <td>Free (LGPL)</td> |
1067 | 234 | </tr> | 225 | </tr> |
1068 | 235 | 226 | ||
1069 | 236 | <tr> | 227 | <tr> |
1070 | 237 | <td><a target="other" rel="nofollow" href="http://mwobfu.sourceforge.net/">Patrick Mueller</a></td> | 228 | <td><a target="other" rel="nofollow" href="http://mwobfu.sourceforge.net/">Patrick Mueller</a></td> |
1071 | 238 | <td><a target="other" href="http://mwobfu.sourceforge.net/">Mwobfu</a></td> | 229 | <td><a target="other" href="http://mwobfu.sourceforge.net/">Mwobfu</a></td> |
1076 | 239 | <td align="center"><br></td> | 230 | <td align="center"><br /></td> |
1077 | 240 | <td align="center"><br></td> | 231 | <td align="center"><br /></td> |
1078 | 241 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td> | 232 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> |
1079 | 242 | <td align="center"><br></td> | 233 | <td align="center"><br /></td> |
1080 | 243 | <td>Free (GPL)</td> | 234 | <td>Free (GPL)</td> |
1081 | 244 | </tr> | 235 | </tr> |
1082 | 245 | 236 | ||
1083 | 246 | <tr> | 237 | <tr> |
1084 | 247 | <td><a target="other" rel="nofollow" href="http://www.elegant-software.com/">Elegant Software</a></td> | ||
1085 | 248 | <td><a target="other" href="http://www.elegant-software.com/software/jmangle/">JMangle</a></td> | ||
1086 | 249 | <td align="center"><br></td> | ||
1087 | 250 | <td align="center"><br></td> | ||
1088 | 251 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td> | ||
1089 | 252 | <td align="center"><br></td> | ||
1090 | 253 | <td>Free</td> | ||
1091 | 254 | </tr> | ||
1092 | 255 | |||
1093 | 256 | <tr> | ||
1094 | 257 | <td><a target="other" rel="nofollow" href="http://www.bebbosoft.de/">BebboSoft</a></td> | 238 | <td><a target="other" rel="nofollow" href="http://www.bebbosoft.de/">BebboSoft</a></td> |
1120 | 258 | <td><a target="other" href="http://www.bebbosoft.de/index.html#java/mug/index.html">Bb_mug</a></td> | 239 | <td><a target="other" href="http://www.bebbosoft.de/#java/mug/index.wiki">Bb_mug</a></td> |
1121 | 259 | <td align="center"><br></td> | 240 | <td align="center"><br /></td> |
1122 | 260 | <td align="center"><br></td> | 241 | <td align="center"><br /></td> |
1123 | 261 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td> | 242 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> |
1124 | 262 | <td align="center"><br></td> | 243 | <td align="center"><br /></td> |
1125 | 263 | <td>Free (no source)</td> | 244 | <td>Free (no source)</td> |
1126 | 264 | </tr> | 245 | </tr> |
1127 | 265 | 246 | ||
1128 | 266 | <tr> | 247 | <tr> |
1129 | 267 | <td><a target="other" rel="nofollow" href="http://www.drjava.de/">Dr. Java</a></td> | 248 | <td><a target="other" rel="nofollow" href="http://github.com/v6ak">Vít Šesták</a></td> |
1130 | 268 | <td><a target="other" href="http://www.drjava.de/obfuscator/">Marvin Obfuscator</a></td> | 249 | <td><a target="other" href="http://github.com/v6ak/Preverifier/">Preverifier</a></td> |
1131 | 269 | <td align="center"><br></td> | 250 | <td align="center"><br /></td> |
1132 | 270 | <td align="center"><br></td> | 251 | <td align="center"><br /></td> |
1133 | 271 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td> | 252 | <td align="center"><br /></td> |
1134 | 272 | <td align="center"><br></td> | 253 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> |
1135 | 273 | <td>Free (no source)</td> | 254 | <td>Free (EPL)</td> |
1136 | 274 | </tr> | 255 | </tr> |
1137 | 275 | 256 | ||
1138 | 276 | <tr> | 257 | <tr> |
1139 | 277 | <td><a target="other" rel="nofollow" href="http://www.ibm.com/">IBM</a></td> | 258 | <td><a target="_top" href="http://www.saikoa.com/">Saikoa</a></td> |
1140 | 278 | <td><a target="other" href="http://www-306.ibm.com/software/wireless/wsdd/">WSDD</a></td> | 259 | <td><a target="_top" href="http://www.saikoa.com/dexguard">DexGuard</a></td> |
1141 | 279 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td> | 260 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> |
1142 | 280 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td> | 261 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> |
1143 | 281 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td> | 262 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> |
1144 | 282 | <td align="center"><br></td> | 263 | <td align="center"><br /></td> |
1145 | 283 | <td>Commercial</td> | 264 | <td>Commercial</td> |
1146 | 284 | </tr> | 265 | </tr> |
1147 | 285 | 266 | ||
1148 | 286 | <tr> | 267 | <tr> |
1149 | 287 | <td><a target="other" rel="nofollow" href="http://www.preemptive.com/">PreEmptive</a></td> | 268 | <td><a target="other" rel="nofollow" href="http://www.preemptive.com/">PreEmptive</a></td> |
1150 | 288 | <td><a target="other" href="http://www.preemptive.com/products/dasho/index.html">DashOPro</a></td> | 269 | <td><a target="other" href="http://www.preemptive.com/products/dasho/index.html">DashOPro</a></td> |
1155 | 289 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td> | 270 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> |
1156 | 290 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td> | 271 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> |
1157 | 291 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td> | 272 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> |
1158 | 292 | <td align="center"><br></td> | 273 | <td align="center"><br /></td> |
1159 | 293 | <td>Commercial</td> | 274 | <td>Commercial</td> |
1160 | 294 | </tr> | 275 | </tr> |
1161 | 295 | 276 | ||
1162 | 296 | <tr> | 277 | <tr> |
1163 | 297 | <td><a target="other" rel="nofollow" href="http://www.zelix.com/">Zelix</a></td> | 278 | <td><a target="other" rel="nofollow" href="http://www.zelix.com/">Zelix</a></td> |
1164 | 298 | <td><a target="other" href="http://www.zelix.com/klassmaster/index.html">KlassMaster</a></td> | 279 | <td><a target="other" href="http://www.zelix.com/klassmaster/index.html">KlassMaster</a></td> |
1179 | 299 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td> | 280 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> |
1180 | 300 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td> | 281 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> |
1181 | 301 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td> | 282 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> |
1182 | 302 | <td align="center"><br></td> | 283 | <td align="center"><br /></td> |
1169 | 303 | <td>Commercial</td> | ||
1170 | 304 | </tr> | ||
1171 | 305 | |||
1172 | 306 | <tr> | ||
1173 | 307 | <td><a target="other" rel="nofollow" href="http://www.s5systems.com/">S5 Systems</a></td> | ||
1174 | 308 | <td><a target="other" href="http://www.s5systems.com/jPresto.htm">jPresto</a></td> | ||
1175 | 309 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td> | ||
1176 | 310 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td> | ||
1177 | 311 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td> | ||
1178 | 312 | <td align="center"><br></td> | ||
1183 | 313 | <td>Commercial</td> | 284 | <td>Commercial</td> |
1184 | 314 | </tr> | 285 | </tr> |
1185 | 315 | 286 | ||
1186 | 316 | <tr> | 287 | <tr> |
1187 | 317 | <td><a target="other" rel="nofollow" href="http://www.s-cradle.com/english/index.html">Sophia Cradle</a></td> | 288 | <td><a target="other" rel="nofollow" href="http://www.s-cradle.com/english/index.html">Sophia Cradle</a></td> |
1188 | 318 | <td><a target="other" href="http://www.s-cradle.com/english/products/sophiacompress_java/index.html">SophiaCompress</a></td> | 289 | <td><a target="other" href="http://www.s-cradle.com/english/products/sophiacompress_java/index.html">SophiaCompress</a></td> |
1213 | 319 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td> | 290 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> |
1214 | 320 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td> | 291 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> |
1215 | 321 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td> | 292 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> |
1216 | 322 | <td align="center"><br></td> | 293 | <td align="center"><br /></td> |
1193 | 323 | <td>Commercial</td> | ||
1194 | 324 | </tr> | ||
1195 | 325 | |||
1196 | 326 | <tr> | ||
1197 | 327 | <td><a target="other" rel="nofollow" href="http://www.retrologic.com/">RetroLogic</a></td> | ||
1198 | 328 | <td><a target="other" href="http://www.retrologic.com/">RetroGuard</a></td> | ||
1199 | 329 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td> | ||
1200 | 330 | <td align="center"><br></td> | ||
1201 | 331 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td> | ||
1202 | 332 | <td align="center"><br></td> | ||
1203 | 333 | <td>Commercial</td> | ||
1204 | 334 | </tr> | ||
1205 | 335 | |||
1206 | 336 | <tr> | ||
1207 | 337 | <td><a target="other" rel="nofollow" href="http://www.codingart.com/">CodingArt</a></td> | ||
1208 | 338 | <td><a target="other" href="http://www.codingart.com/codeshield.html">CodeShield</a></td> | ||
1209 | 339 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td> | ||
1210 | 340 | <td align="center"><br></td> | ||
1211 | 341 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td> | ||
1212 | 342 | <td align="center"><br></td> | ||
1217 | 343 | <td>Commercial</td> | 294 | <td>Commercial</td> |
1218 | 344 | </tr> | 295 | </tr> |
1219 | 345 | 296 | ||
1220 | 346 | <tr> | 297 | <tr> |
1221 | 347 | <td><a target="other" rel="nofollow" href="http://www.e-t.com/">Eastridge Technology</a></td> | 298 | <td><a target="other" rel="nofollow" href="http://www.e-t.com/">Eastridge Technology</a></td> |
1222 | 348 | <td><a target="other" href="http://www.e-t.com/jshrink.html">Jshrink</a></td> | 299 | <td><a target="other" href="http://www.e-t.com/jshrink.html">Jshrink</a></td> |
1237 | 349 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td> | 300 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> |
1238 | 350 | <td align="center"><br></td> | 301 | <td align="center"><br /></td> |
1239 | 351 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td> | 302 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> |
1240 | 352 | <td align="center"><br></td> | 303 | <td align="center"><br /></td> |
1227 | 353 | <td>Commercial</td> | ||
1228 | 354 | </tr> | ||
1229 | 355 | |||
1230 | 356 | <tr> | ||
1231 | 357 | <td><a target="other" rel="nofollow" href="http://www.helseth.com/">Helseth</a></td> | ||
1232 | 358 | <td><a target="other" href="http://www.helseth.com/HJO.htm">JObfuscator</a></td> | ||
1233 | 359 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td> | ||
1234 | 360 | <td align="center"><br></td> | ||
1235 | 361 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td> | ||
1236 | 362 | <td align="center"><br></td> | ||
1241 | 363 | <td>Commercial</td> | 304 | <td>Commercial</td> |
1242 | 364 | </tr> | 305 | </tr> |
1243 | 365 | 306 | ||
1244 | 366 | <tr> | 307 | <tr> |
1245 | 367 | <td><a target="other" rel="nofollow" href="http://www.leesw.com/">LeeSoftware</a></td> | 308 | <td><a target="other" rel="nofollow" href="http://www.leesw.com/">LeeSoftware</a></td> |
1246 | 368 | <td><a target="other" href="http://www.leesw.com/">Smokescreen Obfuscator</a></td> | 309 | <td><a target="other" href="http://www.leesw.com/">Smokescreen Obfuscator</a></td> |
1261 | 369 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td> | 310 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> |
1262 | 370 | <td align="center"><br></td> | 311 | <td align="center"><br /></td> |
1263 | 371 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td> | 312 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> |
1264 | 372 | <td align="center"><br></td> | 313 | <td align="center"><br /></td> |
1251 | 373 | <td>Commercial</td> | ||
1252 | 374 | </tr> | ||
1253 | 375 | |||
1254 | 376 | <tr> | ||
1255 | 377 | <td><a target="other" rel="nofollow" href="http://www.vegatech.com/">Vega Technologies</a></td> | ||
1256 | 378 | <td><a target="other" href="http://www.vegatech.com/jzipper/">JZipper</a></td> | ||
1257 | 379 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td> | ||
1258 | 380 | <td align="center"><br></td> | ||
1259 | 381 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td> | ||
1260 | 382 | <td align="center"><br></td> | ||
1265 | 383 | <td>Commercial</td> | 314 | <td>Commercial</td> |
1266 | 384 | </tr> | 315 | </tr> |
1267 | 385 | 316 | ||
1268 | 386 | <tr> | 317 | <tr> |
1269 | 387 | <td><a target="other" rel="nofollow" href="http://www.innaworks.com/">Innaworks</a></td> | 318 | <td><a target="other" rel="nofollow" href="http://www.innaworks.com/">Innaworks</a></td> |
1275 | 388 | <td><a target="other" href="http://www.innaworks.com/">mBooster</a></td> | 319 | <td><a target="other" href="http://www.innaworks.com/mBooster">mBooster</a></td> |
1276 | 389 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td> | 320 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> |
1277 | 390 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td> | 321 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> |
1278 | 391 | <td align="center"><br></td> | 322 | <td align="center"><br /></td> |
1279 | 392 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td> | 323 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> |
1280 | 393 | <td>Commercial</td> | 324 | <td>Commercial</td> |
1281 | 394 | </tr> | 325 | </tr> |
1282 | 395 | 326 | ||
1283 | 396 | <tr> | 327 | <tr> |
1284 | 397 | <td><a target="other" rel="nofollow" href="http://www.uni-vologda.ac.ru/~c3c/">Sergey Sverdlov</a></td> | 328 | <td><a target="other" rel="nofollow" href="http://www.uni-vologda.ac.ru/~c3c/">Sergey Sverdlov</a></td> |
1285 | 398 | <td><a target="other" href="http://www.uni-vologda.ac.ru/~c3c/jco/">J.Class Optimizer</a></td> | 329 | <td><a target="other" href="http://www.uni-vologda.ac.ru/~c3c/jco/">J.Class Optimizer</a></td> |
1290 | 399 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td> | 330 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> |
1291 | 400 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td> | 331 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> |
1292 | 401 | <td align="center"><br></td> | 332 | <td align="center"><br /></td> |
1293 | 402 | <td align="center"><br></td> | 333 | <td align="center"><br /></td> |
1294 | 403 | <td>Commercial</td> | 334 | <td>Commercial</td> |
1295 | 404 | </tr> | 335 | </tr> |
1296 | 405 | 336 | ||
1297 | 406 | <tr> | 337 | <tr> |
1298 | 407 | <td><a target="other" rel="nofollow" href="http://www.smardec.com/">Smardec</a></td> | 338 | <td><a target="other" rel="nofollow" href="http://www.smardec.com/">Smardec</a></td> |
1304 | 408 | <td><a target="other" href="//www.allatori.com/">Allatori</a></td> | 339 | <td><a target="other" href="http://www.allatori.com/">Allatori</a></td> |
1305 | 409 | <td align="center"><br></td> | 340 | <td align="center"><br /></td> |
1306 | 410 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td> | 341 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> |
1307 | 411 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td> | 342 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> |
1308 | 412 | <td align="center"><br></td> | 343 | <td align="center"><br /></td> |
1309 | 413 | <td>Commercial</td> | 344 | <td>Commercial</td> |
1310 | 414 | </tr> | 345 | </tr> |
1311 | 415 | 346 | ||
1312 | 416 | <tr> | 347 | <tr> |
1313 | 417 | <td><a target="other" rel="nofollow" href="http://cs.arizona.edu/">U. of Arizona</a></td> | 348 | <td><a target="other" rel="nofollow" href="http://cs.arizona.edu/">U. of Arizona</a></td> |
1314 | 418 | <td><a target="other" href="http://sandmark.cs.arizona.edu/">SandMark</a></td> | 349 | <td><a target="other" href="http://sandmark.cs.arizona.edu/">SandMark</a></td> |
1319 | 419 | <td align="center"><br></td> | 350 | <td align="center"><br /></td> |
1320 | 420 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td> | 351 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> |
1321 | 421 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td> | 352 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> |
1322 | 422 | <td align="center"><br></td> | 353 | <td align="center"><br /></td> |
1323 | 354 | <td>Commercial</td> | ||
1324 | 355 | </tr> | ||
1325 | 356 | |||
1326 | 357 | <tr> | ||
1327 | 358 | <td><a target="other" rel="nofollow" href="http://zenofx.com/">Zenofx</a></td> | ||
1328 | 359 | <td><a target="other" href="http://zenofx.com/classguard/">ClassGuard</a></td> | ||
1329 | 360 | <td align="center"><br /></td> | ||
1330 | 361 | <td align="center"><br /></td> | ||
1331 | 362 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> | ||
1332 | 363 | <td align="center"><br /></td> | ||
1333 | 364 | <td>Commercial</td> | ||
1334 | 365 | </tr> | ||
1335 | 366 | |||
1336 | 367 | <tr> | ||
1337 | 368 | <td><a target="other" rel="nofollow" href="http://www.bisguard.com/">BIS Guard & Co.</a></td> | ||
1338 | 369 | <td><a target="other" href="http://www.bisguard.com/java.html">Java Antidecompiler</a></td> | ||
1339 | 370 | <td align="center"><br /></td> | ||
1340 | 371 | <td align="center"><br /></td> | ||
1341 | 372 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> | ||
1342 | 373 | <td align="center"><br /></td> | ||
1343 | 423 | <td>Commercial</td> | 374 | <td>Commercial</td> |
1344 | 424 | </tr> | 375 | </tr> |
1345 | 425 | 376 | ||
1346 | 426 | <tr> | 377 | <tr> |
1347 | 427 | <td><a target="other" rel="nofollow" href="http://www.force5.com/">Force 5</a></td> | 378 | <td><a target="other" rel="nofollow" href="http://www.force5.com/">Force 5</a></td> |
1353 | 428 | <td><a target="other" href="http://www.force5.com/">JCloak</a></td> | 379 | <td><a target="other" href="http://www.force5.com/JCloak/ProductJCloak.html">JCloak</a></td> |
1354 | 429 | <td align="center"><br></td> | 380 | <td align="center"><br /></td> |
1355 | 430 | <td align="center"><br></td> | 381 | <td align="center"><br /></td> |
1356 | 431 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td> | 382 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> |
1357 | 432 | <td align="center"><br></td> | 383 | <td align="center"><br /></td> |
1358 | 433 | <td>Commercial</td> | 384 | <td>Commercial</td> |
1359 | 434 | </tr> | 385 | </tr> |
1360 | 435 | 386 | ||
1361 | 436 | <tr> | 387 | <tr> |
1362 | 437 | <td><a target="other" rel="nofollow" href="http://www.semdesigns.com/">Semantic Designs</a></td> | 388 | <td><a target="other" rel="nofollow" href="http://www.semdesigns.com/">Semantic Designs</a></td> |
1363 | 438 | <td><a target="other" href="http://www.semdesigns.com/Products/Obfuscators/JavaObfuscator.html">Obfuscator</a></td> | 389 | <td><a target="other" href="http://www.semdesigns.com/Products/Obfuscators/JavaObfuscator.html">Obfuscator</a></td> |
1368 | 439 | <td align="center"><br></td> | 390 | <td align="center"><br /></td> |
1369 | 440 | <td align="center"><br></td> | 391 | <td align="center"><br /></td> |
1370 | 441 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td> | 392 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> |
1371 | 442 | <td align="center"><br></td> | 393 | <td align="center"><br /></td> |
1372 | 443 | <td>Commercial</td> | 394 | <td>Commercial</td> |
1373 | 444 | </tr> | 395 | </tr> |
1374 | 445 | 396 | ||
1375 | 446 | <tr> | 397 | <tr> |
1376 | 447 | <td><a target="other" rel="nofollow" href="http://www.duckware.com/">Duckware</a></td> | 398 | <td><a target="other" rel="nofollow" href="http://www.duckware.com/">Duckware</a></td> |
1377 | 448 | <td><a target="other" href="http://www.duckware.com/jobfuscate/">Jobfuscate</a></td> | 399 | <td><a target="other" href="http://www.duckware.com/jobfuscate/">Jobfuscate</a></td> |
1423 | 449 | <td align="center"><br></td> | 400 | <td align="center"><br /></td> |
1424 | 450 | <td align="center"><br></td> | 401 | <td align="center"><br /></td> |
1425 | 451 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td> | 402 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> |
1426 | 452 | <td align="center"><br></td> | 403 | <td align="center"><br /></td> |
1427 | 453 | <td>Commercial</td> | 404 | <td>Commercial</td> |
1428 | 454 | </tr> | 405 | </tr> |
1429 | 455 | 406 | ||
1430 | 456 | <tr> | 407 | <tr> |
1431 | 457 | <td><a target="other" rel="nofollow" href="http://www.jproof.com/">JProof</a></td> | 408 | <td><a target="other" rel="nofollow" href="http://www.arxan.com/">Arxan</a></td> |
1432 | 458 | <td><a target="other" href="http://www.jproof.com/">JProof</a></td> | 409 | <td><a target="other" href="http://www.arxan.com/software-protection-products/java-GuardIt/index.php">GuardIT</a></td> |
1433 | 459 | <td align="center"><br></td> | 410 | <td align="center"><br /></td> |
1434 | 460 | <td align="center"><br></td> | 411 | <td align="center"><br /></td> |
1435 | 461 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td> | 412 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> |
1436 | 462 | <td align="center"><br></td> | 413 | <td align="center"><br /></td> |
1437 | 463 | <td>Commercial</td> | 414 | <td>Commercial</td> |
1393 | 464 | </tr> | ||
1394 | 465 | |||
1395 | 466 | <tr> | ||
1396 | 467 | <td><a target="other" rel="nofollow" href="http://www.solutia.ro/">GITS</a></td> | ||
1397 | 468 | <td><a target="other" href="http://www.solutia.ro/pages/javadc/">Blurfuscator</a></td> | ||
1398 | 469 | <td align="center"><br></td> | ||
1399 | 470 | <td align="center"><br></td> | ||
1400 | 471 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td> | ||
1401 | 472 | <td align="center"><br></td> | ||
1402 | 473 | <td>Commercial</td> | ||
1403 | 474 | </tr> | ||
1404 | 475 | |||
1405 | 476 | <tr> | ||
1406 | 477 | <td><a target="other" rel="nofollow" href="http://www.chainkey.com/">ChainKey</a></td> | ||
1407 | 478 | <td><a target="other" href="http://www.chainkey.com/en/jcp/">Java Code Protector</a></td> | ||
1408 | 479 | <td align="center"><br></td> | ||
1409 | 480 | <td align="center"><br></td> | ||
1410 | 481 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td> | ||
1411 | 482 | <td align="center"><br></td> | ||
1412 | 483 | <td>Commercial</td> | ||
1413 | 484 | </tr> | ||
1414 | 485 | |||
1415 | 486 | <tr> | ||
1416 | 487 | <td><a target="other" rel="nofollow" href="http://sourceforge.net/projects/flmobf/">Alain Moran</a></td> | ||
1417 | 488 | <td><a target="other" href="http://sourceforge.net/projects/flmobf/">flmObf</a></td> | ||
1418 | 489 | <td align="center"><br></td> | ||
1419 | 490 | <td align="center"><br></td> | ||
1420 | 491 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td> | ||
1421 | 492 | <td align="center"><br></td> | ||
1422 | 493 | <td>Free (BSD)</td> | ||
1438 | 494 | </tr> | 415 | </tr> |
1439 | 495 | 416 | ||
1440 | 496 | <tr> | 417 | <tr> |
1441 | 497 | <td><a target="other" rel="nofollow" href="http://www.chez.com/vasile/">Vasile Calmatui</a></td> | 418 | <td><a target="other" rel="nofollow" href="http://www.chez.com/vasile/">Vasile Calmatui</a></td> |
1442 | 498 | <td><a target="other" href="http://www.chez.com/vasile/obfu/VasObfuLite.html">VasObfuLite</a></td> | 419 | <td><a target="other" href="http://www.chez.com/vasile/obfu/VasObfuLite.html">VasObfuLite</a></td> |
1447 | 499 | <td align="center"><br></td> | 420 | <td align="center"><br /></td> |
1448 | 500 | <td align="center"><br></td> | 421 | <td align="center"><br /></td> |
1449 | 501 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td> | 422 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> |
1450 | 502 | <td align="center"><br></td> | 423 | <td align="center"><br /></td> |
1451 | 503 | <td>Free</td> | 424 | <td>Free</td> |
1452 | 504 | </tr> | 425 | </tr> |
1453 | 505 | 426 | ||
1454 | 506 | <tr class="disappeared"> | 427 | <tr class="disappeared"> |
1455 | 507 | <td><a target="other" rel="nofollow" href="http://www.alphaworks.ibm.com/">IBM AlphaWorks</a></td> | 428 | <td><a target="other" rel="nofollow" href="http://www.alphaworks.ibm.com/">IBM AlphaWorks</a></td> |
1456 | 508 | <td><a target="other" href="http://www.research.ibm.com/jax/">JAX</a></td> | 429 | <td><a target="other" href="http://www.research.ibm.com/jax/">JAX</a></td> |
1461 | 509 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td> | 430 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> |
1462 | 510 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td> | 431 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> |
1463 | 511 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td> | 432 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> |
1464 | 512 | <td align="center"><br></td> | 433 | <td align="center"><br /></td> |
1465 | 513 | <td>(discontinued)</td> | 434 | <td>(discontinued)</td> |
1466 | 514 | </tr> | 435 | </tr> |
1467 | 515 | 436 | ||
1468 | 516 | <tr class="disappeared"> | 437 | <tr class="disappeared"> |
1469 | 438 | <td><a target="other" rel="nofollow" href="http://www.nq4.de/">NQ4</a></td> | ||
1470 | 439 | <td><a target="other" rel="nofollow" href="http://www.nq4.de/">Joga</a></td> | ||
1471 | 440 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> | ||
1472 | 441 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> | ||
1473 | 442 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> | ||
1474 | 443 | <td align="center"><br /></td> | ||
1475 | 444 | <td>(discontinued?)</td> | ||
1476 | 445 | </tr> | ||
1477 | 446 | |||
1478 | 447 | <tr class="disappeared"> | ||
1479 | 517 | <td><a target="other" rel="nofollow" href="http://www-i2.informatik.rwth-aachen.de/~markusj/">Markus Jansen</a></td> | 448 | <td><a target="other" rel="nofollow" href="http://www-i2.informatik.rwth-aachen.de/~markusj/">Markus Jansen</a></td> |
1480 | 518 | <td><a target="other" rel="nofollow" href="http://www-i2.informatik.rwth-aachen.de/~markusj/jopt/">Jopt</a></td> | 449 | <td><a target="other" rel="nofollow" href="http://www-i2.informatik.rwth-aachen.de/~markusj/jopt/">Jopt</a></td> |
1485 | 519 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td> | 450 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> |
1486 | 520 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td> | 451 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> |
1487 | 521 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td> | 452 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> |
1488 | 522 | <td align="center"><br></td> | 453 | <td align="center"><br /></td> |
1489 | 454 | <td>(disappeared?)</td> | ||
1490 | 455 | </tr> | ||
1491 | 456 | |||
1492 | 457 | <tr class="disappeared"> | ||
1493 | 458 | <td><a target="other" rel="nofollow" href="http://www.geocities.com/CapeCanaveral/Hall/2334/resume.html">Alexander Shvets</a></td> | ||
1494 | 459 | <td><a target="other" rel="nofollow" href="http://www.geocities.com/CapeCanaveral/Hall/2334/Programs/cafebabe.html">CafeBabe</a></td> | ||
1495 | 460 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> | ||
1496 | 461 | <td align="center"><br /></td> | ||
1497 | 462 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> | ||
1498 | 463 | <td align="center"><br /></td> | ||
1499 | 464 | <td>(disappeared?)</td> | ||
1500 | 465 | </tr> | ||
1501 | 466 | |||
1502 | 467 | <tr class="disappeared"> | ||
1503 | 468 | <td><a target="other" rel="nofollow" href="http://darcs.brianweb.net/">Brian Alliet</a></td> | ||
1504 | 469 | <td><a target="other" rel="nofollow" href="http://darcs.brianweb.net/gcclass/">Gcclass</a></td> | ||
1505 | 470 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> | ||
1506 | 471 | <td align="center"><br /></td> | ||
1507 | 472 | <td align="center"><br /></td> | ||
1508 | 473 | <td align="center"><br /></td> | ||
1509 | 474 | <td>(disappeared?)</td> | ||
1510 | 475 | </tr> | ||
1511 | 476 | |||
1512 | 477 | <tr class="disappeared"> | ||
1513 | 478 | <td><a target="other" rel="nofollow" href="http://www.cs.purdue.edu/homes/grothoff/">Christian Grothoff</a></td> | ||
1514 | 479 | <td><a target="other" rel="nofollow" href="http://www.ovmj.org/jamit/">Jamit</a></td> | ||
1515 | 480 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> | ||
1516 | 481 | <td align="center"><br /></td> | ||
1517 | 482 | <td align="center"><br /></td> | ||
1518 | 483 | <td align="center"><br /></td> | ||
1519 | 484 | <td>(disappeared?)</td> | ||
1520 | 485 | </tr> | ||
1521 | 486 | |||
1522 | 487 | <tr class="disappeared"> | ||
1523 | 488 | <td><a target="other" rel="nofollow" href="http://donquixote.cafebabe.jp/">Haruaki Tamada</a></td> | ||
1524 | 489 | <td><a target="other" rel="nofollow" href="http://donquixote.cafebabe.jp/">DonQuixote</a></td> | ||
1525 | 490 | <td align="center"><br /></td> | ||
1526 | 491 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> | ||
1527 | 492 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> | ||
1528 | 493 | <td align="center"><br /></td> | ||
1529 | 494 | <td>(disappeared?)</td> | ||
1530 | 495 | </tr> | ||
1531 | 496 | |||
1532 | 497 | <tr class="disappeared"> | ||
1533 | 498 | <td><a target="other" rel="nofollow" href="http://www.utdallas.edu/~gxz014000/">Bajie</a></td> | ||
1534 | 499 | <td><a target="other" rel="nofollow" href="http://www.utdallas.edu/~gxz014000/jcmp/">JCMP</a></td> | ||
1535 | 500 | <td align="center"><br /></td> | ||
1536 | 501 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> | ||
1537 | 502 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> | ||
1538 | 503 | <td align="center"><br /></td> | ||
1539 | 504 | <td>(disappeared?)</td> | ||
1540 | 505 | </tr> | ||
1541 | 506 | |||
1542 | 507 | <tr class="disappeared"> | ||
1543 | 508 | <td><a target="other" rel="nofollow" href="http://www.elegant-software.com/">Elegant Software</a></td> | ||
1544 | 509 | <td><a target="other" rel="nofollow" href="http://www.elegant-software.com/software/jmangle/">JMangle</a></td> | ||
1545 | 510 | <td align="center"><br /></td> | ||
1546 | 511 | <td align="center"><br /></td> | ||
1547 | 512 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> | ||
1548 | 513 | <td align="center"><br /></td> | ||
1549 | 523 | <td>(disappeared?)</td> | 514 | <td>(disappeared?)</td> |
1550 | 524 | </tr> | 515 | </tr> |
1551 | 525 | 516 | ||
1552 | 526 | <tr class="disappeared"> | 517 | <tr class="disappeared"> |
1553 | 527 | <td><a target="other" rel="nofollow" href="http://www.primenet.com/~ej">Eron Jokipii</a></td> | 518 | <td><a target="other" rel="nofollow" href="http://www.primenet.com/~ej">Eron Jokipii</a></td> |
1554 | 528 | <td><a target="other" rel="nofollow" href="http://www.primenet.com/~ej">Jobe</a></td> | 519 | <td><a target="other" rel="nofollow" href="http://www.primenet.com/~ej">Jobe</a></td> |
1559 | 529 | <td align="center"><br></td> | 520 | <td align="center"><br /></td> |
1560 | 530 | <td align="center"><br></td> | 521 | <td align="center"><br /></td> |
1561 | 531 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td> | 522 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> |
1562 | 532 | <td align="center"><br></td> | 523 | <td align="center"><br /></td> |
1563 | 533 | <td>(disappeared?)</td> | 524 | <td>(disappeared?)</td> |
1564 | 534 | </tr> | 525 | </tr> |
1565 | 535 | 526 | ||
1566 | 536 | <tr class="disappeared"> | 527 | <tr class="disappeared"> |
1567 | 537 | <td><a target="other" rel="nofollow" href="http://jrc.krdl.org.sg/">JRC</a></td> | 528 | <td><a target="other" rel="nofollow" href="http://jrc.krdl.org.sg/">JRC</a></td> |
1568 | 538 | <td><a target="other" rel="nofollow" href="http://jrc.krdl.org.sg/decaf/">DeCaf</a></td> | 529 | <td><a target="other" rel="nofollow" href="http://jrc.krdl.org.sg/decaf/">DeCaf</a></td> |
1584 | 539 | <td align="center"><br></td> | 530 | <td align="center"><br /></td> |
1585 | 540 | <td align="center"><br></td> | 531 | <td align="center"><br /></td> |
1586 | 541 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td> | 532 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> |
1587 | 542 | <td align="center"><br></td> | 533 | <td align="center"><br /></td> |
1588 | 543 | <td>(disappeared?)</td> | 534 | <td>(disappeared?)</td> |
1589 | 544 | </tr> | 535 | </tr> |
1590 | 545 | 536 | ||
1591 | 546 | <tr class="disappeared"> | 537 | <tr class="disappeared"> |
1592 | 547 | <td><a target="other" rel="nofollow" href="http://www.utdallas.edu/~gxz014000/">Bajie</a></td> | 538 | <td><a target="other" rel="nofollow" href="http://www.drjava.de/">Dr. Java</a></td> |
1593 | 548 | <td><a target="other" rel="nofollow" href="http://www.utdallas.edu/~gxz014000/jcmp/">JCMP</a></td> | 539 | <td><a target="other" rel="nofollow" href="http://www.drjava.de/obfuscator/">Marvin Obfuscator</a></td> |
1594 | 549 | <td align="center"><br></td> | 540 | <td align="center"><br /></td> |
1595 | 550 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td> | 541 | <td align="center"><br /></td> |
1596 | 551 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td> | 542 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> |
1597 | 552 | <td align="center"><br></td> | 543 | <td align="center"><br /></td> |
1598 | 553 | <td>(disappeared?)</td> | 544 | <td>(disappeared?)</td> |
1599 | 545 | </tr> | ||
1600 | 546 | |||
1601 | 547 | <tr class="disappeared"> | ||
1602 | 548 | <td><a target="other" rel="nofollow" href="http://www.ibm.com/">IBM</a></td> | ||
1603 | 549 | <td><a target="other" rel="nofollow" href="http://www-306.ibm.com/software/wireless/wsdd/">WSDD</a></td> | ||
1604 | 550 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> | ||
1605 | 551 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> | ||
1606 | 552 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> | ||
1607 | 553 | <td align="center"><br /></td> | ||
1608 | 554 | <td>Commercial (discontinued?)</td> | ||
1609 | 555 | </tr> | ||
1610 | 556 | |||
1611 | 557 | <tr class="disappeared"> | ||
1612 | 558 | <td><a target="other" rel="nofollow" href="http://www.s5systems.com/">S5 Systems</a></td> | ||
1613 | 559 | <td><a target="other" rel="nofollow" href="http://www.s5systems.com/jPresto.htm">jPresto</a></td> | ||
1614 | 560 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> | ||
1615 | 561 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> | ||
1616 | 562 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> | ||
1617 | 563 | <td align="center"><br /></td> | ||
1618 | 564 | <td>Commercial (discontinued?)</td> | ||
1619 | 554 | </tr> | 565 | </tr> |
1620 | 555 | 566 | ||
1621 | 556 | <tr class="disappeared"> | 567 | <tr class="disappeared"> |
1622 | 557 | <td><a target="other" rel="nofollow" href="http://www.plumbdesign.com/">Plumb Design</a></td> | 568 | <td><a target="other" rel="nofollow" href="http://www.plumbdesign.com/">Plumb Design</a></td> |
1623 | 558 | <td><a target="other" rel="nofollow" href="http://www.condensity.com/">Condensity</a></td> | 569 | <td><a target="other" rel="nofollow" href="http://www.condensity.com/">Condensity</a></td> |
1628 | 559 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td> | 570 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> |
1629 | 560 | <td align="center"><br></td> | 571 | <td align="center"><br /></td> |
1630 | 561 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td> | 572 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> |
1631 | 562 | <td align="center"><br></td> | 573 | <td align="center"><br /></td> |
1632 | 563 | <td>Commercial (discontinued)</td> | 574 | <td>Commercial (discontinued)</td> |
1633 | 564 | </tr> | 575 | </tr> |
1634 | 565 | 576 | ||
1635 | 566 | <tr class="disappeared"> | 577 | <tr class="disappeared"> |
1636 | 567 | <td><a target="other" rel="nofollow" href="http://www.4thpass.com/">4th Pass</a></td> | 578 | <td><a target="other" rel="nofollow" href="http://www.4thpass.com/">4th Pass</a></td> |
1637 | 568 | <td><a target="other" rel="nofollow" href="http://www.4thpass.com/">SourceGuard</a></td> | 579 | <td><a target="other" rel="nofollow" href="http://www.4thpass.com/">SourceGuard</a></td> |
1642 | 569 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td> | 580 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> |
1643 | 570 | <td align="center"><br></td> | 581 | <td align="center"><br /></td> |
1644 | 571 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td> | 582 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> |
1645 | 572 | <td align="center"><br></td> | 583 | <td align="center"><br /></td> |
1646 | 584 | <td>Commercial (discontinued?)</td> | ||
1647 | 585 | </tr> | ||
1648 | 586 | |||
1649 | 587 | <tr class="disappeared"> | ||
1650 | 588 | <td><a target="other" rel="nofollow" href="http://www.codingart.com/">CodingArt</a></td> | ||
1651 | 589 | <td><a target="other" rel="nofollow" href="http://www.codingart.com/codeshield.html">CodeShield</a></td> | ||
1652 | 590 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> | ||
1653 | 591 | <td align="center"><br /></td> | ||
1654 | 592 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> | ||
1655 | 593 | <td align="center"><br /></td> | ||
1656 | 573 | <td>Commercial (discontinued?)</td> | 594 | <td>Commercial (discontinued?)</td> |
1657 | 574 | </tr> | 595 | </tr> |
1658 | 575 | 596 | ||
1659 | 576 | <tr class="disappeared"> | 597 | <tr class="disappeared"> |
1660 | 577 | <td><a target="other" rel="nofollow" href="http://www.software4j.com/">Software4j</a></td> | 598 | <td><a target="other" rel="nofollow" href="http://www.software4j.com/">Software4j</a></td> |
1661 | 578 | <td><a target="other" rel="nofollow" href="http://www.software4j.com/obfuscate4j/">Obfuscate4j</a></td> | 599 | <td><a target="other" rel="nofollow" href="http://www.software4j.com/obfuscate4j/">Obfuscate4j</a></td> |
1666 | 579 | <td align="center"><br></td> | 600 | <td align="center"><br /></td> |
1667 | 580 | <td align="center"><br></td> | 601 | <td align="center"><br /></td> |
1668 | 581 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td> | 602 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> |
1669 | 582 | <td align="center"><br></td> | 603 | <td align="center"><br /></td> |
1670 | 583 | <td>Commercial (discontinued?)</td> | 604 | <td>Commercial (discontinued?)</td> |
1671 | 584 | </tr> | 605 | </tr> |
1672 | 585 | 606 | ||
1673 | 586 | <tr class="disappeared"> | 607 | <tr class="disappeared"> |
1674 | 587 | <td><a target="other" rel="nofollow" href="http://www.jammconsulting.com/">JAMM Consulting</a></td> | 608 | <td><a target="other" rel="nofollow" href="http://www.jammconsulting.com/">JAMM Consulting</a></td> |
1675 | 588 | <td><a target="other" rel="nofollow" href="http://www.jammconsulting.com/jamm/servlet/com.jammconsulting.servlet.JAMMServlet?pageId=ObfuscateProPage">ObfuscatePro</a></td> | 609 | <td><a target="other" rel="nofollow" href="http://www.jammconsulting.com/jamm/servlet/com.jammconsulting.servlet.JAMMServlet?pageId=ObfuscateProPage">ObfuscatePro</a></td> |
1680 | 589 | <td align="center"><br></td> | 610 | <td align="center"><br /></td> |
1681 | 590 | <td align="center"><br></td> | 611 | <td align="center"><br /></td> |
1682 | 591 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td> | 612 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> |
1683 | 592 | <td align="center"><br></td> | 613 | <td align="center"><br /></td> |
1684 | 593 | <td>Commercial (discontinued?)</td> | 614 | <td>Commercial (discontinued?)</td> |
1685 | 594 | </tr> | 615 | </tr> |
1686 | 595 | 616 | ||
1687 | 596 | <tr class="disappeared"> | 617 | <tr class="disappeared"> |
1688 | 597 | <td><a target="other" rel="nofollow" href="http://www.jdevelop.com/">JDevelop</a></td> | 618 | <td><a target="other" rel="nofollow" href="http://www.jdevelop.com/">JDevelop</a></td> |
1689 | 598 | <td><a target="other" rel="nofollow" href="http://www.jdevelop.com/best-java-obfuscator.html">JSCO</a></td> | 619 | <td><a target="other" rel="nofollow" href="http://www.jdevelop.com/best-java-obfuscator.html">JSCO</a></td> |
1694 | 599 | <td align="center"><br></td> | 620 | <td align="center"><br /></td> |
1695 | 600 | <td align="center"><br></td> | 621 | <td align="center"><br /></td> |
1696 | 601 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td> | 622 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> |
1697 | 602 | <td align="center"><br></td> | 623 | <td align="center"><br /></td> |
1698 | 603 | <td>Commercial (discontinued?)</td> | 624 | <td>Commercial (discontinued?)</td> |
1699 | 604 | </tr> | 625 | </tr> |
1700 | 605 | 626 | ||
1701 | 606 | <tr class="disappeared"> | 627 | <tr class="disappeared"> |
1702 | 607 | <td><a target="other" rel="nofollow" href="http://www.4fang.net/">4Fang</a></td> | 628 | <td><a target="other" rel="nofollow" href="http://www.4fang.net/">4Fang</a></td> |
1703 | 608 | <td><a target="other" rel="nofollow" href="http://www.4fang.net/jmix/">JMix</a></td> | 629 | <td><a target="other" rel="nofollow" href="http://www.4fang.net/jmix/">JMix</a></td> |
1708 | 609 | <td align="center"><br></td> | 630 | <td align="center"><br /></td> |
1709 | 610 | <td align="center"><br></td> | 631 | <td align="center"><br /></td> |
1710 | 611 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td> | 632 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> |
1711 | 612 | <td align="center"><br></td> | 633 | <td align="center"><br /></td> |
1712 | 613 | <td>Commercial (discontinued?)</td> | 634 | <td>Commercial (discontinued?)</td> |
1713 | 614 | </tr> | 635 | </tr> |
1714 | 615 | 636 | ||
1715 | 616 | <tr class="disappeared"> | 637 | <tr class="disappeared"> |
1716 | 638 | <td><a target="other" rel="nofollow" href="http://www.retrologic.com/">RetroLogic</a></td> | ||
1717 | 639 | <td><a target="other" rel="nofollow" href="http://www.retrologic.com/">RetroGuard</a></td> | ||
1718 | 640 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> | ||
1719 | 641 | <td align="center"><br /></td> | ||
1720 | 642 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> | ||
1721 | 643 | <td align="center"><br /></td> | ||
1722 | 644 | <td>Commercial (disappeared?)</td> | ||
1723 | 645 | </tr> | ||
1724 | 646 | |||
1725 | 647 | <tr class="disappeared"> | ||
1726 | 648 | <td><a target="other" rel="nofollow" href="http://www.helseth.com/">Helseth</a></td> | ||
1727 | 649 | <td><a target="other" rel="nofollow" href="http://www.helseth.com/HJO.htm">JObfuscator</a></td> | ||
1728 | 650 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> | ||
1729 | 651 | <td align="center"><br /></td> | ||
1730 | 652 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> | ||
1731 | 653 | <td align="center"><br /></td> | ||
1732 | 654 | <td>Commercial (disappeared?)</td> | ||
1733 | 655 | </tr> | ||
1734 | 656 | |||
1735 | 657 | <tr class="disappeared"> | ||
1736 | 658 | <td><a target="other" rel="nofollow" href="http://www.vegatech.com/">Vega Technologies</a></td> | ||
1737 | 659 | <td><a target="other" rel="nofollow" href="http://www.vegatech.com/jzipper/">JZipper</a></td> | ||
1738 | 660 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> | ||
1739 | 661 | <td align="center"><br /></td> | ||
1740 | 662 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> | ||
1741 | 663 | <td align="center"><br /></td> | ||
1742 | 664 | <td>Commercial (disappeared?)</td> | ||
1743 | 665 | </tr> | ||
1744 | 666 | |||
1745 | 667 | <tr class="disappeared"> | ||
1746 | 668 | <td><a target="other" rel="nofollow" href="http://www.jproof.com/">JProof</a></td> | ||
1747 | 669 | <td><a target="other" rel="nofollow" href="http://www.jproof.com/">JProof</a></td> | ||
1748 | 670 | <td align="center"><br /></td> | ||
1749 | 671 | <td align="center"><br /></td> | ||
1750 | 672 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> | ||
1751 | 673 | <td align="center"><br /></td> | ||
1752 | 674 | <td>Commercial (disappeared?)</td> | ||
1753 | 675 | </tr> | ||
1754 | 676 | |||
1755 | 677 | <tr class="disappeared"> | ||
1756 | 678 | <td><a target="other" rel="nofollow" href="http://www.chainkey.com/">ChainKey</a></td> | ||
1757 | 679 | <td><a target="other" rel="nofollow" href="http://www.chainkey.com/en/jcp/">Java Code Protector</a></td> | ||
1758 | 680 | <td align="center"><br /></td> | ||
1759 | 681 | <td align="center"><br /></td> | ||
1760 | 682 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> | ||
1761 | 683 | <td align="center"><br /></td> | ||
1762 | 684 | <td>Commercial (disappeared?)</td> | ||
1763 | 685 | </tr> | ||
1764 | 686 | |||
1765 | 687 | <tr class="disappeared"> | ||
1766 | 617 | <td><a target="other" rel="nofollow" href="http://www.2lkit.com/">2LKit</a></td> | 688 | <td><a target="other" rel="nofollow" href="http://www.2lkit.com/">2LKit</a></td> |
1767 | 618 | <td><a target="other" rel="nofollow" href="http://www.2lkit.com/products/2LKitObf/index.htm">2LKit Obfuscator</a></td> | 689 | <td><a target="other" rel="nofollow" href="http://www.2lkit.com/products/2LKitObf/index.htm">2LKit Obfuscator</a></td> |
1772 | 619 | <td align="center"><br></td> | 690 | <td align="center"><br /></td> |
1773 | 620 | <td align="center"><br></td> | 691 | <td align="center"><br /></td> |
1774 | 621 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td> | 692 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> |
1775 | 622 | <td align="center"><br></td> | 693 | <td align="center"><br /></td> |
1776 | 623 | <td>Commercial (disappeared?)</td> | 694 | <td>Commercial (disappeared?)</td> |
1777 | 624 | </tr> | 695 | </tr> |
1778 | 625 | 696 | ||
1779 | 626 | <tr class="disappeared"> | 697 | <tr class="disappeared"> |
1780 | 627 | <td><a target="other" rel="nofollow" href="http://www.wingsoft.com/">WingSoft</a></td> | 698 | <td><a target="other" rel="nofollow" href="http://www.wingsoft.com/">WingSoft</a></td> |
1781 | 628 | <td><a target="other" rel="nofollow" href="http://www.wingsoft.com/wingguard.html">WingGuard</a></td> | 699 | <td><a target="other" rel="nofollow" href="http://www.wingsoft.com/wingguard.html">WingGuard</a></td> |
1796 | 629 | <td align="center"><br></td> | 700 | <td align="center"><br /></td> |
1797 | 630 | <td align="center"><br></td> | 701 | <td align="center"><br /></td> |
1798 | 631 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td> | 702 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> |
1799 | 632 | <td align="center"><br></td> | 703 | <td align="center"><br /></td> |
1800 | 633 | <td>Commercial (disappeared?)</td> | 704 | <td>Commercial (disappeared?)</td> |
1801 | 634 | </tr> | 705 | </tr> |
1802 | 635 | 706 | ||
1803 | 636 | <tr class="disappeared"> | 707 | <tr class="disappeared"> |
1804 | 637 | <td><a target="other" rel="nofollow" href="http://www.sbktech.org/">HashJava</a></td> | 708 | <td><a target="other" rel="nofollow" href="http://www.sbktech.org/">HashJava</a></td> |
1805 | 638 | <td><a target="other" rel="nofollow" href="http://www.sbktech.org/">HashJava</a></td> | 709 | <td><a target="other" rel="nofollow" href="http://www.sbktech.org/">HashJava</a></td> |
1806 | 639 | <td align="center"><br></td> | 710 | <td align="center"><br /></td> |
1807 | 640 | <td align="center"><br></td> | 711 | <td align="center"><br /></td> |
1808 | 641 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x"></td> | 712 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> |
1809 | 642 | <td align="center"><br></td> | 713 | <td align="center"><br /></td> |
1810 | 714 | <td>Commercial (disappeared?)</td> | ||
1811 | 715 | </tr> | ||
1812 | 716 | |||
1813 | 717 | <tr class="disappeared"> | ||
1814 | 718 | <td><a target="other" rel="nofollow" href="http://www.solutia.ro/">GITS</a></td> | ||
1815 | 719 | <td><a target="other" rel="nofollow" href="http://www.solutia.ro/pages/javadc/">Blurfuscator</a></td> | ||
1816 | 720 | <td align="center"><br /></td> | ||
1817 | 721 | <td align="center"><br /></td> | ||
1818 | 722 | <td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td> | ||
1819 | 723 | <td align="center"><br /></td> | ||
1820 | 643 | <td>Commercial (disappeared?)</td> | 724 | <td>Commercial (disappeared?)</td> |
1821 | 644 | </tr> | 725 | </tr> |
1822 | 645 | 726 | ||
1823 | @@ -647,10 +728,11 @@ | |||
1824 | 647 | <p> | 728 | <p> |
1825 | 648 | All trademarks are property of their respective holders. | 729 | All trademarks are property of their respective holders. |
1826 | 649 | 730 | ||
1828 | 650 | <hr> | 731 | <hr /> |
1829 | 732 | <noscript><div><a target="_top" href="index.html" class="button">Show menu</a></div></noscript> | ||
1830 | 651 | <address> | 733 | <address> |
1833 | 652 | Copyright © 2002-2009 | 734 | Copyright © 2002-2012 |
1834 | 653 | <a href="http://www.graphics.cornell.edu/~eric/">Eric Lafortune</a>. | 735 | <a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>. |
1835 | 654 | </address> | 736 | </address> |
1836 | 655 | 737 | ||
1837 | 656 | </body> | 738 | </body> |
1838 | 657 | 739 | ||
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 | 1 | 1 | ||
1845 | 2 | <!doctype html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> | 2 | <!doctype html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> |
1846 | 3 | <html> | 3 | <html> |
1847 | 4 | <head> | 4 | <head> |
1848 | 5 | <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"> | 5 | <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"> |
1849 | 6 | <meta http-equiv="content-style-type" content="text/css"> | 6 | <meta http-equiv="content-style-type" content="text/css"> |
1850 | 7 | <link rel="stylesheet" type="text/css" href="style.css"> | 7 | <link rel="stylesheet" type="text/css" href="style.css"> |
1851 | 8 | <title>ProGuard Downloads</title> | 8 | <title>ProGuard Downloads</title> |
1852 | 9 | <script type="text/javascript" language="JavaScript"> | ||
1853 | 10 | <!-- | ||
1854 | 11 | if (window.self==window.top) | ||
1855 | 12 | window.top.location.replace("index.html#"+window.location.pathname+window.location.hash); | ||
1856 | 13 | else { | ||
1857 | 14 | var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), ""); | ||
1858 | 15 | if (window.top.location.hash!=hash) | ||
1859 | 16 | window.top.location.hash=hash; | ||
1860 | 17 | } | ||
1861 | 18 | //--> | ||
1862 | 19 | </script> | ||
1863 | 9 | </head> | 20 | </head> |
1864 | 10 | <body> | 21 | <body> |
1865 | 11 | 22 | ||
1866 | @@ -44,6 +55,123 @@ | |||
1867 | 44 | collected since the previous release. | 55 | collected since the previous release. |
1868 | 45 | <p> | 56 | <p> |
1869 | 46 | 57 | ||
1870 | 58 | <h3><div>May 2012</div> Version 4.8</h3> | ||
1871 | 59 | <ul> | ||
1872 | 60 | <li>Added more peephole optimizations for strings. | ||
1873 | 61 | <li>Added support for multiple external configuration files in Ant | ||
1874 | 62 | configurations. | ||
1875 | 63 | <li>Added support for Ant properties in external configuration files. | ||
1876 | 64 | <li>Fixed parsing of empty file filters on input and output. | ||
1877 | 65 | <li>Fixed parsing of '*' wildcard for file filters and name filters. | ||
1878 | 66 | <li>Fixed obfuscation of private methods that are overridden in concrete | ||
1879 | 67 | classes with intermediary abstract classes and interfaces (workaround | ||
1880 | 68 | for Oracle bugs #6691741 and #6684387). | ||
1881 | 69 | <li>Fixed optimization of complex finally blocks, compiled with JDK 1.4 or | ||
1882 | 70 | earlier. | ||
1883 | 71 | <li>Fixed optimizing signatures of methods that are marked as not having | ||
1884 | 72 | side effects. | ||
1885 | 73 | <li>Fixed optimization of long local variables possibly causing verification | ||
1886 | 74 | error for register pairs. | ||
1887 | 75 | <li>Fixed merging of classes defined inside methods. | ||
1888 | 76 | <li>Fixed stack consistency in optimization step. | ||
1889 | 77 | <li>No longer removing debug information about unused parameters, for | ||
1890 | 78 | <code>-keepparameternames</code> or <code>-keepattributes</code>. | ||
1891 | 79 | <li>Fixed updating manifest files with carriage return characters. | ||
1892 | 80 | <li>Now removing unreachable code in preverification step. | ||
1893 | 81 | <li>Improved default regular expression for stack traces in ReTrace. | ||
1894 | 82 | <li>Updated documentation and examples. | ||
1895 | 83 | </ul> | ||
1896 | 84 | |||
1897 | 85 | <h3><div>Dec 2011</div> Version 4.7</h3> | ||
1898 | 86 | <ul> | ||
1899 | 87 | <li>Added support for Java 7. | ||
1900 | 88 | <li>Parsing unquoted file names with special characters more leniently. | ||
1901 | 89 | <li>Added support for instance methods overriding class methods. | ||
1902 | 90 | <li>Added removal of unused parameterless constructors. | ||
1903 | 91 | <li>Added removal of empty class initializers. | ||
1904 | 92 | <li>Added peephole optimizations for constant strings. | ||
1905 | 93 | <li>Avoiding idle optimization passes. | ||
1906 | 94 | <li>Improved removal of unused constants after obfuscation. | ||
1907 | 95 | <li>Fixed removal of unused classes referenced by annotations. | ||
1908 | 96 | <li>Fixed simplifying parameters of constructors that should actually be | ||
1909 | 97 | preserved. | ||
1910 | 98 | <li>Fixed simplifying parameters of large numbers of similar constructors. | ||
1911 | 99 | <li>Fixed exceptions in optimization of unusual obfuscated code. | ||
1912 | 100 | <li>Fixed NullPointerException when specifying <code>-keepclassmembers</code> | ||
1913 | 101 | without specific class or class members. | ||
1914 | 102 | <li>Fixed potential problems with mixed-case class name dictionaries when not | ||
1915 | 103 | allowing mixed-case class names. | ||
1916 | 104 | <li>Fixed obfuscation of classes with EnclosingMethod attributes that don't | ||
1917 | 105 | specify methods. | ||
1918 | 106 | <li>Fixed preverification of returning try blocks with finally blocks, inside | ||
1919 | 107 | try blocks, when compiled with JDK 1.4. | ||
1920 | 108 | <li>Fixed sorting of interfaces containing generics. | ||
1921 | 109 | <li>Fixed paths in shell scripts. | ||
1922 | 110 | <li>Fixed filling in of text fields showing class obfuscation dictionary and | ||
1923 | 111 | package obfuscation dictionary from configuration in GUI. | ||
1924 | 112 | <li>Worked around Oracle Java 6/7 bug #7027598 that locked the GUI on Linux. | ||
1925 | 113 | <li>Updated documentation and examples. | ||
1926 | 114 | </ul> | ||
1927 | 115 | |||
1928 | 116 | <h3><div>Feb 2011</div> Version 4.6</h3> | ||
1929 | 117 | <ul> | ||
1930 | 118 | <li>Added support for synthetic, bridge, and varargs modifiers in configuration. | ||
1931 | 119 | <li>Added detection of atomic updater construction with constant arguments. | ||
1932 | 120 | <li>Fixed merging of package visible classes. | ||
1933 | 121 | <li>Fixed optimization of fields that are only accessed by reflection. | ||
1934 | 122 | <li>Fixed optimization of read-only or write-only fields that are volatile. | ||
1935 | 123 | <li>Fixed handling of side-effects due to static initializers. | ||
1936 | 124 | <li>Fixed handling of bridge flags in obfuscation step. | ||
1937 | 125 | <li>Fixed handling of super flag when merging classes. | ||
1938 | 126 | <li>Fixed updating of variable tables when optimizing variables. | ||
1939 | 127 | <li>Fixed removal of unused parameters with 32 or more parameters. | ||
1940 | 128 | <li>Fixed incorrect removal of exception handler for instanceof instruction. | ||
1941 | 129 | <li>Fixed inlining of methods with unusual exception handlers. | ||
1942 | 130 | <li>Fixed optimization of unusual code causing stack underflow. | ||
1943 | 131 | <li>Fixed keeping of constructor parameter names. | ||
1944 | 132 | <li>Fixed unwanted wrapping of non-standard META-INF files. | ||
1945 | 133 | <li>Fixed filtering of warnings about references to array types. | ||
1946 | 134 | <li>Fixed overriding of warning option and note option in Ant task. | ||
1947 | 135 | <li>Improved detection of file name extensions for canonical paths. | ||
1948 | 136 | <li>Improved printing of seeds specified by <code>-keep</code> options. | ||
1949 | 137 | <li>Improved printing of notes about unkept classes. | ||
1950 | 138 | <li>Improved checking whether output is up to date. | ||
1951 | 139 | <li>Updated documentation and examples. | ||
1952 | 140 | </ul> | ||
1953 | 141 | |||
1954 | 142 | <h3><div>Jun 2010</div> Version 4.5</h3> | ||
1955 | 143 | <ul> | ||
1956 | 144 | <li>Added option <code>-keepparameternames</code>. | ||
1957 | 145 | <li><code>-dontskipnonpubliclibraryclasses</code> is now set by default. Added | ||
1958 | 146 | <code>-skipnonpubliclibraryclasses</code> as an option. | ||
1959 | 147 | <li>Made processing independent of order of input classes to get even more | ||
1960 | 148 | deterministic output. | ||
1961 | 149 | <li>Improved constant field propagation. | ||
1962 | 150 | <li>Improved renaming of resource files in subdirectories of packages. | ||
1963 | 151 | <li>Avoiding making fields in interfaces private. | ||
1964 | 152 | <li>Optimizing exception handlers for monitorexit instruction. | ||
1965 | 153 | <li>Reduced maximum allowed code length after inlining from 8000 bytes to | ||
1966 | 154 | 7000 bytes. | ||
1967 | 155 | <li>Fixed missing warnings about missing library classes. | ||
1968 | 156 | <li>Fixed shrinking of annotations with arrays of length 0. | ||
1969 | 157 | <li>Fixed handling of -0.0 and NaN values when simplifying expressions. | ||
1970 | 158 | <li>Fixed copying of exception handlers when simplifying tail recursion calls. | ||
1971 | 159 | <li>Fixed optimization of introspected fields. | ||
1972 | 160 | <li>Fixed simplification of unnecessary variable initializations. | ||
1973 | 161 | <li>Fixed evaluation of subroutines in pre-JDK 1.5 code. | ||
1974 | 162 | <li>Fixed updating of access flags in inner classes information. | ||
1975 | 163 | <li>Fixed disabling of field privatization. | ||
1976 | 164 | <li>Fixed invocations of privatized methods. | ||
1977 | 165 | <li>Fixed updating of local variable debug information in optimization step. | ||
1978 | 166 | <li>Fixed print settings without file name in GUI. | ||
1979 | 167 | <li>Fixed field privatization setting in GUI. | ||
1980 | 168 | <li>Fixed saving incorrectly quoted arguments in GUI. | ||
1981 | 169 | <li>Fixed handling of regular expressions with only negators. | ||
1982 | 170 | <li>Fixed unwanted wrapping of non-standard META-INF files. | ||
1983 | 171 | <li>Fixed regular expression pattern for constructors in ReTrace. | ||
1984 | 172 | <li>Updated documentation and examples. | ||
1985 | 173 | </ul> | ||
1986 | 174 | |||
1987 | 47 | <h3><div>Jul 2009</div> Version 4.4</h3> | 175 | <h3><div>Jul 2009</div> Version 4.4</h3> |
1988 | 48 | <ul> | 176 | <ul> |
1989 | 49 | <li>Added new peephole optimizations. | 177 | <li>Added new peephole optimizations. |
1990 | @@ -511,10 +639,11 @@ | |||
1991 | 511 | <b>RetroGuard</b>. | 639 | <b>RetroGuard</b>. |
1992 | 512 | </ul> | 640 | </ul> |
1993 | 513 | 641 | ||
1995 | 514 | <hr> | 642 | <hr /> |
1996 | 643 | <noscript><div><a target="_top" href="index.html" class="button">Show menu</a></div></noscript> | ||
1997 | 515 | <address> | 644 | <address> |
2000 | 516 | Copyright © 2002-2009 | 645 | Copyright © 2002-2012 |
2001 | 517 | <a href="http://www.graphics.cornell.edu/~eric/">Eric Lafortune</a>. | 646 | <a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>. |
2002 | 518 | </address> | 647 | </address> |
2003 | 519 | 648 | ||
2004 | 520 | </body> | 649 | </body> |
2005 | 521 | 650 | ||
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 @@ | |||
2011 | 1 | <!doctype html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> | 1 | <!doctype html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> |
2012 | 2 | <html> | 2 | <html> |
2013 | 3 | <head> | 3 | <head> |
2014 | 4 | <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"> | 4 | <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"> |
2015 | @@ -6,6 +6,17 @@ | |||
2016 | 6 | <meta http-equiv="content-style-type" content="text/css"> | 6 | <meta http-equiv="content-style-type" content="text/css"> |
2017 | 7 | <link rel="stylesheet" type="text/css" href="style.css"> | 7 | <link rel="stylesheet" type="text/css" href="style.css"> |
2018 | 8 | <title>ProGuard Feedback</title> | 8 | <title>ProGuard Feedback</title> |
2019 | 9 | <script type="text/javascript" language="JavaScript"> | ||
2020 | 10 | <!-- | ||
2021 | 11 | if (window.self==window.top) | ||
2022 | 12 | window.top.location.replace("index.html#"+window.location.pathname+window.location.hash); | ||
2023 | 13 | else { | ||
2024 | 14 | var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), ""); | ||
2025 | 15 | if (window.top.location.hash!=hash) | ||
2026 | 16 | window.top.location.hash=hash; | ||
2027 | 17 | } | ||
2028 | 18 | //--> | ||
2029 | 19 | </script> | ||
2030 | 9 | </head> | 20 | </head> |
2031 | 10 | <body> | 21 | <body> |
2032 | 11 | 22 | ||
2033 | @@ -13,28 +24,32 @@ | |||
2034 | 13 | 24 | ||
2035 | 14 | By now, I've invested a fair amount of time in <b>ProGuard</b>. You can help | 25 | By now, I've invested a fair amount of time in <b>ProGuard</b>. You can help |
2036 | 15 | by providing feedback! If you have problems, bugs, bug fixes, ideas, | 26 | by providing feedback! If you have problems, bugs, bug fixes, ideas, |
2038 | 16 | encouragements, etc., please let me know: | 27 | encouragements, etc., please get in touch: |
2039 | 17 | <p> | 28 | <p> |
2042 | 18 | <ul> | 29 | <ul class="spacious"> |
2043 | 19 | <li>The <a href="http://sourceforge.net/forum/forum.php?forum_id=182456" | 30 | <li>Through |
2044 | 31 | <a href="http://www.saikoa.com/proguard/support" target="_top">Saikoa</a>, | ||
2045 | 32 | we provide professional support for ProGuard. If you find ProGuard useful | ||
2046 | 33 | and you would like to have some professional backing, this is the place to | ||
2047 | 34 | go.</li> | ||
2048 | 35 | |||
2049 | 36 | <li>The <a href="https://sourceforge.net/projects/proguard/forums/forum/182456" | ||
2050 | 20 | target="other">help forum</a> (at SourceForge) is the right place to ask | 37 | target="other">help forum</a> (at SourceForge) is the right place to ask |
2051 | 21 | questions about any problems you might have configuring and running | 38 | questions about any problems you might have configuring and running |
2054 | 22 | <b>ProGuard</b>. | 39 | ProGuard. At this time, I can generally only assist other open source |
2055 | 23 | <p> | 40 | projects though. If you're working on commercial software, please consider |
2056 | 41 | our professional support above.</li> | ||
2057 | 24 | 42 | ||
2059 | 25 | <li>The <a href="http://sourceforge.net/forum/forum.php?forum_id=182455" | 43 | <li>The <a href="https://sourceforge.net/projects/proguard/forums/forum/182455" |
2060 | 26 | target="other">open discussion forum</a> (at SourceForge) offers a place | 44 | target="other">open discussion forum</a> (at SourceForge) offers a place |
2063 | 27 | to share your thoughts and discuss new ideas. | 45 | to share your thoughts and discuss new ideas.</li> |
2062 | 28 | <p> | ||
2064 | 29 | 46 | ||
2065 | 30 | <li>The <a | 47 | <li>The <a |
2066 | 31 | |||
2067 | 32 | href="http://sourceforge.net/tracker/?atid=474704&group_id=54750&func=browse" | 48 | href="http://sourceforge.net/tracker/?atid=474704&group_id=54750&func=browse" |
2068 | 33 | target="other">bug tracking page</a> (at SourceForge) allows you to submit | 49 | target="other">bug tracking page</a> (at SourceForge) allows you to submit |
2069 | 34 | and consult bug reports. Please make sure the reports are complete and | 50 | and consult bug reports. Please make sure the reports are complete and |
2070 | 35 | concise. If I can't reproduce the problem, I most likely can't fix it | 51 | concise. If I can't reproduce the problem, I most likely can't fix it |
2073 | 36 | either. | 52 | either.</li> |
2072 | 37 | <p> | ||
2074 | 38 | 53 | ||
2075 | 39 | <li>The <a | 54 | <li>The <a |
2076 | 40 | 55 | ||
2077 | @@ -42,16 +57,14 @@ | |||
2078 | 42 | target="other">feature request page</a> (at SourceForge) allows you to | 57 | target="other">feature request page</a> (at SourceForge) allows you to |
2079 | 43 | submit and consult feature requests. I generally have my own road map in | 58 | submit and consult feature requests. I generally have my own road map in |
2080 | 44 | mind, but this is the place express your interest in new and existing | 59 | mind, but this is the place express your interest in new and existing |
2083 | 45 | ideas. | 60 | ideas.</li> |
2082 | 46 | <p> | ||
2084 | 47 | 61 | ||
2086 | 48 | <li>The <a href="http://sourceforge.net/project/showfiles.php?group_id=54750" | 62 | <li>The <a href="https://sourceforge.net/projects/proguard/files/" |
2087 | 49 | target="other">download section</a> at SourceForge and the <a | 63 | target="other">download section</a> at SourceForge and the <a |
2093 | 50 | href="http://software.freshmeat.net/projects/proguard/" | 64 | href="http://software.freecode.com/projects/proguard" |
2094 | 51 | target="other">project page</a> at FreshMeat offer the possibility to | 65 | target="other">project page</a> at Freecode (Freshmeat) offer the |
2095 | 52 | subscribe to the announcements of new releases. They are the most | 66 | possibility to subscribe to the announcements of new releases. They are |
2096 | 53 | efficient way to stay abreast of the latest developments. | 67 | the most efficient way to stay abreast of the latest developments.</li> |
2092 | 54 | <p> | ||
2097 | 55 | 68 | ||
2098 | 56 | <li>For anything that doesn't fall in the above categories, you can mail me | 69 | <li>For anything that doesn't fall in the above categories, you can mail me |
2099 | 57 | directly at | 70 | directly at |
2100 | @@ -84,7 +97,7 @@ | |||
2101 | 84 | <em>or</em> at | 97 | <em>or</em> at |
2102 | 85 | < eric @ graphics . cornell . edu > (please remove the spaces) | 98 | < eric @ graphics . cornell . edu > (please remove the spaces) |
2103 | 86 | </noscript> | 99 | </noscript> |
2105 | 87 | . | 100 | .</li> |
2106 | 88 | </ul> | 101 | </ul> |
2107 | 89 | <p> | 102 | <p> |
2108 | 90 | I can't promise a swift answer, or any answer at all, for that matter, but I | 103 | I can't promise a swift answer, or any answer at all, for that matter, but I |
2109 | @@ -96,10 +109,11 @@ | |||
2110 | 96 | do things my way, without the overhead and compromises associated with larger | 109 | do things my way, without the overhead and compromises associated with larger |
2111 | 97 | projects. | 110 | projects. |
2112 | 98 | 111 | ||
2114 | 99 | <hr> | 112 | <hr /> |
2115 | 113 | <noscript><div><a target="_top" href="index.html" class="button">Show menu</a></div></noscript> | ||
2116 | 100 | <address> | 114 | <address> |
2119 | 101 | Copyright © 2002-2009 | 115 | Copyright © 2002-2012 |
2120 | 102 | <a href="http://www.graphics.cornell.edu/~eric/">Eric Lafortune</a>. | 116 | <a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>. |
2121 | 103 | </address> | 117 | </address> |
2122 | 104 | 118 | ||
2123 | 105 | </body> | 119 | </body> |
2124 | 106 | 120 | ||
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 @@ | |||
2130 | 1 | <!doctype html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> | 1 | <!doctype html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> |
2131 | 2 | <html> | 2 | <html> |
2132 | 3 | <head> | 3 | <head> |
2133 | 4 | <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"> | 4 | <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"> |
2134 | @@ -11,18 +11,34 @@ | |||
2135 | 11 | <link rel="shortcut icon" type="image/x-icon" href="favicon.ico"> | 11 | <link rel="shortcut icon" type="image/x-icon" href="favicon.ico"> |
2136 | 12 | <title>ProGuard</title> | 12 | <title>ProGuard</title> |
2137 | 13 | </head> | 13 | </head> |
2138 | 14 | |||
2139 | 15 | <script type="text/javascript" language="JavaScript"> | ||
2140 | 16 | <!-- | ||
2141 | 17 | var main="main.html"; | ||
2142 | 18 | if (window.location.hash.length > 1) | ||
2143 | 19 | main=window.location.hash.substr(1); | ||
2144 | 20 | var sections="sections.html"; | ||
2145 | 21 | if (main.search(/manual\//) >= 0) | ||
2146 | 22 | sections="manual/sections.html"; | ||
2147 | 23 | |||
2148 | 24 | 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 | 25 | //--> | ||
2150 | 26 | </script> | ||
2151 | 27 | |||
2152 | 28 | <noscript> | ||
2153 | 14 | <frameset | 29 | <frameset |
2154 | 15 | rows="50,*" | 30 | rows="50,*" |
2155 | 16 | framespacing="0" | 31 | framespacing="0" |
2156 | 17 | frameborder="no"> | 32 | frameborder="no"> |
2157 | 18 | 33 | ||
2158 | 19 | <frame | 34 | <frame |
2159 | 35 | id="title" | ||
2160 | 20 | name="title" | 36 | name="title" |
2161 | 21 | src="title.html" | 37 | src="title.html" |
2162 | 22 | scrolling="no" | 38 | scrolling="no" |
2163 | 23 | marginwidth="0" | 39 | marginwidth="0" |
2164 | 24 | marginheight="0" | 40 | marginheight="0" |
2166 | 25 | noresize> | 41 | noresize /> |
2167 | 26 | 42 | ||
2168 | 27 | <frameset | 43 | <frameset |
2169 | 28 | cols="120,*" | 44 | cols="120,*" |
2170 | @@ -30,42 +46,46 @@ | |||
2171 | 30 | frameborder="no"> | 46 | frameborder="no"> |
2172 | 31 | 47 | ||
2173 | 32 | <frame | 48 | <frame |
2174 | 49 | id="sections" | ||
2175 | 33 | name="sections" | 50 | name="sections" |
2176 | 34 | src="sections.html" | 51 | src="sections.html" |
2177 | 35 | scrolling="no" | 52 | scrolling="no" |
2178 | 36 | marginwidth="0" | 53 | marginwidth="0" |
2179 | 37 | marginheight="0" | 54 | marginheight="0" |
2181 | 38 | noresize> | 55 | noresize /> |
2182 | 39 | 56 | ||
2183 | 40 | <frame | 57 | <frame |
2184 | 58 | id="main" | ||
2185 | 41 | name="main" | 59 | name="main" |
2186 | 42 | src="main.html" | 60 | src="main.html" |
2187 | 43 | scrolling="auto" | 61 | scrolling="auto" |
2188 | 44 | marginwidth="10" | 62 | marginwidth="10" |
2189 | 45 | marginheight="10" | 63 | marginheight="10" |
2191 | 46 | noresize> | 64 | noresize /> |
2192 | 47 | 65 | ||
2193 | 48 | </frameset> | 66 | </frameset> |
2194 | 49 | </frameset> | 67 | </frameset> |
2195 | 68 | </noscript> | ||
2196 | 50 | 69 | ||
2197 | 51 | <noframes> | 70 | <noframes> |
2198 | 52 | <body> | 71 | <body> |
2199 | 53 | <p class="intro"> | 72 | <p class="intro"> |
2205 | 54 | <b>ProGuard</b> is a free Java class file shrinker, optimizer, and obfuscator. | 73 | <b>ProGuard</b> is a free Java class file shrinker, optimizer, obfuscator, and |
2206 | 55 | It can detect and remove unused classes, fields, methods, and attributes. It | 74 | preverifier. It detects and removes unused classes, fields, methods, and |
2207 | 56 | can then optimize bytecode and remove unused instructions. Finally, it can | 75 | attributes. It optimizes bytecode and removes unused instructions. It renames |
2208 | 57 | rename the remaining classes, fields, and methods using short meaningless | 76 | the remaining classes, fields, and methods using short meaningless names. |
2209 | 58 | names. The resulting jars are smaller and harder to reverse-engineer. | 77 | Finally, it preverifies the processed code for Java 6 or for Java Micro |
2210 | 78 | Edition. | ||
2211 | 59 | </p> | 79 | </p> |
2212 | 60 | <p> | 80 | <p> |
2213 | 61 | Your browser doesn't support frames, but that's cool. | 81 | Your browser doesn't support frames, but that's cool. |
2214 | 62 | <p> | 82 | <p> |
2215 | 63 | You can go straight to the <a href="main.html">main page</a>. | 83 | You can go straight to the <a href="main.html">main page</a>. |
2216 | 64 | 84 | ||
2218 | 65 | <hr> | 85 | <hr /> |
2219 | 66 | <address> | 86 | <address> |
2222 | 67 | Copyright © 2002-2009 | 87 | Copyright © 2002-2012 |
2223 | 68 | <a href="http://www.graphics.cornell.edu/~eric/">Eric Lafortune</a>. | 88 | <a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>. |
2224 | 69 | </address> | 89 | </address> |
2225 | 70 | </body> | 90 | </body> |
2226 | 71 | </noframes> | 91 | </noframes> |
2227 | 72 | 92 | ||
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 @@ | |||
2233 | 1 | <!doctype html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> | 1 | <!doctype html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> |
2234 | 2 | <html> | 2 | <html> |
2235 | 3 | <head> | 3 | <head> |
2236 | 4 | <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"> | 4 | <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"> |
2237 | 5 | <meta http-equiv="content-style-type" content="text/css"> | 5 | <meta http-equiv="content-style-type" content="text/css"> |
2238 | 6 | <link rel="stylesheet" type="text/css" href="style.css"> | 6 | <link rel="stylesheet" type="text/css" href="style.css"> |
2239 | 7 | <title>ProGuard License</title> | 7 | <title>ProGuard License</title> |
2240 | 8 | <script type="text/javascript" language="JavaScript"> | ||
2241 | 9 | <!-- | ||
2242 | 10 | if (window.self==window.top) | ||
2243 | 11 | window.top.location.replace("index.html#"+window.location.pathname+window.location.hash); | ||
2244 | 12 | else { | ||
2245 | 13 | var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), ""); | ||
2246 | 14 | if (window.top.location.hash!=hash) | ||
2247 | 15 | window.top.location.hash=hash; | ||
2248 | 16 | } | ||
2249 | 17 | //--> | ||
2250 | 18 | </script> | ||
2251 | 8 | </head> | 19 | </head> |
2252 | 9 | <body> | 20 | <body> |
2253 | 10 | 21 | ||
2254 | @@ -29,19 +40,21 @@ | |||
2255 | 29 | exception</a> to the latter clause (in wording suggested by | 40 | exception</a> to the latter clause (in wording suggested by |
2256 | 30 | the <a href="http://www.gnu.org/copyleft/gpl-faq.html#GPLIncompatibleLibs" | 41 | the <a href="http://www.gnu.org/copyleft/gpl-faq.html#GPLIncompatibleLibs" |
2257 | 31 | target="other">FSF</a>), for combinations with the following stand-alone | 42 | target="other">FSF</a>), for combinations with the following stand-alone |
2261 | 32 | applications: Apache Ant, Apache Maven, the Eclipse ProGuardDT GUI, the | 43 | applications: Apache Ant, Apache Maven, the Google Android SDK, the Eclipse |
2262 | 33 | EclipseME JME IDE, the Sun NetBeans Java IDE, the Sun JME Wireless Toolkit, | 44 | ProGuardDT GUI, the EclipseME JME IDE, the Oracle NetBeans Java IDE, the Oracle |
2263 | 34 | and the Javaground Tools. | 45 | JME Wireless Toolkit, the Simple Build Tool for Scala, the NeoMAD Tools by |
2264 | 46 | Neomades, the Javaground Tools, and the Sanaware Tools. | ||
2265 | 35 | 47 | ||
2266 | 36 | <p> | 48 | <p> |
2267 | 37 | The <b>ProGuard user documentation</b> represents an important part of this | 49 | The <b>ProGuard user documentation</b> represents an important part of this |
2268 | 38 | work. It may only be redistributed without changes, along with the unmodified | 50 | work. It may only be redistributed without changes, along with the unmodified |
2269 | 39 | version of the code. | 51 | version of the code. |
2270 | 40 | 52 | ||
2272 | 41 | <hr> | 53 | <hr /> |
2273 | 54 | <noscript><div><a target="_top" href="index.html" class="button">Show menu</a></div></noscript> | ||
2274 | 42 | <address> | 55 | <address> |
2277 | 43 | Copyright © 2002-2009 | 56 | Copyright © 2002-2012 |
2278 | 44 | <a href="http://www.graphics.cornell.edu/~eric/">Eric Lafortune</a>. | 57 | <a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>. |
2279 | 45 | </address> | 58 | </address> |
2280 | 46 | </body> | 59 | </body> |
2281 | 47 | </html> | 60 | </html> |
2282 | 48 | 61 | ||
2283 | === removed file 'docs/luciadlogo.png' | |||
2284 | 49 | Binary files docs/luciadlogo.png 2005-06-17 14:25:24 +0000 and docs/luciadlogo.png 1970-01-01 00:00:00 +0000 differ | 62 | Binary 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 @@ | |||
2290 | 1 | <!doctype html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> | 1 | <!doctype html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> |
2291 | 2 | <html> | 2 | <html> |
2292 | 3 | <head> | 3 | <head> |
2293 | 4 | <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"> | 4 | <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"> |
2294 | @@ -8,6 +8,16 @@ | |||
2295 | 8 | <meta name="keywords" content="java obfuscator, optimizer, shrinker, preverfier"> | 8 | <meta name="keywords" content="java obfuscator, optimizer, shrinker, preverfier"> |
2296 | 9 | <link rel="stylesheet" type="text/css" href="style.css"> | 9 | <link rel="stylesheet" type="text/css" href="style.css"> |
2297 | 10 | <title>ProGuard Main</title> | 10 | <title>ProGuard Main</title> |
2298 | 11 | <script type="text/javascript" language="JavaScript"> | ||
2299 | 12 | <!-- | ||
2300 | 13 | if (window.self==window.top) | ||
2301 | 14 | window.top.location.replace("index.html#"+window.location.pathname+window.location.hash); | ||
2302 | 15 | else { | ||
2303 | 16 | if (window.top.location.hash!="") | ||
2304 | 17 | window.top.location.hash=""; | ||
2305 | 18 | } | ||
2306 | 19 | //--> | ||
2307 | 20 | </script> | ||
2308 | 11 | </head> | 21 | </head> |
2309 | 12 | <body> | 22 | <body> |
2310 | 13 | 23 | ||
2311 | @@ -25,25 +35,21 @@ | |||
2312 | 25 | <ul> | 35 | <ul> |
2313 | 26 | 36 | ||
2314 | 27 | <li>Creating more compact code, for smaller code archives, faster transfer | 37 | <li>Creating more compact code, for smaller code archives, faster transfer |
2320 | 28 | across networks, faster loading, and smaller memory footprints. | 38 | across networks, faster loading, and smaller memory footprints.</li> |
2321 | 29 | 39 | ||
2322 | 30 | <li>Making programs and libraries harder to reverse-engineer. | 40 | <li>Making programs and libraries harder to reverse-engineer.</li> |
2323 | 31 | 41 | ||
2324 | 32 | <li>Listing dead code, so it can be removed from the source code. | 42 | <li>Listing dead code, so it can be removed from the source code.</li> |
2325 | 33 | 43 | ||
2326 | 34 | <li>Retargeting and preverifying existing class files for Java 6, to take full | 44 | <li>Retargeting and preverifying existing class files for Java 6, to take full |
2328 | 35 | advantage of Java 6's faster class loading. | 45 | advantage of Java 6's faster class loading.</li> |
2329 | 36 | 46 | ||
2330 | 37 | </ul> | 47 | </ul> |
2331 | 38 | <p> | 48 | <p> |
2332 | 39 | <b>ProGuard</b>'s main advantage compared to other Java obfuscators is | 49 | <b>ProGuard</b>'s main advantage compared to other Java obfuscators is |
2333 | 40 | probably its compact template-based configuration. A few intuitive command | 50 | probably its compact template-based configuration. A few intuitive command |
2340 | 41 | line options or a simple configuration file are usually sufficient. For | 51 | line options or a simple configuration file are usually sufficient. |
2341 | 42 | instance, the following configuration option preserves all applets in a jar: | 52 | The user manual explains all available options and shows examples of this |
2336 | 43 | <pre> | ||
2337 | 44 | -keep public class * extends java.applet.Applet | ||
2338 | 45 | </pre> | ||
2339 | 46 | The user manual explains all available options and shows more examples of this | ||
2342 | 47 | powerful configuration style. | 53 | powerful configuration style. |
2343 | 48 | <p> | 54 | <p> |
2344 | 49 | <b>ProGuard</b> is fast. It only takes seconds to process programs and | 55 | <b>ProGuard</b> is fast. It only takes seconds to process programs and |
2345 | @@ -55,38 +61,42 @@ | |||
2346 | 55 | Toolkit. | 61 | Toolkit. |
2347 | 56 | <p> | 62 | <p> |
2348 | 57 | <p class="intro"> | 63 | <p class="intro"> |
2351 | 58 | Version 4.0 introduced preverification and more bytecode optimizations. Please | 64 | <b>ProGuard</b> now has a sibling optimizer and obfuscator for Android, |
2352 | 59 | report any problems, so they can be fixed soon. | 65 | <a href="http://www.saikoa.com/dexguard" target="_top"><b>DexGuard</b></a>. It |
2353 | 66 | is compatible with ProGuard, but it goes further. It directly targets Dalvik | ||
2354 | 67 | bytecode and it provides additional features like string encryption, class | ||
2355 | 68 | encryption, and hiding access to sensitive APIs. | ||
2356 | 60 | </p> | 69 | </p> |
2357 | 61 | The following sections provide more detailed information: | 70 | The following sections provide more detailed information: |
2358 | 62 | <ul> | 71 | <ul> |
2360 | 63 | <li><a href="main.html">Main</a>: this overview page. | 72 | <li><a href="main.html">Main</a>: this overview page.</li> |
2361 | 64 | <li><a href="results.html">Results</a>: some results obtained with | 73 | <li><a href="results.html">Results</a>: some results obtained with |
2364 | 65 | <b>ProGuard</b>, including timings and memory usage. | 74 | <b>ProGuard</b>, including timings and memory usage.</li> |
2365 | 66 | <li><a href="FAQ.html">FAQ</a>: answers to some Frequently Asked Questions. | 75 | <li><a href="FAQ.html">FAQ</a>: answers to some Frequently Asked Questions.</li> |
2366 | 67 | <li><a href="manual/index.html">Manual</a>: the complete <b>ProGuard</b> user | 76 | <li><a href="manual/index.html">Manual</a>: the complete <b>ProGuard</b> user |
2368 | 68 | manual, with examples and troubleshooting tips. | 77 | manual, with examples and troubleshooting tips.</li> |
2369 | 69 | <li><a href="quality.html">Quality</a>: a discussion of the (excellent) quality | 78 | <li><a href="quality.html">Quality</a>: a discussion of the (excellent) quality |
2372 | 70 | of <b>ProGuard</b>'s code. | 79 | of <b>ProGuard</b>'s code.</li> |
2373 | 71 | <li><a href="screenshots.html">Screenshots</a>: some impressions of what <b>ProGuard</b> looks like. | 80 | <li><a href="screenshots.html">Screenshots</a>: some impressions of what <b>ProGuard</b> looks like.</li> |
2374 | 72 | <li><a href="testimonials.html">Testimonials</a>: what users think of | 81 | <li><a href="testimonials.html">Testimonials</a>: what users think of |
2376 | 73 | <b>ProGuard</b>. | 82 | <b>ProGuard</b>.</li> |
2377 | 74 | <li><a href="license.html">License</a>: <b>ProGuard</b> is free, under a GPL | 83 | <li><a href="license.html">License</a>: <b>ProGuard</b> is free, under a GPL |
2379 | 75 | license. | 84 | license.</li> |
2380 | 76 | <li><a href="downloads.html">Downloads</a>: download the <b>ProGuard</b> | 85 | <li><a href="downloads.html">Downloads</a>: download the <b>ProGuard</b> |
2382 | 77 | package yourself. | 86 | package yourself.</li> |
2383 | 78 | <li><a href="feedback.html">Feedback</a>: tell me about your experiences, or | 87 | <li><a href="feedback.html">Feedback</a>: tell me about your experiences, or |
2385 | 79 | learn from others on our forums. | 88 | learn from others on our forums.</li> |
2386 | 80 | <li><a href="acknowledgements.html">Acknowledgements</a>: people who have been | 89 | <li><a href="acknowledgements.html">Acknowledgements</a>: people who have been |
2388 | 81 | helpful. | 90 | helpful.</li> |
2389 | 82 | <li><a href="alternatives.html">Alternatives</a>: other Java obfuscators, | 91 | <li><a href="alternatives.html">Alternatives</a>: other Java obfuscators, |
2391 | 83 | optimizers, and shrinkers. | 92 | optimizers, and shrinkers.</li> |
2392 | 84 | </ul> | 93 | </ul> |
2393 | 85 | 94 | ||
2395 | 86 | <hr> | 95 | <hr /> |
2396 | 96 | <noscript><div><a target="_top" href="index.html" class="button">Show menu</a></div></noscript> | ||
2397 | 87 | <address> | 97 | <address> |
2400 | 88 | Copyright © 2002-2009 | 98 | Copyright © 2002-2012 |
2401 | 89 | <a href="http://www.graphics.cornell.edu/~eric/">Eric Lafortune</a>. | 99 | <a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>. |
2402 | 90 | </address> | 100 | </address> |
2403 | 91 | </body> | 101 | </body> |
2404 | 92 | </html> | 102 | </html> |
2405 | 93 | 103 | ||
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 @@ | |||
2411 | 1 | <!doctype html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> | 1 | <!doctype html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> |
2412 | 2 | <html> | 2 | <html> |
2413 | 3 | <head> | 3 | <head> |
2414 | 4 | <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"> | 4 | <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"> |
2415 | 5 | <meta http-equiv="content-style-type" content="text/css"> | 5 | <meta http-equiv="content-style-type" content="text/css"> |
2416 | 6 | <link rel="stylesheet" type="text/css" href="style.css"> | 6 | <link rel="stylesheet" type="text/css" href="style.css"> |
2417 | 7 | <title>Ant Task</title> | 7 | <title>Ant Task</title> |
2418 | 8 | <script type="text/javascript" language="JavaScript"> | ||
2419 | 9 | <!-- | ||
2420 | 10 | if (window.self==window.top) | ||
2421 | 11 | window.top.location.replace("../index.html#"+window.location.pathname+window.location.hash); | ||
2422 | 12 | else { | ||
2423 | 13 | var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), ""); | ||
2424 | 14 | if (window.top.location.hash!=hash) | ||
2425 | 15 | window.top.location.hash=hash; | ||
2426 | 16 | } | ||
2427 | 17 | //--> | ||
2428 | 18 | </script> | ||
2429 | 8 | </head> | 19 | </head> |
2430 | 9 | <body> | 20 | <body> |
2431 | 10 | 21 | ||
2432 | @@ -89,11 +100,11 @@ | |||
2433 | 89 | <p> | 100 | <p> |
2434 | 90 | 101 | ||
2435 | 91 | Secondly, the use of <code><</code> and <code>></code> characters would | 102 | Secondly, the use of <code><</code> and <code>></code> characters would |
2441 | 92 | upset the structure of the XML build file. Environment variables are now | 103 | upset the structure of the XML build file. Environment variables can be |
2442 | 93 | enclosed by an opening <code>${</code> and a closing <code>}</code>. This | 104 | specified with the usual Ant style <code>${...}</code>, instead of the ProGuard |
2443 | 94 | syntax also allows you to use Ant properties within the ProGuard | 105 | style <code><...></code>. Other occurrences of <code><</code> and |
2444 | 95 | configuration. Other occurrences of <code><</code> and <code>></code> | 106 | <code>></code> have to be encoded as <code>&lt;</code> and |
2445 | 96 | have to be encoded as <code>&lt;</code> and <code>&gt;</code>. | 107 | <code>&gt;</code> respectively. |
2446 | 97 | <p> | 108 | <p> |
2447 | 98 | 109 | ||
2448 | 99 | <h3>3. XML configuration tags</h3> | 110 | <h3>3. XML configuration tags</h3> |
2449 | @@ -107,8 +118,7 @@ | |||
2450 | 107 | files in the <code>examples/ant</code> directory of the ProGuard distribution. | 118 | files in the <code>examples/ant</code> directory of the ProGuard distribution. |
2451 | 108 | <p> | 119 | <p> |
2452 | 109 | 120 | ||
2455 | 110 | <a name="proguard"> </a> | 121 | <h2><a name="proguard">Task Attributes and Nested Elements</a></h2> |
2454 | 111 | <h2>Task Attributes and Nested Elements</h2> | ||
2456 | 112 | 122 | ||
2457 | 113 | The <code><b><proguard></b></code> task and the | 123 | The <code><b><proguard></b></code> task and the |
2458 | 114 | <code><b><proguardconfiguration></b></code> task can have the following | 124 | <code><b><proguardconfiguration></b></code> task can have the following |
2459 | @@ -120,13 +130,14 @@ | |||
2460 | 120 | <dt><a name="configuration_attribute"><code><b>configuration</b></code></a> | 130 | <dt><a name="configuration_attribute"><code><b>configuration</b></code></a> |
2461 | 121 | = "<i>filename</i>"</dt> | 131 | = "<i>filename</i>"</dt> |
2462 | 122 | <dd>Read and merge options from the given ProGuard-style configuration | 132 | <dd>Read and merge options from the given ProGuard-style configuration |
2464 | 123 | file. Note: for reading XML-style configurations, use the <a | 133 | file. Note: for reading multiple configuration files or XML-style |
2465 | 134 | configurations, use the <a | ||
2466 | 124 | href="#configuration_element"><code>configuration</code></a> | 135 | href="#configuration_element"><code>configuration</code></a> |
2467 | 125 | <i>element</i>.</dd> | 136 | <i>element</i>.</dd> |
2468 | 126 | 137 | ||
2470 | 127 | <dt><a href="usage.html#dontskipnonpubliclibraryclasses"><code><b>skipnonpubliclibraryclasses</b></code></a> | 138 | <dt><a href="usage.html#skipnonpubliclibraryclasses"><code><b>skipnonpubliclibraryclasses</b></code></a> |
2471 | 128 | = "<i>boolean</i>" | 139 | = "<i>boolean</i>" |
2473 | 129 | (default = true)</dt> | 140 | (default = false)</dt> |
2474 | 130 | <dd>Ignore non-public library classes.</dd> | 141 | <dd>Ignore non-public library classes.</dd> |
2475 | 131 | 142 | ||
2476 | 132 | <dt><a href="usage.html#dontskipnonpubliclibraryclassmembers"><code><b>skipnonpubliclibraryclassmembers</b></code></a> | 143 | <dt><a href="usage.html#dontskipnonpubliclibraryclassmembers"><code><b>skipnonpubliclibraryclassmembers</b></code></a> |
2477 | @@ -242,6 +253,11 @@ | |||
2478 | 242 | <dd>Repackage all class files that are renamed into the single given | 253 | <dd>Repackage all class files that are renamed into the single given |
2479 | 243 | package.</dd> | 254 | package.</dd> |
2480 | 244 | 255 | ||
2481 | 256 | <dt><a href="usage.html#keepparameternames"><code><b>keepparameternames</b></code></a> | ||
2482 | 257 | = "<i>boolean</i>" | ||
2483 | 258 | (default = false)</dt> | ||
2484 | 259 | <dd>Keep the parameter names and types of methods that are kept.</dd> | ||
2485 | 260 | |||
2486 | 245 | <dt><a href="usage.html#renamesourcefileattribute"><code><b>renamesourcefileattribute</b></code></a> | 261 | <dt><a href="usage.html#renamesourcefileattribute"><code><b>renamesourcefileattribute</b></code></a> |
2487 | 246 | = "<i>string</i>" | 262 | = "<i>string</i>" |
2488 | 247 | (default = none)</dt> | 263 | (default = none)</dt> |
2489 | @@ -257,7 +273,7 @@ | |||
2490 | 257 | <dt><a href="usage.html#microedition"><code><b>microedition</b></code></a> | 273 | <dt><a href="usage.html#microedition"><code><b>microedition</b></code></a> |
2491 | 258 | = "<i>boolean</i>" | 274 | = "<i>boolean</i>" |
2492 | 259 | (default = false)</dt> | 275 | (default = false)</dt> |
2494 | 260 | <dd>Targets the processed class files at Java Micro Edition.</dd> | 276 | <dd>Target the processed class files at Java Micro Edition.</dd> |
2495 | 261 | 277 | ||
2496 | 262 | <dt><a href="usage.html#verbose"><code><b>verbose</b></code></a> | 278 | <dt><a href="usage.html#verbose"><code><b>verbose</b></code></a> |
2497 | 263 | = "<i>boolean</i>" | 279 | = "<i>boolean</i>" |
2498 | @@ -305,7 +321,7 @@ | |||
2499 | 305 | <dt><a href="usage.html#outjars"><code><b><outjar</b></code></a> | 321 | <dt><a href="usage.html#outjars"><code><b><outjar</b></code></a> |
2500 | 306 | <a href="#classpath"><i>class_path</i></a> | 322 | <a href="#classpath"><i>class_path</i></a> |
2501 | 307 | <code><b>/></b></code></dt> | 323 | <code><b>/></b></code></dt> |
2503 | 308 | <dd>Specifies the name of the output jars (or wars, ears, zips, or | 324 | <dd>Specifies the names of the output jars (or wars, ears, zips, or |
2504 | 309 | directories).</dd> | 325 | directories).</dd> |
2505 | 310 | 326 | ||
2506 | 311 | <dt><a href="usage.html#libraryjars"><code><b><libraryjar</b></code></a> | 327 | <dt><a href="usage.html#libraryjars"><code><b><libraryjar</b></code></a> |
2507 | @@ -436,23 +452,27 @@ | |||
2508 | 436 | filter. <i>Only use this option if you know what you're doing!</i></dd> | 452 | filter. <i>Only use this option if you know what you're doing!</i></dd> |
2509 | 437 | 453 | ||
2510 | 438 | <dt><a name="configuration_element"><code><b><configuration refid = </b></code></a>"<i>ref_id</i>" | 454 | <dt><a name="configuration_element"><code><b><configuration refid = </b></code></a>"<i>ref_id</i>" |
2511 | 455 | <code><b>/></b></code><br/> | ||
2512 | 456 | <code><b><configuration file = </b></code>"<i>name</i>" | ||
2513 | 439 | <code><b>/></b></code></dt> | 457 | <code><b>/></b></code></dt> |
2515 | 440 | <dd>Includes the configuration specified in the | 458 | <dd>The first form includes the XML-style configuration specified in a |
2516 | 441 | <code><proguardconfiguration></code> task (or | 459 | <code><proguardconfiguration></code> task (or |
2523 | 442 | <code><proguard></code> task) with the attribute <code>id</code> = | 460 | <code><proguard></code> task) with attribute <code>id</code> = |
2524 | 443 | "<i>ref_id</i>". Note that only the nested elements of this configuration | 461 | "<i>ref_id</i>". Only the nested elements of this configuration are |
2525 | 444 | are considered, not the attributes. Also note: for reading ProGuard-style | 462 | considered, not the attributes. |
2526 | 445 | configuration files, use the <a | 463 | <p> |
2527 | 446 | href="#configuration_attribute"><code>configuration</code></a> | 464 | The second form includes the ProGuard-style configuration from the specified |
2528 | 447 | <i>attribute</i>.</dd> | 465 | file. The element is actually a <code>fileset</code> element and supports |
2529 | 466 | all of its attributes and nested elements, including multiple files. | ||
2530 | 467 | </dd> | ||
2531 | 448 | 468 | ||
2532 | 449 | </dl> | 469 | </dl> |
2533 | 450 | 470 | ||
2536 | 451 | <a name="classpath"> </a> | 471 | <h2><a name="classpath">Class Path Attributes and Nested Elements</a></h2> |
2535 | 452 | <h2>Class Path Attributes and Nested Elements</h2> | ||
2537 | 453 | 472 | ||
2540 | 454 | The jar tags are path tags, so they can have any of the path attributes (or | 473 | The jar elements are <code>path</code> elements, so they can have any of the |
2541 | 455 | nested elements). The most common attributes are: | 474 | standard <code>path</code> attributes and nested elements. The most common |
2542 | 475 | attributes are: | ||
2543 | 456 | 476 | ||
2544 | 457 | <dl> | 477 | <dl> |
2545 | 458 | 478 | ||
2546 | @@ -472,7 +492,7 @@ | |||
2547 | 472 | 492 | ||
2548 | 473 | </dl> | 493 | </dl> |
2549 | 474 | 494 | ||
2551 | 475 | In addition, the jar tags can have ProGuard-style filter attributes: | 495 | In addition, the jar elements can have ProGuard-style filter attributes: |
2552 | 476 | 496 | ||
2553 | 477 | <dl> | 497 | <dl> |
2554 | 478 | 498 | ||
2555 | @@ -499,8 +519,7 @@ | |||
2556 | 499 | 519 | ||
2557 | 500 | </dl> | 520 | </dl> |
2558 | 501 | 521 | ||
2561 | 502 | <a name="keepmodifier"> </a> | 522 | <h2><a name="keepmodifier">Keep Modifier Attributes</a></h2> |
2560 | 503 | <h2>Keep Modifier Attributes</h2> | ||
2562 | 504 | 523 | ||
2563 | 505 | The keep tags can have the following <i>modifier</i> attributes: | 524 | The keep tags can have the following <i>modifier</i> attributes: |
2564 | 506 | 525 | ||
2565 | @@ -526,8 +545,7 @@ | |||
2566 | 526 | 545 | ||
2567 | 527 | </dl> | 546 | </dl> |
2568 | 528 | 547 | ||
2571 | 529 | <a name="classspecification"> </a> | 548 | <h2><a name="classspecification">Class Specification Attributes and Nested Elements</a></h2> |
2570 | 530 | <h2>Class Specification Attributes and Nested Elements</h2> | ||
2572 | 531 | 549 | ||
2573 | 532 | The keep tags can have the following <i>class_specification</i> attributes and | 550 | The keep tags can have the following <i>class_specification</i> attributes and |
2574 | 533 | <i>class_member_specifications</i> nested elements: | 551 | <i>class_member_specifications</i> nested elements: |
2575 | @@ -538,6 +556,10 @@ | |||
2576 | 538 | <dd>The optional access modifiers of the class. Any space-separated list of | 556 | <dd>The optional access modifiers of the class. Any space-separated list of |
2577 | 539 | "public", "final", and "abstract", with optional negators "!".</dd> | 557 | "public", "final", and "abstract", with optional negators "!".</dd> |
2578 | 540 | 558 | ||
2579 | 559 | <dt><code><b>annotation</b></code> = "<i>annotation_name</i>"</dt> | ||
2580 | 560 | <dd>The optional fully qualified name of an annotation of the class, with | ||
2581 | 561 | optional wildcards.</dd> | ||
2582 | 562 | |||
2583 | 541 | <dt><code><b>type</b></code> = "<i>type</i>"</dt> | 563 | <dt><code><b>type</b></code> = "<i>type</i>"</dt> |
2584 | 542 | <dd>The optional type of the class: one of "class", "interface", or | 564 | <dd>The optional type of the class: one of "class", "interface", or |
2585 | 543 | "!interface".</dd> | 565 | "!interface".</dd> |
2586 | @@ -546,6 +568,10 @@ | |||
2587 | 546 | <dd>The optional fully qualified name of the class, with optional | 568 | <dd>The optional fully qualified name of the class, with optional |
2588 | 547 | wildcards.</dd> | 569 | wildcards.</dd> |
2589 | 548 | 570 | ||
2590 | 571 | <dt><code><b>extendsannotation</b></code> = "<i>annotation_name</i>"</dt> | ||
2591 | 572 | <dd>The optional fully qualified name of an annotation of the the class that | ||
2592 | 573 | the specified classes must extend, with optional wildcards.</dd> | ||
2593 | 574 | |||
2594 | 549 | <dt><code><b>extends</b></code> = "<i>class_name</i>"</dt> | 575 | <dt><code><b>extends</b></code> = "<i>class_name</i>"</dt> |
2595 | 550 | <dd>The optional fully qualified name of the class the specified classes | 576 | <dd>The optional fully qualified name of the class the specified classes |
2596 | 551 | must extend, with optional wildcards.</dd> | 577 | must extend, with optional wildcards.</dd> |
2597 | @@ -571,8 +597,7 @@ | |||
2598 | 571 | 597 | ||
2599 | 572 | </dl> | 598 | </dl> |
2600 | 573 | 599 | ||
2603 | 574 | <a name="classmemberspecification"> </a> | 600 | <h2><a name="classmemberspecification">Class Member Specification Attributes</a></h2> |
2602 | 575 | <h2>Class Member Specification Attributes</h2> | ||
2604 | 576 | 601 | ||
2605 | 577 | The class member tags can have the following <i>class_member_specification</i> | 602 | The class member tags can have the following <i>class_member_specification</i> |
2606 | 578 | attributes: | 603 | attributes: |
2607 | @@ -584,6 +609,10 @@ | |||
2608 | 584 | "public", "protected", "private", "static", etc., with optional negators | 609 | "public", "protected", "private", "static", etc., with optional negators |
2609 | 585 | "!".</dd> | 610 | "!".</dd> |
2610 | 586 | 611 | ||
2611 | 612 | <dt><code><b>annotation</b></code> = "<i>annotation_name</i>"</dt> | ||
2612 | 613 | <dd>The optional fully qualified name of an annotation of the class member, | ||
2613 | 614 | with optional wildcards.</dd> | ||
2614 | 615 | |||
2615 | 587 | <dt><code><b>type</b></code> = "<i>type</i>"</dt> | 616 | <dt><code><b>type</b></code> = "<i>type</i>"</dt> |
2616 | 588 | <dd>The optional fully qualified type of the class member, with optional | 617 | <dd>The optional fully qualified type of the class member, with optional |
2617 | 589 | wildcards. Not applicable for constructors, but required for methods for | 618 | wildcards. Not applicable for constructors, but required for methods for |
2618 | @@ -601,10 +630,11 @@ | |||
2619 | 601 | 630 | ||
2620 | 602 | </dl> | 631 | </dl> |
2621 | 603 | 632 | ||
2623 | 604 | <hr> | 633 | <hr /> |
2624 | 634 | <noscript><div><a target="_top" href="../index.html" class="button">Show menu</a></div></noscript> | ||
2625 | 605 | <address> | 635 | <address> |
2628 | 606 | Copyright © 2002-2009 | 636 | Copyright © 2002-2012 |
2629 | 607 | <a href="http://www.graphics.cornell.edu/~eric/">Eric Lafortune</a>. | 637 | <a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>. |
2630 | 608 | </address> | 638 | </address> |
2631 | 609 | </body> | 639 | </body> |
2632 | 610 | </html> | 640 | </html> |
2633 | 611 | 641 | ||
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 @@ | |||
2639 | 1 | <!doctype html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> | 1 | <!doctype html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> |
2640 | 2 | <html> | 2 | <html> |
2641 | 3 | <head> | 3 | <head> |
2642 | 4 | <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"> | 4 | <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"> |
2643 | 5 | <meta http-equiv="content-style-type" content="text/css"> | 5 | <meta http-equiv="content-style-type" content="text/css"> |
2644 | 6 | <link rel="stylesheet" type="text/css" href="style.css"> | 6 | <link rel="stylesheet" type="text/css" href="style.css"> |
2645 | 7 | <title>ProGuard Examples</title> | 7 | <title>ProGuard Examples</title> |
2646 | 8 | <script type="text/javascript" language="JavaScript"> | ||
2647 | 9 | <!-- | ||
2648 | 10 | if (window.self==window.top) | ||
2649 | 11 | window.top.location.replace("../index.html#"+window.location.pathname+window.location.hash); | ||
2650 | 12 | else { | ||
2651 | 13 | var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), ""); | ||
2652 | 14 | if (window.top.location.hash!=hash) | ||
2653 | 15 | window.top.location.hash=hash; | ||
2654 | 16 | } | ||
2655 | 17 | //--> | ||
2656 | 18 | </script> | ||
2657 | 8 | </head> | 19 | </head> |
2658 | 9 | <body> | 20 | <body> |
2659 | 10 | 21 | ||
2660 | @@ -12,76 +23,83 @@ | |||
2661 | 12 | 23 | ||
2662 | 13 | Some typical useful configurations: | 24 | Some typical useful configurations: |
2663 | 14 | <ol> | 25 | <ol> |
2699 | 15 | <li><a href="#application">A typical application</a> | 26 | <li><a href="#application">A typical application</a></li> |
2700 | 16 | <li><a href="#applet">A typical applet</a> | 27 | <li><a href="#applet">A typical applet</a></li> |
2701 | 17 | <li><a href="#midlet">A typical midlet</a> | 28 | <li><a href="#midlet">A typical midlet</a></li> |
2702 | 18 | <li><a href="#jcapplet">A typical Java Card applet</a> | 29 | <li><a href="#jcapplet">A typical Java Card applet</a></li> |
2703 | 19 | <li><a href="#xlet">A typical xlet</a> | 30 | <li><a href="#xlet">A typical xlet</a></li> |
2704 | 20 | <li><a href="#androidapplication">A typical Android application</a> | 31 | <li><a href="#androidactivity">A simple Android activity</a></li> |
2705 | 21 | <li><a href="#library">A typical library</a> | 32 | <li><a href="#androidapplication">A complete Android application</a></li> |
2706 | 22 | <li><a href="#applications">All possible applications in the input jars</a> | 33 | <li><a href="#library">A typical library</a></li> |
2707 | 23 | <li><a href="#applets">All possible applets in the input jars</a> | 34 | <li><a href="#applications">All possible applications in the input jars</a></li> |
2708 | 24 | <li><a href="#midlets">All possible midlets in the input jars</a> | 35 | <li><a href="#applets">All possible applets in the input jars</a></li> |
2709 | 25 | <li><a href="#jcapplets">All possible Java Card applets in the input jars</a> | 36 | <li><a href="#midlets">All possible midlets in the input jars</a></li> |
2710 | 26 | <li><a href="#xlets">All possible xlets in the input jars</a> | 37 | <li><a href="#jcapplets">All possible Java Card applets in the input jars</a></li> |
2711 | 27 | <li><a href="#androidapplications">All possible Android applications in the input jars</a> | 38 | <li><a href="#xlets">All possible xlets in the input jars</a></li> |
2712 | 28 | <li><a href="#servlets">All possible servlets in the input jars</a> | 39 | <li><a href="#servlets">All possible servlets in the input jars</a></li> |
2713 | 29 | <li><a href="#native">Processing native methods</a> | 40 | <li><a href="#scala">Scala applications with the Scala runtime</a></li> |
2714 | 30 | <li><a href="#callback">Processing callback methods</a> | 41 | <li><a href="#native">Processing native methods</a></li> |
2715 | 31 | <li><a href="#enumerations">Processing enumeration classes</a> | 42 | <li><a href="#callback">Processing callback methods</a></li> |
2716 | 32 | <li><a href="#serializable">Processing serializable classes</a> | 43 | <li><a href="#enumerations">Processing enumeration classes</a></li> |
2717 | 33 | <li><a href="#beans">Processing bean classes</a> | 44 | <li><a href="#serializable">Processing serializable classes</a></li> |
2718 | 34 | <li><a href="#annotations">Processing annotations</a> | 45 | <li><a href="#beans">Processing bean classes</a></li> |
2719 | 35 | <li><a href="#database">Processing database drivers</a> | 46 | <li><a href="#annotations">Processing annotations</a></li> |
2720 | 36 | <li><a href="#componentui">Processing ComponentUI classes</a> | 47 | <li><a href="#database">Processing database drivers</a></li> |
2721 | 37 | <li><a href="#rmi">Processing RMI code</a> | 48 | <li><a href="#componentui">Processing ComponentUI classes</a></li> |
2722 | 38 | <li><a href="#resourcefiles">Processing resource files</a> | 49 | <li><a href="#rmi">Processing RMI code</a></li> |
2723 | 39 | <li><a href="#stacktrace">Producing useful obfuscated stack traces</a> | 50 | <li><a href="#injection">Processing resource injection</a></li> |
2724 | 40 | <li><a href="#repackaging">Obfuscating package names</a> | 51 | <li><a href="#resourcefiles">Processing resource files</a></li> |
2725 | 41 | <li><a href="#restructuring">Restructuring the output archives</a> | 52 | <li><a href="#manifestfiles">Processing manifest files</a></li> |
2726 | 42 | <li><a href="#filtering">Filtering the input and the output</a> | 53 | <li><a href="#stacktrace">Producing useful obfuscated stack traces</a></li> |
2727 | 43 | <li><a href="#multiple">Processing multiple applications at once</a> | 54 | <li><a href="#repackaging">Obfuscating package names</a></li> |
2728 | 44 | <li><a href="#incremental">Incremental obfuscation</a> | 55 | <li><a href="#restructuring">Restructuring the output archives</a></li> |
2729 | 45 | <li><a href="#microedition">Preverifying class files for Java Micro Edition</a> | 56 | <li><a href="#filtering">Filtering the input and the output</a></li> |
2730 | 46 | <li><a href="#upgrade">Upgrading class files to Java 6</a> | 57 | <li><a href="#multiple">Processing multiple applications at once</a></li> |
2731 | 47 | <li><a href="#deadcode">Finding dead code</a> | 58 | <li><a href="#incremental">Incremental obfuscation</a></li> |
2732 | 48 | <li><a href="#structure">Printing out the internal structure of class files</a> | 59 | <li><a href="#microedition">Preverifying class files for Java Micro Edition</a></li> |
2733 | 49 | <li><a href="#annotated">Using annotations to configure ProGuard</a> | 60 | <li><a href="#upgrade">Upgrading class files to Java 6</a></li> |
2734 | 61 | <li><a href="#deadcode">Finding dead code</a></li> | ||
2735 | 62 | <li><a href="#structure">Printing out the internal structure of class files</a></li> | ||
2736 | 63 | <li><a href="#annotated">Using annotations to configure ProGuard</a></li> | ||
2737 | 50 | </ol> | 64 | </ol> |
2738 | 51 | 65 | ||
2739 | 52 | You can find some sample configuration files in the <code>examples</code> | 66 | You can find some sample configuration files in the <code>examples</code> |
2740 | 53 | directory of the ProGuard distribution. | 67 | directory of the ProGuard distribution. |
2741 | 54 | 68 | ||
2746 | 55 | <a name="application"> </a> | 69 | <h3><a name="application">A typical application</a></h3> |
2747 | 56 | <h3>A typical application</h3> | 70 | |
2748 | 57 | To shrink, optimize, and obfuscate the ProGuard application itself, one would | 71 | To shrink, optimize, and obfuscate a simple Java application, you typically |
2749 | 58 | typically create a configuration file <code>proguard.pro</code> and then type: | 72 | create a configuration file like <code>myconfig.pro</code>, which can be used |
2750 | 73 | with | ||
2751 | 59 | <pre> | 74 | <pre> |
2753 | 60 | java -jar proguard.jar @proguard.pro | 75 | bin/proguard @myconfig.pro |
2754 | 61 | </pre> | 76 | </pre> |
2755 | 62 | <p> | 77 | <p> |
2757 | 63 | The configuration file would contain the following options: | 78 | The configuration file specifies the input, the output, and the entry points |
2758 | 79 | of the application: | ||
2759 | 64 | <pre> | 80 | <pre> |
2762 | 65 | -injars proguard.jar | 81 | -injars myapplication.jar |
2763 | 66 | -outjars proguard_out.jar | 82 | -outjars myapplication_out.jar |
2764 | 67 | -libraryjars <java.home>/lib/rt.jar | 83 | -libraryjars <java.home>/lib/rt.jar |
2766 | 68 | -printmapping proguard.map | 84 | -printmapping myapplication.map |
2767 | 69 | 85 | ||
2769 | 70 | -keep public class proguard.ProGuard { | 86 | -keep public class mypackage.MyMain { |
2770 | 71 | public static void main(java.lang.String[]); | 87 | public static void main(java.lang.String[]); |
2771 | 72 | } | 88 | } |
2772 | 73 | </pre> | 89 | </pre> |
2773 | 74 | <p> | 90 | <p> |
2780 | 75 | Note the use of the <code><java.home></code> system property; it is | 91 | Note the use of the <code><java.home></code> system property. ProGuard |
2781 | 76 | replaced automatically. | 92 | automatically replaces it when parsing the file. |
2782 | 77 | <p> | 93 | <p> |
2783 | 78 | Also note that all type names are fully specified: | 94 | The <a href="usage.html#keep"><code>-keep</code></a> option specifies the |
2784 | 79 | <code>proguard.ProGuard</code> and <code>java.lang.String[]</code>. | 95 | entry point of the application that has to be preserved. |
2779 | 80 | <p> | ||
2785 | 81 | The access modifiers <code>public</code> and <code>static</code> are not | 96 | The access modifiers <code>public</code> and <code>static</code> are not |
2786 | 82 | really required in this case, since we know a priori that the specified class | 97 | really required in this case, since we know a priori that the specified class |
2787 | 83 | and method have the proper access flags. It just looks more familiar this way. | 98 | and method have the proper access flags. It just looks more familiar this way. |
2788 | 84 | <p> | 99 | <p> |
2789 | 100 | Note that all type names are fully specified: | ||
2790 | 101 | <code>mypackage.MyMain</code> and <code>java.lang.String[]</code>. | ||
2791 | 102 | <p> | ||
2792 | 85 | We're writing out an obfuscation mapping file with <a | 103 | We're writing out an obfuscation mapping file with <a |
2793 | 86 | href="usage.html#printmapping"><code>-printmapping</code></a>, for | 104 | href="usage.html#printmapping"><code>-printmapping</code></a>, for |
2794 | 87 | de-obfuscating any stack traces later on, or for incremental obfuscation of | 105 | de-obfuscating any stack traces later on, or for incremental obfuscation of |
2795 | @@ -103,11 +121,10 @@ | |||
2796 | 103 | <a href="#enumerations">enumerations</a>, <a href="#serializable">serializable | 121 | <a href="#enumerations">enumerations</a>, <a href="#serializable">serializable |
2797 | 104 | classes</a>, <a href="#beans">bean classes</a>, <a | 122 | classes</a>, <a href="#beans">bean classes</a>, <a |
2798 | 105 | href="#annotations">annotations</a>, and <a href="#resourcefiles">resource | 123 | href="#annotations">annotations</a>, and <a href="#resourcefiles">resource |
2804 | 106 | files</a>. For processing 'simple' applications like ProGuard, that is not | 124 | files</a>. |
2805 | 107 | required. | 125 | |
2806 | 108 | 126 | <h3><a name="applet">A typical applet</a></h3> | |
2807 | 109 | <a name="applet"> </a> | 127 | |
2803 | 110 | <h3>A typical applet</h3> | ||
2808 | 111 | These options shrink, optimize, and obfuscate the applet | 128 | These options shrink, optimize, and obfuscate the applet |
2809 | 112 | <code>mypackage.MyApplet</code>: | 129 | <code>mypackage.MyApplet</code>: |
2810 | 113 | <pre> | 130 | <pre> |
2811 | @@ -129,15 +146,15 @@ | |||
2812 | 129 | href="#annotations">annotations</a>, and <a href="#resourcefiles">resource | 146 | href="#annotations">annotations</a>, and <a href="#resourcefiles">resource |
2813 | 130 | files</a>. | 147 | files</a>. |
2814 | 131 | 148 | ||
2817 | 132 | <a name="midlet"> </a> | 149 | <h3><a name="midlet">A typical midlet</a></h3> |
2818 | 133 | <h3>A typical midlet</h3> | 150 | |
2819 | 134 | These options shrink, optimize, obfuscate, and preverify the midlet | 151 | These options shrink, optimize, obfuscate, and preverify the midlet |
2820 | 135 | <code>mypackage.MyMIDlet</code>: | 152 | <code>mypackage.MyMIDlet</code>: |
2821 | 136 | <pre> | 153 | <pre> |
2822 | 137 | -injars in.jar | 154 | -injars in.jar |
2823 | 138 | -outjars out.jar | 155 | -outjars out.jar |
2826 | 139 | -libraryjars /usr/local/java/wtk2.1/lib/midpapi20.jar | 156 | -libraryjars /usr/local/java/wtk2.5.2/lib/midpapi20.jar |
2827 | 140 | -libraryjars /usr/local/java/wtk2.1/lib/cldcapi11.jar | 157 | -libraryjars /usr/local/java/wtk2.5.2/lib/cldcapi11.jar |
2828 | 141 | -overloadaggressively | 158 | -overloadaggressively |
2829 | 142 | -repackageclasses '' | 159 | -repackageclasses '' |
2830 | 143 | -allowaccessmodification | 160 | -allowaccessmodification |
2831 | @@ -172,8 +189,8 @@ | |||
2832 | 172 | Note that you will still have to adapt the midlet jar size in the | 189 | Note that you will still have to adapt the midlet jar size in the |
2833 | 173 | corresponding jad file; ProGuard doesn't do that for you. | 190 | corresponding jad file; ProGuard doesn't do that for you. |
2834 | 174 | 191 | ||
2837 | 175 | <a name="jcapplet"> </a> | 192 | <h3><a name="jcapplet">A typical Java Card applet</a></h3> |
2838 | 176 | <h3>A typical Java Card applet</h3> | 193 | |
2839 | 177 | These options shrink, optimize, and obfuscate the Java Card applet | 194 | These options shrink, optimize, and obfuscate the Java Card applet |
2840 | 178 | <code>mypackage.MyApplet</code>: | 195 | <code>mypackage.MyApplet</code>: |
2841 | 179 | <pre> | 196 | <pre> |
2842 | @@ -192,8 +209,8 @@ | |||
2843 | 192 | it now targets the Java Card run-time environment. This environment doesn't | 209 | it now targets the Java Card run-time environment. This environment doesn't |
2844 | 193 | have java.lang.Class, so we're telling ProGuard not to worry about it. | 210 | have java.lang.Class, so we're telling ProGuard not to worry about it. |
2845 | 194 | 211 | ||
2848 | 195 | <a name="xlet"> </a> | 212 | <h3><a name="xlet">A typical xlet</a></h3> |
2849 | 196 | <h3>A typical xlet</h3> | 213 | |
2850 | 197 | These options shrink, optimize, and obfuscate the xlet | 214 | These options shrink, optimize, and obfuscate the xlet |
2851 | 198 | <code>mypackage.MyXlet</code>: | 215 | <code>mypackage.MyXlet</code>: |
2852 | 199 | <pre> | 216 | <pre> |
2853 | @@ -212,15 +229,16 @@ | |||
2854 | 212 | The configuration is very similar to the configuration for midlets, except that | 229 | The configuration is very similar to the configuration for midlets, except that |
2855 | 213 | it now targets the CDC run-time environment with the Java TV API. | 230 | it now targets the CDC run-time environment with the Java TV API. |
2856 | 214 | 231 | ||
2861 | 215 | <a name="androidapplication"> </a> | 232 | <h3><a name="androidactivity">A simple Android activity</a></h3> |
2862 | 216 | <h3>A typical Android application</h3> | 233 | |
2863 | 217 | These options shrink, optimize, and obfuscate the simple Android application | 234 | These options shrink, optimize, and obfuscate the single Android |
2864 | 218 | based on a single activity <code>mypackage.MyActivity</code>: | 235 | activity <code>mypackage.MyActivity</code>: |
2865 | 219 | <pre> | 236 | <pre> |
2870 | 220 | -injars in.jar | 237 | -injars bin/classes |
2871 | 221 | -outjars out.jar | 238 | -outjars bin/classes-processed.jar |
2872 | 222 | -libraryjars /usr/local/java/android-1.5_r1/platforms/android-1.5/android.jar | 239 | -libraryjars /usr/local/java/android-sdk/platforms/android-9/android.jar |
2873 | 223 | -overloadaggressively | 240 | |
2874 | 241 | -dontpreverify | ||
2875 | 224 | -repackageclasses '' | 242 | -repackageclasses '' |
2876 | 225 | -allowaccessmodification | 243 | -allowaccessmodification |
2877 | 226 | -optimizations !code/simplification/arithmetic | 244 | -optimizations !code/simplification/arithmetic |
2878 | @@ -228,27 +246,157 @@ | |||
2879 | 228 | -keep public class mypackage.MyActivity | 246 | -keep public class mypackage.MyActivity |
2880 | 229 | </pre> | 247 | </pre> |
2881 | 230 | <p> | 248 | <p> |
2884 | 231 | The configuration is very similar to the configuration for midlets, except that | 249 | We're targeting the Android run-time and keeping the activity as an entry |
2885 | 232 | it now targets the Android run-time environment. | 250 | point. |
2886 | 251 | <p> | ||
2887 | 252 | Preverification is irrelevant for the dex compiler and the Dalvik VM, so we | ||
2888 | 253 | can switch it off with the | ||
2889 | 254 | <a href="usage.html#dontpreverify"><code>-dontpreverify</code></a> option. | ||
2890 | 233 | <p> | 255 | <p> |
2891 | 234 | The <a href="usage.html#optimizations"><code>-optimizations</code></a> option | 256 | The <a href="usage.html#optimizations"><code>-optimizations</code></a> option |
2892 | 235 | disables some arithmetic simplifications that Dalvik 1.0 and 1.5 can't handle. | 257 | disables some arithmetic simplifications that Dalvik 1.0 and 1.5 can't handle. |
2900 | 236 | <p> | 258 | Note that the Dalvik VM also can't |
2901 | 237 | If applicable, you should add options for processing <a href="#native">native | 259 | handle <a href="usage.html#overloadaggressively">aggressive overloading</a> |
2902 | 238 | methods</a>, <a href="#callback">callback methods</a>, and <a | 260 | (of static fields). |
2903 | 239 | href="#resourcefiles">resource files</a>. | 261 | <p> |
2904 | 240 | 262 | If applicable, you should add options for processing <a href="#native">native | |
2905 | 241 | <a name="library"> </a> | 263 | methods</a>, <a href="#callback">callback methods</a>, |
2906 | 242 | <h3>A typical library</h3> | 264 | <a href="#enumerations">enumerations</a>, |
2907 | 265 | <a href="#annotations">annotations</a>, and | ||
2908 | 266 | <a href="#resourcefiles">resource files</a>. | ||
2909 | 267 | |||
2910 | 268 | <h3><a name="androidapplication">A complete Android application</a></h3> | ||
2911 | 269 | |||
2912 | 270 | These options shrink, optimize, and obfuscate all public activities, services, | ||
2913 | 271 | broadcast receivers, and content providers from the compiled classes and | ||
2914 | 272 | external libraries: | ||
2915 | 273 | <pre> | ||
2916 | 274 | -injars bin/classes | ||
2917 | 275 | -injars libs | ||
2918 | 276 | -outjars bin/classes-processed.jar | ||
2919 | 277 | -libraryjars /usr/local/java/android-sdk/platforms/android-9/android.jar | ||
2920 | 278 | |||
2921 | 279 | -dontpreverify | ||
2922 | 280 | -repackageclasses '' | ||
2923 | 281 | -allowaccessmodification | ||
2924 | 282 | -optimizations !code/simplification/arithmetic | ||
2925 | 283 | -keepattributes *Annotation* | ||
2926 | 284 | |||
2927 | 285 | -keep public class * extends android.app.Activity | ||
2928 | 286 | -keep public class * extends android.app.Application | ||
2929 | 287 | -keep public class * extends android.app.Service | ||
2930 | 288 | -keep public class * extends android.content.BroadcastReceiver | ||
2931 | 289 | -keep public class * extends android.content.ContentProvider | ||
2932 | 290 | |||
2933 | 291 | -keep public class * extends android.view.View { | ||
2934 | 292 | public <init>(android.content.Context); | ||
2935 | 293 | public <init>(android.content.Context, android.util.AttributeSet); | ||
2936 | 294 | public <init>(android.content.Context, android.util.AttributeSet, int); | ||
2937 | 295 | public void set*(...); | ||
2938 | 296 | } | ||
2939 | 297 | |||
2940 | 298 | -keepclasseswithmembers class * { | ||
2941 | 299 | public <init>(android.content.Context, android.util.AttributeSet); | ||
2942 | 300 | } | ||
2943 | 301 | |||
2944 | 302 | -keepclasseswithmembers class * { | ||
2945 | 303 | public <init>(android.content.Context, android.util.AttributeSet, int); | ||
2946 | 304 | } | ||
2947 | 305 | |||
2948 | 306 | -keepclassmembers class * extends android.content.Context { | ||
2949 | 307 | public void *(android.view.View); | ||
2950 | 308 | public void *(android.view.MenuItem); | ||
2951 | 309 | } | ||
2952 | 310 | |||
2953 | 311 | -keepclassmembers class * implements android.os.Parcelable { | ||
2954 | 312 | static android.os.Parcelable$Creator CREATOR; | ||
2955 | 313 | } | ||
2956 | 314 | |||
2957 | 315 | -keepclassmembers class **.R$* { | ||
2958 | 316 | public static <fields>; | ||
2959 | 317 | } | ||
2960 | 318 | </pre> | ||
2961 | 319 | <p> | ||
2962 | 320 | Most importantly, we're keeping all fundamental classes that may be referenced | ||
2963 | 321 | by the <code>AndroidManifest.xml</code> file of the application. If your | ||
2964 | 322 | manifest file contains other classes and methods, you may have to specify | ||
2965 | 323 | those as well. | ||
2966 | 324 | <p> | ||
2967 | 325 | We're keeping annotations, since they might be used by custom | ||
2968 | 326 | <code>RemoteViews</code>. | ||
2969 | 327 | <p> | ||
2970 | 328 | We're keeping any custom <code>View</code> extensions and other classes with | ||
2971 | 329 | typical constructors, since they might be referenced from XML layout files. | ||
2972 | 330 | <p> | ||
2973 | 331 | We're also keeping possible <code>onClick</code> handlers in | ||
2974 | 332 | custom <code>Context</code> extensions, since they might be referenced from | ||
2975 | 333 | XML layout files. | ||
2976 | 334 | <p> | ||
2977 | 335 | We're also keeping the required static fields in <code>Parcelable</code> | ||
2978 | 336 | implementations, since they are accessed by introspection. | ||
2979 | 337 | <p> | ||
2980 | 338 | Finally, we're keeping the static fields of referenced inner classes of | ||
2981 | 339 | auto-generated <code>R</code> classes, just in case your code is accessing | ||
2982 | 340 | those fields by introspection. Note that the compiler already inlines | ||
2983 | 341 | primitive fields, so ProGuard can generally remove all these classes entirely | ||
2984 | 342 | anyway (because the classes are not referenced and therefore not required). | ||
2985 | 343 | <p> | ||
2986 | 344 | If you're using additional Google APIs, you'll have to specify | ||
2987 | 345 | those as well, for instance: | ||
2988 | 346 | <pre> | ||
2989 | 347 | -libraryjars /usr/local/android-sdk/add-ons/google_apis-7_r01/libs/maps.jar | ||
2990 | 348 | </pre> | ||
2991 | 349 | <p> | ||
2992 | 350 | If you're using Google's optional License Verification Library, you can | ||
2993 | 351 | obfuscate its code along with your own code. You do have to preserve | ||
2994 | 352 | its <code>ILicensingService</code> interface for the library to work: | ||
2995 | 353 | <pre> | ||
2996 | 354 | -keep public interface com.android.vending.licensing.ILicensingService | ||
2997 | 355 | </pre> | ||
2998 | 356 | <p> | ||
2999 | 357 | If you're using the Android Compatibility library, you should add the | ||
3000 | 358 | following line, to let ProGuard know it's ok that the library references some | ||
3001 | 359 | classes that are not available in all versions of the API: | ||
3002 | 360 | <pre> | ||
3003 | 361 | -dontwarn android.support.** | ||
3004 | 362 | </pre> | ||
3005 | 363 | <p> | ||
3006 | 364 | If applicable, you should add options for processing <a href="#native">native | ||
3007 | 365 | methods</a>, <a href="#callback">callback methods</a>, | ||
3008 | 366 | <a href="#enumerations">enumerations</a>, | ||
3009 | 367 | and <a href="#resourcefiles">resource files</a>. You may also want to add | ||
3010 | 368 | options for producing <a href="#stacktrace">useful stack traces</a>. You can | ||
3011 | 369 | find a complete sample configuration in <code>examples/android.pro</code> in | ||
3012 | 370 | the ProGuard distribution. | ||
3013 | 371 | <p> | ||
3014 | 372 | The Ant and Eclipse build processes of the Android SDK already integrate | ||
3015 | 373 | ProGuard by default, with all the proper settings. You only need to enable | ||
3016 | 374 | ProGuard (for release builds) by uncommenting the line | ||
3017 | 375 | "<code>proguard.config=.....</code>" in the file | ||
3018 | 376 | <code>project.properties</code> (created or updated by Android SDK revision 17 | ||
3019 | 377 | or higher). In case of problems, you may want to check if the configuration | ||
3020 | 378 | files that are listed on this line (<code>proguard-project.txt</code>,...) | ||
3021 | 379 | contain the necessary settings for your application. Note that the build | ||
3022 | 380 | processes are already setting the necessary program jars, library jars, and | ||
3023 | 381 | output jars for you. | ||
3024 | 382 | <p> | ||
3025 | 383 | For more information, you can consult the official <a target="other" | ||
3026 | 384 | href="http://developer.android.com/guide/developing/tools/proguard.html">Developer | ||
3027 | 385 | Guide</a> in the Android SDK. | ||
3028 | 386 | |||
3029 | 387 | <h3><a name="library">A typical library</a></h3> | ||
3030 | 388 | |||
3031 | 243 | These options shrink, optimize, and obfuscate an entire library, keeping all | 389 | These options shrink, optimize, and obfuscate an entire library, keeping all |
3032 | 244 | public and protected classes and class members, native method names, and | 390 | public and protected classes and class members, native method names, and |
3034 | 245 | serialization code: | 391 | serialization code. The processed version of the library can then still be |
3035 | 392 | used as such, for developing code based on its public API. | ||
3036 | 246 | <pre> | 393 | <pre> |
3037 | 247 | -injars in.jar | 394 | -injars in.jar |
3038 | 248 | -outjars out.jar | 395 | -outjars out.jar |
3039 | 249 | -libraryjars <java.home>/lib/rt.jar | 396 | -libraryjars <java.home>/lib/rt.jar |
3040 | 250 | -printmapping out.map | 397 | -printmapping out.map |
3041 | 251 | 398 | ||
3042 | 399 | -keepparameternames | ||
3043 | 252 | -renamesourcefileattribute SourceFile | 400 | -renamesourcefileattribute SourceFile |
3044 | 253 | -keepattributes Exceptions,InnerClasses,Signature,Deprecated, | 401 | -keepattributes Exceptions,InnerClasses,Signature,Deprecated, |
3045 | 254 | SourceFile,LineNumberTable,*Annotation*,EnclosingMethod | 402 | SourceFile,LineNumberTable,*Annotation*,EnclosingMethod |
3046 | @@ -273,6 +421,7 @@ | |||
3047 | 273 | 421 | ||
3048 | 274 | -keepclassmembers class * implements java.io.Serializable { | 422 | -keepclassmembers class * implements java.io.Serializable { |
3049 | 275 | static final long serialVersionUID; | 423 | static final long serialVersionUID; |
3050 | 424 | private static final java.io.ObjectStreamField[] serialPersistentFields; | ||
3051 | 276 | private void writeObject(java.io.ObjectOutputStream); | 425 | private void writeObject(java.io.ObjectOutputStream); |
3052 | 277 | private void readObject(java.io.ObjectInputStream); | 426 | private void readObject(java.io.ObjectInputStream); |
3053 | 278 | java.lang.Object writeReplace(); | 427 | java.lang.Object writeReplace(); |
3054 | @@ -289,12 +438,12 @@ | |||
3055 | 289 | href="usage.html#keepclassmembernames"><code>-keepclassmembernames</code></a> | 438 | href="usage.html#keepclassmembernames"><code>-keepclassmembernames</code></a> |
3056 | 290 | option for the <code>class$</code> methods is not strictly necessary. These | 439 | option for the <code>class$</code> methods is not strictly necessary. These |
3057 | 291 | methods are inserted by the <code>javac</code> compiler and the | 440 | methods are inserted by the <code>javac</code> compiler and the |
3064 | 292 | <code>jikes</code> compiler respectively, to implement the <code>.class</code> | 441 | <code>jikes</code> compiler respectively, in JDK 1.2 and older, to implement |
3065 | 293 | construct. ProGuard will automatically detect them and deal with them, even | 442 | the <code>.class</code> construct. ProGuard will automatically detect them and |
3066 | 294 | when their names have been obfuscated. However, older versions of ProGuard and | 443 | deal with them, even when their names have been obfuscated. However, other |
3067 | 295 | other obfuscators may rely on the original method names. It may therefore be | 444 | obfuscators may rely on the original method names. It may therefore be helpful |
3068 | 296 | helpful to preserve them, in case these other obfuscators are ever used for | 445 | to preserve them, in case these other obfuscators are ever used for further |
3069 | 297 | further obfuscation of the library. | 446 | obfuscation of the library. |
3070 | 298 | <p> | 447 | <p> |
3071 | 299 | The "Exceptions" attribute has to be preserved, so the compiler knows which | 448 | The "Exceptions" attribute has to be preserved, so the compiler knows which |
3072 | 300 | exceptions methods may throw. | 449 | exceptions methods may throw. |
3073 | @@ -307,6 +456,11 @@ | |||
3074 | 307 | The "Signature" attribute is required to be able to access generic types when | 456 | The "Signature" attribute is required to be able to access generic types when |
3075 | 308 | compiling in JDK 5.0 and higher. | 457 | compiling in JDK 5.0 and higher. |
3076 | 309 | <p> | 458 | <p> |
3077 | 459 | The <a href="usage.html#keepparameternames"><code>-keepparameternames</code></a> | ||
3078 | 460 | option keeps the parameter names in the "LocalVariableTable" and | ||
3079 | 461 | "LocalVariableTypeTable" attributes of public library methods. Some IDEs can | ||
3080 | 462 | present these names to the developers who use the library. | ||
3081 | 463 | <p> | ||
3082 | 310 | Finally, we're keeping the "Deprecated" attribute and the attributes for | 464 | Finally, we're keeping the "Deprecated" attribute and the attributes for |
3083 | 311 | producing <a href="#stacktrace">useful stack traces</a>. | 465 | producing <a href="#stacktrace">useful stack traces</a>. |
3084 | 312 | <p> | 466 | <p> |
3085 | @@ -316,8 +470,8 @@ | |||
3086 | 316 | href="#annotations">annotations</a>, which are all discussed in their | 470 | href="#annotations">annotations</a>, which are all discussed in their |
3087 | 317 | respective examples. | 471 | respective examples. |
3088 | 318 | 472 | ||
3091 | 319 | <a name="applications"> </a> | 473 | <h3><a name="applications">All possible applications in the input jars</a></h3> |
3092 | 320 | <h3>All possible applications in the input jars</h3> | 474 | |
3093 | 321 | These options shrink, optimize, and obfuscate all public applications in | 475 | These options shrink, optimize, and obfuscate all public applications in |
3094 | 322 | <code>in.jar</code>: | 476 | <code>in.jar</code>: |
3095 | 323 | <pre> | 477 | <pre> |
3096 | @@ -347,8 +501,8 @@ | |||
3097 | 347 | href="#annotations">annotations</a>, and <a href="#resourcefiles">resource | 501 | href="#annotations">annotations</a>, and <a href="#resourcefiles">resource |
3098 | 348 | files</a>. | 502 | files</a>. |
3099 | 349 | 503 | ||
3102 | 350 | <a name="applets"> </a> | 504 | <h3><a name="applets">All possible applets in the input jars</a></h3> |
3103 | 351 | <h3>All possible applets in the input jars</h3> | 505 | |
3104 | 352 | These options shrink, optimize, and obfuscate all public applets in | 506 | These options shrink, optimize, and obfuscate all public applets in |
3105 | 353 | <code>in.jar</code>: | 507 | <code>in.jar</code>: |
3106 | 354 | <pre> | 508 | <pre> |
3107 | @@ -372,15 +526,15 @@ | |||
3108 | 372 | href="#annotations">annotations</a>, and <a href="#resourcefiles">resource | 526 | href="#annotations">annotations</a>, and <a href="#resourcefiles">resource |
3109 | 373 | files</a>. | 527 | files</a>. |
3110 | 374 | 528 | ||
3113 | 375 | <a name="midlets"> </a> | 529 | <h3><a name="midlets">All possible midlets in the input jars</a></h3> |
3114 | 376 | <h3>All possible midlets in the input jars</h3> | 530 | |
3115 | 377 | These options shrink, optimize, obfuscate, and preverify all public midlets in | 531 | These options shrink, optimize, obfuscate, and preverify all public midlets in |
3116 | 378 | <code>in.jar</code>: | 532 | <code>in.jar</code>: |
3117 | 379 | <pre> | 533 | <pre> |
3118 | 380 | -injars in.jar | 534 | -injars in.jar |
3119 | 381 | -outjars out.jar | 535 | -outjars out.jar |
3122 | 382 | -libraryjars /usr/local/java/wtk2.1/lib/midpapi20.jar | 536 | -libraryjars /usr/local/java/wtk2.5.2/lib/midpapi20.jar |
3123 | 383 | -libraryjars /usr/local/java/wtk2.1/lib/cldcapi11.jar | 537 | -libraryjars /usr/local/java/wtk2.5.2/lib/cldcapi11.jar |
3124 | 384 | -overloadaggressively | 538 | -overloadaggressively |
3125 | 385 | -repackageclasses '' | 539 | -repackageclasses '' |
3126 | 386 | -allowaccessmodification | 540 | -allowaccessmodification |
3127 | @@ -412,8 +566,8 @@ | |||
3128 | 412 | Note that you will still have to adapt the midlet jar size in the | 566 | Note that you will still have to adapt the midlet jar size in the |
3129 | 413 | corresponding jad file; ProGuard doesn't do that for you. | 567 | corresponding jad file; ProGuard doesn't do that for you. |
3130 | 414 | 568 | ||
3133 | 415 | <a name="jcapplets"> </a> | 569 | <h3><a name="jcapplets">All possible Java Card applets in the input jars</a></h3> |
3134 | 416 | <h3>All possible Java Card applets in the input jars</h3> | 570 | |
3135 | 417 | These options shrink, optimize, and obfuscate all public Java Card applets in | 571 | These options shrink, optimize, and obfuscate all public Java Card applets in |
3136 | 418 | <code>in.jar</code>: | 572 | <code>in.jar</code>: |
3137 | 419 | <pre> | 573 | <pre> |
3138 | @@ -435,8 +589,8 @@ | |||
3139 | 435 | The <a href="usage.html#printseeds"><code>-printseeds</code></a> option prints | 589 | The <a href="usage.html#printseeds"><code>-printseeds</code></a> option prints |
3140 | 436 | out which applets exactly will be preserved. | 590 | out which applets exactly will be preserved. |
3141 | 437 | 591 | ||
3144 | 438 | <a name="xlets"> </a> | 592 | <h3><a name="xlets">All possible xlets in the input jars</a></h3> |
3145 | 439 | <h3>All possible xlets in the input jars</h3> | 593 | |
3146 | 440 | These options shrink, optimize, and obfuscate all public xlets in | 594 | These options shrink, optimize, and obfuscate all public xlets in |
3147 | 441 | <code>in.jar</code>: | 595 | <code>in.jar</code>: |
3148 | 442 | <pre> | 596 | <pre> |
3149 | @@ -458,38 +612,8 @@ | |||
3150 | 458 | The <a href="usage.html#printseeds"><code>-printseeds</code></a> option prints | 612 | The <a href="usage.html#printseeds"><code>-printseeds</code></a> option prints |
3151 | 459 | out which xlets exactly will be preserved. | 613 | out which xlets exactly will be preserved. |
3152 | 460 | 614 | ||
3185 | 461 | <a name="androidapplications"> </a> | 615 | <h3><a name="servlets">All possible servlets in the input jars</a></h3> |
3186 | 462 | <h3>All possible Android applications in the input jars</h3> | 616 | |
3155 | 463 | These options shrink, optimize, and obfuscate all public activities, services, | ||
3156 | 464 | broadcast receivers, and content providers in <code>in.jar</code>: | ||
3157 | 465 | <pre> | ||
3158 | 466 | -injars in.jar | ||
3159 | 467 | -outjars out.jar | ||
3160 | 468 | -libraryjars /usr/local/java/android-1.5_r1/platforms/android-1.5/android.jar | ||
3161 | 469 | -overloadaggressively | ||
3162 | 470 | -repackageclasses '' | ||
3163 | 471 | -allowaccessmodification | ||
3164 | 472 | -optimizations !code/simplification/arithmetic | ||
3165 | 473 | -printseeds | ||
3166 | 474 | |||
3167 | 475 | -keep public class * extends android.app.Activity | ||
3168 | 476 | -keep public class * extends android.app.Service | ||
3169 | 477 | -keep public class * extends android.content.BroadcastReceiver | ||
3170 | 478 | -keep public class * extends android.content.ContentProvider | ||
3171 | 479 | </pre> | ||
3172 | 480 | <p> | ||
3173 | 481 | We're keeping all classes that extend the base classes that may be referenced | ||
3174 | 482 | by the <code>AndroidManifest.xml</code> file of the application. | ||
3175 | 483 | <p> | ||
3176 | 484 | The <a href="usage.html#printseeds"><code>-printseeds</code></a> option prints | ||
3177 | 485 | out which implementations exactly will be preserved. | ||
3178 | 486 | <p> | ||
3179 | 487 | If applicable, you should add options for processing <a href="#native">native | ||
3180 | 488 | methods</a>, <a href="#callback">callback methods</a>, and <a | ||
3181 | 489 | href="#resourcefiles">resource files</a>. | ||
3182 | 490 | |||
3183 | 491 | <a name="servlets"> </a> | ||
3184 | 492 | <h3>All possible servlets in the input jars</h3> | ||
3187 | 493 | These options shrink, optimize, and obfuscate all public servlets in | 617 | These options shrink, optimize, and obfuscate all public servlets in |
3188 | 494 | <code>in.jar</code>: | 618 | <code>in.jar</code>: |
3189 | 495 | <pre> | 619 | <pre> |
3190 | @@ -521,8 +645,77 @@ | |||
3191 | 521 | href="#annotations">annotations</a>, and <a href="#resourcefiles">resource | 645 | href="#annotations">annotations</a>, and <a href="#resourcefiles">resource |
3192 | 522 | files</a>. | 646 | files</a>. |
3193 | 523 | 647 | ||
3196 | 524 | <a name="native"> </a> | 648 | <h3><a name="scala">Scala applications with the Scala runtime</a></h3> |
3197 | 525 | <h3>Processing native methods</h3> | 649 | |
3198 | 650 | These options shrink, optimize, and obfuscate all public Scala applications in | ||
3199 | 651 | <code>in.jar</code>: | ||
3200 | 652 | <pre> | ||
3201 | 653 | -injars in.jar | ||
3202 | 654 | -injars /usr/local/java/scala-2.9.1/lib/scala-library.jar | ||
3203 | 655 | -outjars out.jar | ||
3204 | 656 | -libraryjars <java.home>/lib/rt.jar | ||
3205 | 657 | |||
3206 | 658 | -dontwarn scala.** | ||
3207 | 659 | |||
3208 | 660 | -keepclasseswithmembers public class * { | ||
3209 | 661 | public static void main(java.lang.String[]); | ||
3210 | 662 | } | ||
3211 | 663 | |||
3212 | 664 | -keep class * implements org.xml.sax.EntityResolver | ||
3213 | 665 | |||
3214 | 666 | -keepclassmembers class * { | ||
3215 | 667 | ** MODULE$; | ||
3216 | 668 | } | ||
3217 | 669 | |||
3218 | 670 | -keepclassmembernames class scala.concurrent.forkjoin.ForkJoinPool { | ||
3219 | 671 | long eventCount; | ||
3220 | 672 | int workerCounts; | ||
3221 | 673 | int runControl; | ||
3222 | 674 | scala.concurrent.forkjoin.ForkJoinPool$WaitQueueNode syncStack; | ||
3223 | 675 | scala.concurrent.forkjoin.ForkJoinPool$WaitQueueNode spareStack; | ||
3224 | 676 | } | ||
3225 | 677 | |||
3226 | 678 | -keepclassmembernames class scala.concurrent.forkjoin.ForkJoinWorkerThread { | ||
3227 | 679 | int base; | ||
3228 | 680 | int sp; | ||
3229 | 681 | int runState; | ||
3230 | 682 | } | ||
3231 | 683 | |||
3232 | 684 | -keepclassmembernames class scala.concurrent.forkjoin.ForkJoinTask { | ||
3233 | 685 | int status; | ||
3234 | 686 | } | ||
3235 | 687 | |||
3236 | 688 | -keepclassmembernames class scala.concurrent.forkjoin.LinkedTransferQueue { | ||
3237 | 689 | scala.concurrent.forkjoin.LinkedTransferQueue$PaddedAtomicReference head; | ||
3238 | 690 | scala.concurrent.forkjoin.LinkedTransferQueue$PaddedAtomicReference tail; | ||
3239 | 691 | scala.concurrent.forkjoin.LinkedTransferQueue$PaddedAtomicReference cleanMe; | ||
3240 | 692 | } | ||
3241 | 693 | </pre> | ||
3242 | 694 | <p> | ||
3243 | 695 | The configuration is essentially the same as | ||
3244 | 696 | for <a href="#applications">processing applications</a>, because Scala is | ||
3245 | 697 | compiled to ordinary Java bytecode. However, the example processes the Scala | ||
3246 | 698 | runtime library as well. The processed jar can be an order of magnitude | ||
3247 | 699 | smaller and a few times faster than the original code (for the Scala code | ||
3248 | 700 | examples, for instance). | ||
3249 | 701 | <p> | ||
3250 | 702 | The <a href="usage.html#dontwarn"><code>-dontwarn</code></a> option tells | ||
3251 | 703 | ProGuard not to complain about some artefacts in the Scala runtime, the way it | ||
3252 | 704 | is compiled by the <code>scalac</code> compiler (at least in Scala 2.9.1 and | ||
3253 | 705 | older). Note that this option should always be used with care. | ||
3254 | 706 | <p> | ||
3255 | 707 | The additional <a href="usage.html#keepoverview"><code>-keep</code></a> | ||
3256 | 708 | options make sure that some classes and some fields that are accessed by means | ||
3257 | 709 | of introspection are not removed or renamed. | ||
3258 | 710 | <p> | ||
3259 | 711 | If applicable, you should add options for processing <a href="#native">native | ||
3260 | 712 | methods</a>, <a href="#callback">callback methods</a>, <a | ||
3261 | 713 | href="#enumerations">enumerations</a>, <a href="#serializable">serializable | ||
3262 | 714 | classes</a>, <a href="#beans">bean classes</a>, <a | ||
3263 | 715 | href="#annotations">annotations</a>, and <a href="#resourcefiles">resource | ||
3264 | 716 | files</a>. | ||
3265 | 717 | <h3><a name="native">Processing native methods</a></h3> | ||
3266 | 718 | |||
3267 | 526 | If your application, applet, servlet, library, etc., contains native methods, | 719 | If your application, applet, servlet, library, etc., contains native methods, |
3268 | 527 | you'll want to preserve their names and their classes' names, so they can | 720 | you'll want to preserve their names and their classes' names, so they can |
3269 | 528 | still be linked to the native library. The following additional option will | 721 | still be linked to the native library. The following additional option will |
3270 | @@ -543,8 +736,8 @@ | |||
3271 | 543 | entry points, which you'll have to specify explicitly. <a | 736 | entry points, which you'll have to specify explicitly. <a |
3272 | 544 | href="callback">Callback methods</a> are discussed below as a typical example. | 737 | href="callback">Callback methods</a> are discussed below as a typical example. |
3273 | 545 | 738 | ||
3276 | 546 | <a name="callback"> </a> | 739 | <h3><a name="callback">Processing callback methods</a></h3> |
3277 | 547 | <h3>Processing callback methods</h3> | 740 | |
3278 | 548 | If your application, applet, servlet, library, etc., contains callback | 741 | If your application, applet, servlet, library, etc., contains callback |
3279 | 549 | methods, which are called from external code (native code, scripts,...), | 742 | methods, which are called from external code (native code, scripts,...), |
3280 | 550 | you'll want to preserve them, and probably their classes too. They are just | 743 | you'll want to preserve them, and probably their classes too. They are just |
3281 | @@ -559,8 +752,8 @@ | |||
3282 | 559 | <p> | 752 | <p> |
3283 | 560 | This will preserve the given class and method from being removed or renamed. | 753 | This will preserve the given class and method from being removed or renamed. |
3284 | 561 | 754 | ||
3287 | 562 | <a name="enumerations"> </a> | 755 | <h3><a name="enumerations">Processing enumeration classes</a></h3> |
3288 | 563 | <h3>Processing enumeration classes</h3> | 756 | |
3289 | 564 | If your application, applet, servlet, library, etc., contains enumeration | 757 | If your application, applet, servlet, library, etc., contains enumeration |
3290 | 565 | classes, you'll have to preserve some special methods. Enumerations were | 758 | classes, you'll have to preserve some special methods. Enumerations were |
3291 | 566 | introduced in Java 5. The java compiler translates enumerations into classes | 759 | introduced in Java 5. The java compiler translates enumerations into classes |
3292 | @@ -576,8 +769,8 @@ | |||
3293 | 576 | } | 769 | } |
3294 | 577 | </pre> | 770 | </pre> |
3295 | 578 | 771 | ||
3298 | 579 | <a name="serializable"> </a> | 772 | <h3><a name="serializable">Processing serializable classes</a></h3> |
3299 | 580 | <h3>Processing serializable classes</h3> | 773 | |
3300 | 581 | More complex applications, applets, servlets, libraries, etc., may contain | 774 | More complex applications, applets, servlets, libraries, etc., may contain |
3301 | 582 | classes that are serialized. Depending on the way in which they are used, they | 775 | classes that are serialized. Depending on the way in which they are used, they |
3302 | 583 | may require special attention: | 776 | may require special attention: |
3303 | @@ -589,6 +782,7 @@ | |||
3304 | 589 | 782 | ||
3305 | 590 | <pre> | 783 | <pre> |
3306 | 591 | -keepclassmembers class * implements java.io.Serializable { | 784 | -keepclassmembers class * implements java.io.Serializable { |
3307 | 785 | private static final java.io.ObjectStreamField[] serialPersistentFields; | ||
3308 | 592 | private void writeObject(java.io.ObjectOutputStream); | 786 | private void writeObject(java.io.ObjectOutputStream); |
3309 | 593 | private void readObject(java.io.ObjectInputStream); | 787 | private void readObject(java.io.ObjectInputStream); |
3310 | 594 | java.lang.Object writeReplace(); | 788 | java.lang.Object writeReplace(); |
3311 | @@ -602,8 +796,7 @@ | |||
3312 | 602 | option makes sure that any serialization methods are kept. By using this | 796 | option makes sure that any serialization methods are kept. By using this |
3313 | 603 | option instead of the basic <code>-keep</code> option, we're not | 797 | option instead of the basic <code>-keep</code> option, we're not |
3314 | 604 | forcing preservation of <i>all</i> serializable classes, just preservation | 798 | forcing preservation of <i>all</i> serializable classes, just preservation |
3317 | 605 | of the listed members of classes that are actually used. | 799 | of the listed members of classes that are actually used.</li> |
3316 | 606 | <p> | ||
3318 | 607 | 800 | ||
3319 | 608 | <li>Sometimes, the serialized data are stored, and read back later into newer | 801 | <li>Sometimes, the serialized data are stored, and read back later into newer |
3320 | 609 | versions of the serializable classes. One then has to take care the classes | 802 | versions of the serializable classes. One then has to take care the classes |
3321 | @@ -617,7 +810,7 @@ | |||
3322 | 617 | 810 | ||
3323 | 618 | -keepclassmembers class * implements java.io.Serializable { | 811 | -keepclassmembers class * implements java.io.Serializable { |
3324 | 619 | static final long serialVersionUID; | 812 | static final long serialVersionUID; |
3326 | 620 | static final java.io.ObjectStreamField[] serialPersistentFields; | 813 | private static final java.io.ObjectStreamField[] serialPersistentFields; |
3327 | 621 | !static !transient <fields>; | 814 | !static !transient <fields>; |
3328 | 622 | private void writeObject(java.io.ObjectOutputStream); | 815 | private void writeObject(java.io.ObjectOutputStream); |
3329 | 623 | private void readObject(java.io.ObjectInputStream); | 816 | private void readObject(java.io.ObjectInputStream); |
3330 | @@ -632,7 +825,7 @@ | |||
3331 | 632 | The <code><fields></code> line preserves all non-static, | 825 | The <code><fields></code> line preserves all non-static, |
3332 | 633 | non-transient fields, with their original names. The introspection of the | 826 | non-transient fields, with their original names. The introspection of the |
3333 | 634 | serialization process and the de-serialization process will then find | 827 | serialization process and the de-serialization process will then find |
3335 | 635 | consistent names. | 828 | consistent names.</li> |
3336 | 636 | 829 | ||
3337 | 637 | <li>Occasionally, the serialized data have to remain compatible, but the | 830 | <li>Occasionally, the serialized data have to remain compatible, but the |
3338 | 638 | classes involved lack <code>serialVersionUID</code> fields. I imagine the | 831 | classes involved lack <code>serialVersionUID</code> fields. I imagine the |
3339 | @@ -651,7 +844,7 @@ | |||
3340 | 651 | 844 | ||
3341 | 652 | -keepclassmembers class * implements java.io.Serializable { | 845 | -keepclassmembers class * implements java.io.Serializable { |
3342 | 653 | static final long serialVersionUID; | 846 | static final long serialVersionUID; |
3344 | 654 | static final java.io.ObjectStreamField[] serialPersistentFields; | 847 | private static final java.io.ObjectStreamField[] serialPersistentFields; |
3345 | 655 | !static !transient <fields>; | 848 | !static !transient <fields>; |
3346 | 656 | !private <fields>; | 849 | !private <fields>; |
3347 | 657 | !private <methods>; | 850 | !private <methods>; |
3348 | @@ -668,7 +861,7 @@ | |||
3349 | 668 | interfaces of the serializable classes (using something like "<code>-keep | 861 | interfaces of the serializable classes (using something like "<code>-keep |
3350 | 669 | interface MyInterface</code>"), since these names are also used when | 862 | interface MyInterface</code>"), since these names are also used when |
3351 | 670 | computing the UID. A fast but sub-optimal alternative would be simply | 863 | computing the UID. A fast but sub-optimal alternative would be simply |
3353 | 671 | keeping all interfaces with "<code>-keep interface *</code>". | 864 | keeping all interfaces with "<code>-keep interface *</code>".</li> |
3354 | 672 | 865 | ||
3355 | 673 | </ul> | 866 | </ul> |
3356 | 674 | <p> | 867 | <p> |
3357 | @@ -679,8 +872,8 @@ | |||
3358 | 679 | ever be serialized. Knowing your application and tuning the configuration | 872 | ever be serialized. Knowing your application and tuning the configuration |
3359 | 680 | often produces more compact results. | 873 | often produces more compact results. |
3360 | 681 | 874 | ||
3363 | 682 | <a name="beans"> </a> | 875 | <h3><a name="beans">Processing bean classes</a></h3> |
3364 | 683 | <h3>Processing bean classes</h3> | 876 | |
3365 | 684 | If your application, applet, servlet, library, etc., makes extensive use of | 877 | If your application, applet, servlet, library, etc., makes extensive use of |
3366 | 685 | introspection on bean classes to find bean editor classes, or getter and | 878 | introspection on bean classes to find bean editor classes, or getter and |
3367 | 686 | setter methods, then configuration may become painful. There's not much else | 879 | setter methods, then configuration may become painful. There's not much else |
3368 | @@ -715,8 +908,8 @@ | |||
3369 | 715 | array or non-array). The methods with the '<code>int</code>' arguments matches | 908 | array or non-array). The methods with the '<code>int</code>' arguments matches |
3370 | 716 | properties that are lists. | 909 | properties that are lists. |
3371 | 717 | 910 | ||
3374 | 718 | <a name="annotations"> </a> | 911 | <h3><a name="annotations">Processing annotations</a></h3> |
3375 | 719 | <h3>Processing annotations</h3> | 912 | |
3376 | 720 | If your application, applet, servlet, library, etc., uses annotations, you may | 913 | If your application, applet, servlet, library, etc., uses annotations, you may |
3377 | 721 | want to preserve them in the processed output. Annotations are represented by | 914 | want to preserve them in the processed output. Annotations are represented by |
3378 | 722 | attributes that have no direct effect on the execution of the code. However, | 915 | attributes that have no direct effect on the execution of the code. However, |
3379 | @@ -744,8 +937,8 @@ | |||
3380 | 744 | -keepattributes EnclosingMethod | 937 | -keepattributes EnclosingMethod |
3381 | 745 | </pre> | 938 | </pre> |
3382 | 746 | 939 | ||
3385 | 747 | <a name="database"> </a> | 940 | <h3><a name="database">Processing database drivers</a></h3> |
3386 | 748 | <h3>Processing database drivers</h3> | 941 | |
3387 | 749 | Database drivers are implementations of the <code>Driver</code> interface. | 942 | Database drivers are implementations of the <code>Driver</code> interface. |
3388 | 750 | Since they are often created dynamically, you may want to preserve any | 943 | Since they are often created dynamically, you may want to preserve any |
3389 | 751 | implementations that you are processing as entry points: | 944 | implementations that you are processing as entry points: |
3390 | @@ -758,8 +951,8 @@ | |||
3391 | 758 | instantiating a driver in your code (without necessarily implementing any | 951 | instantiating a driver in your code (without necessarily implementing any |
3392 | 759 | drivers yourself). | 952 | drivers yourself). |
3393 | 760 | 953 | ||
3396 | 761 | <a name="componentui"> </a> | 954 | <h3><a name="componentui">Processing ComponentUI classes</a></h3> |
3397 | 762 | <h3>Processing ComponentUI classes</h3> | 955 | |
3398 | 763 | Swing UI look and feels are implemented as extensions of the | 956 | Swing UI look and feels are implemented as extensions of the |
3399 | 764 | <code>ComponentUI</code> class. For some reason, these have to contain a | 957 | <code>ComponentUI</code> class. For some reason, these have to contain a |
3400 | 765 | static method <code>createUI</code>, which the Swing API invokes using | 958 | static method <code>createUI</code>, which the Swing API invokes using |
3401 | @@ -773,8 +966,8 @@ | |||
3402 | 773 | <p> | 966 | <p> |
3403 | 774 | This option also keeps the classes themselves. | 967 | This option also keeps the classes themselves. |
3404 | 775 | 968 | ||
3407 | 776 | <a name="rmi"> </a> | 969 | <h3><a name="rmi">Processing RMI code</a></h3> |
3408 | 777 | <h3>Processing RMI code</h3> | 970 | |
3409 | 778 | Reportedly, the easiest way to handle RMI code is to process the code with | 971 | Reportedly, the easiest way to handle RMI code is to process the code with |
3410 | 779 | ProGuard first and then invoke the <code>rmic</code> tool. If that is not | 972 | ProGuard first and then invoke the <code>rmic</code> tool. If that is not |
3411 | 780 | possible, you may want to try something like this: | 973 | possible, you may want to try something like this: |
3412 | @@ -798,8 +991,29 @@ | |||
3413 | 798 | handling code performs introspection to check whether the method signatures | 991 | handling code performs introspection to check whether the method signatures |
3414 | 799 | are compatible. | 992 | are compatible. |
3415 | 800 | 993 | ||
3418 | 801 | <a name="resourcefiles"> </a> | 994 | <h3><a name="injection">Processing resource injection</a></h3> |
3419 | 802 | <h3>Processing resource files</h3> | 995 | |
3420 | 996 | If your application is using JEE-style resource injection, the application | ||
3421 | 997 | container will automatically assign instances of resource classes to fields and | ||
3422 | 998 | methods that are annotated with <code>@Resource</code>. The container applies | ||
3423 | 999 | introspection, even accessing private class members directly. It typically | ||
3424 | 1000 | constructs a resource name based on the type name and the class member name. | ||
3425 | 1001 | We then have to avoid that such class members are removed or renamed: | ||
3426 | 1002 | <pre> | ||
3427 | 1003 | -keepclassmembers class * { | ||
3428 | 1004 | @javax.annotation.Resource *; | ||
3429 | 1005 | } | ||
3430 | 1006 | </pre> | ||
3431 | 1007 | <p> | ||
3432 | 1008 | The Spring framework has another similar annotation <code>@Autowired</code>: | ||
3433 | 1009 | <pre> | ||
3434 | 1010 | -keepclassmembers class * { | ||
3435 | 1011 | @org.springframework.beans.factory.annotation.Autowired *; | ||
3436 | 1012 | } | ||
3437 | 1013 | </pre> | ||
3438 | 1014 | |||
3439 | 1015 | <h3><a name="resourcefiles">Processing resource files</a></h3> | ||
3440 | 1016 | |||
3441 | 803 | If your application, applet, servlet, library, etc., contains resource files, | 1017 | If your application, applet, servlet, library, etc., contains resource files, |
3442 | 804 | it may be necessary to adapt their names and/or their contents when the | 1018 | it may be necessary to adapt their names and/or their contents when the |
3443 | 805 | application is obfuscated. The following two options can achieve this | 1019 | application is obfuscated. The following two options can achieve this |
3444 | @@ -818,8 +1032,31 @@ | |||
3445 | 818 | replaces these names by the obfuscated names (if any). You'll probably want to | 1032 | replaces these names by the obfuscated names (if any). You'll probably want to |
3446 | 819 | adapt the filters to suit your application. | 1033 | adapt the filters to suit your application. |
3447 | 820 | 1034 | ||
3450 | 821 | <a name="stacktrace"> </a> | 1035 | <h3><a name="manifestfiles">Processing manifest files</a></h3> |
3451 | 822 | <h3>Producing useful obfuscated stack traces</h3> | 1036 | |
3452 | 1037 | As illustrated in the previous section, manifest files can be treated like | ||
3453 | 1038 | ordinary resource files. ProGuard can adapt obfuscated class names in the | ||
3454 | 1039 | files, but it won't make any other changes. If you want anything else, you | ||
3455 | 1040 | should apply an external tool. For instance, if a manifest file contains | ||
3456 | 1041 | signing information, you should sign the jar again after it has been | ||
3457 | 1042 | processed. | ||
3458 | 1043 | <p> | ||
3459 | 1044 | If you're merging several input jars into a single output jar, you'll have to | ||
3460 | 1045 | pick one, typically by specifying <a href="usage.html#filters">filters</a>: | ||
3461 | 1046 | <pre> | ||
3462 | 1047 | -injars in1.jar | ||
3463 | 1048 | -injars in2.jar(!META-INF/MANIFEST.MF) | ||
3464 | 1049 | -injars in3.jar(!META-INF/MANIFEST.MF) | ||
3465 | 1050 | -outjars out.jar | ||
3466 | 1051 | </pre> | ||
3467 | 1052 | <p> | ||
3468 | 1053 | The filters will let ProGuard copy the manifest file from the first jar and | ||
3469 | 1054 | ignore any manifest files in the second and third input jars. Note that | ||
3470 | 1055 | ProGuard will leave the order of the files in the jars unchanged; manifest | ||
3471 | 1056 | files are not necessarily put first. | ||
3472 | 1057 | |||
3473 | 1058 | <h3><a name="stacktrace">Producing useful obfuscated stack traces</a></h3> | ||
3474 | 1059 | |||
3475 | 823 | These options let obfuscated applications or libraries produce stack traces | 1060 | These options let obfuscated applications or libraries produce stack traces |
3476 | 824 | that can still be deciphered later on: | 1061 | that can still be deciphered later on: |
3477 | 825 | <pre> | 1062 | <pre> |
3478 | @@ -844,8 +1081,8 @@ | |||
3479 | 844 | <code>out.map</code>. The information can then be used by the <a | 1081 | <code>out.map</code>. The information can then be used by the <a |
3480 | 845 | href="retrace/index.html">ReTrace</a> tool to restore the original stack trace. | 1082 | href="retrace/index.html">ReTrace</a> tool to restore the original stack trace. |
3481 | 846 | 1083 | ||
3484 | 847 | <a name="repackaging"> </a> | 1084 | <h3><a name="repackaging">Obfuscating package names</a></h3> |
3485 | 848 | <h3>Obfuscating package names</h3> | 1085 | |
3486 | 849 | Package names can be obfuscated in various ways, with increasing levels of | 1086 | Package names can be obfuscated in various ways, with increasing levels of |
3487 | 850 | obfuscation and compactness. For example, consider the following classes: | 1087 | obfuscation and compactness. For example, consider the following classes: |
3488 | 851 | <pre> | 1088 | <pre> |
3489 | @@ -951,8 +1188,8 @@ | |||
3490 | 951 | all code. Notably, you may have to take into account that your application may | 1188 | all code. Notably, you may have to take into account that your application may |
3491 | 952 | contain <a href="#resourcefiles">resource files</a> that have to be adapted. | 1189 | contain <a href="#resourcefiles">resource files</a> that have to be adapted. |
3492 | 953 | 1190 | ||
3495 | 954 | <a name="restructuring"> </a> | 1191 | <h3><a name="restructuring">Restructuring the output archives</a></h3> |
3496 | 955 | <h3>Restructuring the output archives</h3> | 1192 | |
3497 | 956 | In simple applications, all output classes and resources files are merged into | 1193 | In simple applications, all output classes and resources files are merged into |
3498 | 957 | a single jar. For example: | 1194 | a single jar. For example: |
3499 | 958 | <pre> | 1195 | <pre> |
3500 | @@ -1022,12 +1259,12 @@ | |||
3501 | 1022 | always tries to package output archives in a sensible way, reconstructing the | 1259 | always tries to package output archives in a sensible way, reconstructing the |
3502 | 1023 | input entries as much as required. | 1260 | input entries as much as required. |
3503 | 1024 | 1261 | ||
3506 | 1025 | <a name="filtering"> </a> | 1262 | <h3><a name="filtering">Filtering the input and the output</a></h3> |
3505 | 1026 | <h3>Filtering the input and the output</h3> | ||
3507 | 1027 | 1263 | ||
3511 | 1028 | If you want even greater control, you can add filters to the input and the | 1264 | If you want even greater control, you can add |
3512 | 1029 | output, filtering out zips, ears, wars, jars, and/or ordinary files. For | 1265 | <a href="usage.html#filters">filters</a> to the input and the output, |
3513 | 1030 | example, if you want to disregard certain files from an input jar: | 1266 | filtering out zips, ears, wars, jars, and/or ordinary files. For example, if |
3514 | 1267 | you want to disregard certain files from an input jar: | ||
3515 | 1031 | <pre> | 1268 | <pre> |
3516 | 1032 | -injars in.jar(!images/**) | 1269 | -injars in.jar(!images/**) |
3517 | 1033 | -outjars out.jar | 1270 | -outjars out.jar |
3518 | @@ -1080,10 +1317,10 @@ | |||
3519 | 1080 | <code>resources_out.jar</code>. | 1317 | <code>resources_out.jar</code>. |
3520 | 1081 | <p> | 1318 | <p> |
3521 | 1082 | Again, the filtering can be arbitrarily complex, especially when combined with | 1319 | Again, the filtering can be arbitrarily complex, especially when combined with |
3526 | 1083 | the grouping of input and output. | 1320 | grouping input and output. |
3527 | 1084 | 1321 | ||
3528 | 1085 | <a name="multiple"> </a> | 1322 | <h3><a name="multiple">Processing multiple applications at once</a></h3> |
3529 | 1086 | <h3>Processing multiple applications at once</h3> | 1323 | |
3530 | 1087 | You can process several dependent or independent applications (or applets, | 1324 | You can process several dependent or independent applications (or applets, |
3531 | 1088 | midlets,...) in one go, in order to save time and effort. ProGuard's input and | 1325 | midlets,...) in one go, in order to save time and effort. ProGuard's input and |
3532 | 1089 | output handling offers various ways to keep the output nicely structured. | 1326 | output handling offers various ways to keep the output nicely structured. |
3533 | @@ -1100,10 +1337,10 @@ | |||
3534 | 1100 | </pre> | 1337 | </pre> |
3535 | 1101 | <p> | 1338 | <p> |
3536 | 1102 | After processing, the directory <code>processed_applications</code> will | 1339 | After processing, the directory <code>processed_applications</code> will |
3541 | 1103 | contain the processed application jars, with their original names. | 1340 | contain processed versions of application jars, with their original names. |
3542 | 1104 | 1341 | ||
3543 | 1105 | <a name="incremental"> </a> | 1342 | <h3><a name="incremental">Incremental obfuscation</a></h3> |
3544 | 1106 | <h3>Incremental obfuscation</h3> | 1343 | |
3545 | 1107 | After having <a href="#application">processed an application</a>, e.g. | 1344 | After having <a href="#application">processed an application</a>, e.g. |
3546 | 1108 | ProGuard itself, you can still incrementally add other pieces of code that | 1345 | ProGuard itself, you can still incrementally add other pieces of code that |
3547 | 1109 | depend on it, e.g. the ProGuard GUI: | 1346 | depend on it, e.g. the ProGuard GUI: |
3548 | @@ -1149,18 +1386,18 @@ | |||
3549 | 1149 | } | 1386 | } |
3550 | 1150 | </pre> | 1387 | </pre> |
3551 | 1151 | 1388 | ||
3554 | 1152 | <a name="microedition"> </a> | 1389 | <h3><a name="microedition">Preverifying class files for Java Micro Edition</a></h3> |
3555 | 1153 | <h3>Preverifying class files for Java Micro Edition</h3> | 1390 | |
3556 | 1154 | Even if you're not interested in shrinking, optimizing, and obfuscating your | 1391 | Even if you're not interested in shrinking, optimizing, and obfuscating your |
3557 | 1155 | midlets, as shown in the <a href="#midlets">midlets example</a>, you can still | 1392 | midlets, as shown in the <a href="#midlets">midlets example</a>, you can still |
3558 | 1156 | use ProGuard to preverify the class files for Java Micro Edition. ProGuard | 1393 | use ProGuard to preverify the class files for Java Micro Edition. ProGuard |
3560 | 1157 | produces slightly more compact results compared to the traditional external | 1394 | produces slightly more compact results than the traditional external |
3561 | 1158 | preverifier. | 1395 | preverifier. |
3562 | 1159 | <pre> | 1396 | <pre> |
3563 | 1160 | -injars in.jar | 1397 | -injars in.jar |
3564 | 1161 | -outjars out.jar | 1398 | -outjars out.jar |
3567 | 1162 | -libraryjars /usr/local/java/wtk2.1/lib/midpapi20.jar | 1399 | -libraryjars /usr/local/java/wtk2.5.2/lib/midpapi20.jar |
3568 | 1163 | -libraryjars /usr/local/java/wtk2.1/lib/cldcapi11.jar | 1400 | -libraryjars /usr/local/java/wtk2.5.2/lib/cldcapi11.jar |
3569 | 1164 | 1401 | ||
3570 | 1165 | -dontshrink | 1402 | -dontshrink |
3571 | 1166 | -dontoptimize | 1403 | -dontoptimize |
3572 | @@ -1175,8 +1412,8 @@ | |||
3573 | 1175 | that we don't need any <code>-keep</code> options to specify entry points; all | 1412 | that we don't need any <code>-keep</code> options to specify entry points; all |
3574 | 1176 | class files are simply preverified. | 1413 | class files are simply preverified. |
3575 | 1177 | 1414 | ||
3578 | 1178 | <a name="upgrade"> </a> | 1415 | <h3><a name="upgrade">Upgrading class files to Java 6</a></h3> |
3579 | 1179 | <h3>Upgrading class files to Java 6</h3> | 1416 | |
3580 | 1180 | The following options upgrade class files to Java 6, by updating their | 1417 | The following options upgrade class files to Java 6, by updating their |
3581 | 1181 | internal version numbers and preverifying them. The class files can then be | 1418 | internal version numbers and preverifying them. The class files can then be |
3582 | 1182 | loaded more efficiently by the Java 6 Virtual Machine. | 1419 | loaded more efficiently by the Java 6 Virtual Machine. |
3583 | @@ -1198,8 +1435,8 @@ | |||
3584 | 1198 | any <code>-keep</code> options to specify entry points; all class files are | 1435 | any <code>-keep</code> options to specify entry points; all class files are |
3585 | 1199 | simply updated and preverified. | 1436 | simply updated and preverified. |
3586 | 1200 | 1437 | ||
3589 | 1201 | <a name="deadcode"> </a> | 1438 | <h3><a name="deadcode">Finding dead code</a></h3> |
3590 | 1202 | <h3>Finding dead code</h3> | 1439 | |
3591 | 1203 | These options list unused classes, fields, and methods in the application | 1440 | These options list unused classes, fields, and methods in the application |
3592 | 1204 | <code>mypackage.MyApplication</code>: | 1441 | <code>mypackage.MyApplication</code>: |
3593 | 1205 | <pre> | 1442 | <pre> |
3594 | @@ -1232,8 +1469,8 @@ | |||
3595 | 1232 | } | 1469 | } |
3596 | 1233 | </pre> | 1470 | </pre> |
3597 | 1234 | 1471 | ||
3600 | 1235 | <a name="structure"> </a> | 1472 | <h3><a name="structure">Printing out the internal structure of class files</a></h3> |
3601 | 1236 | <h3>Printing out the internal structure of class files</h3> | 1473 | |
3602 | 1237 | These options print out the internal structure of all class files in the input | 1474 | These options print out the internal structure of all class files in the input |
3603 | 1238 | jar: | 1475 | jar: |
3604 | 1239 | <pre> | 1476 | <pre> |
3605 | @@ -1250,8 +1487,7 @@ | |||
3606 | 1250 | Note how we don't need to specify the Java run-time jar, because we're not | 1487 | Note how we don't need to specify the Java run-time jar, because we're not |
3607 | 1251 | processing the input jar at all. | 1488 | processing the input jar at all. |
3608 | 1252 | 1489 | ||
3611 | 1253 | <a name="annotated"> </a> | 1490 | <h3><a name="annotated">Using annotations to configure ProGuard</a></h3> |
3610 | 1254 | <h3>Using annotations to configure ProGuard</h3> | ||
3612 | 1255 | 1491 | ||
3613 | 1256 | The traditional ProGuard configuration allows to keep a clean separation | 1492 | The traditional ProGuard configuration allows to keep a clean separation |
3614 | 1257 | between the code and the configuration for shrinking, optimization, and | 1493 | between the code and the configuration for shrinking, optimization, and |
3615 | @@ -1291,12 +1527,12 @@ | |||
3616 | 1291 | <p> | 1527 | <p> |
3617 | 1292 | The directory <code>examples/annotations</code> contains more examples that | 1528 | The directory <code>examples/annotations</code> contains more examples that |
3618 | 1293 | illustrate some of the possibilities. | 1529 | illustrate some of the possibilities. |
3619 | 1294 | <p> | ||
3620 | 1295 | 1530 | ||
3622 | 1296 | <hr> | 1531 | <hr /> |
3623 | 1532 | <noscript><div><a target="_top" href="../index.html" class="button">Show menu</a></div></noscript> | ||
3624 | 1297 | <address> | 1533 | <address> |
3627 | 1298 | Copyright © 2002-2009 | 1534 | Copyright © 2002-2012 |
3628 | 1299 | <a href="http://www.graphics.cornell.edu/~eric/">Eric Lafortune</a>. | 1535 | <a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>. |
3629 | 1300 | </address> | 1536 | </address> |
3630 | 1301 | </body> | 1537 | </body> |
3631 | 1302 | </html> | 1538 | </html> |
3632 | 1303 | 1539 | ||
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 @@ | |||
3638 | 1 | <!doctype html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> | 1 | <!doctype html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> |
3639 | 2 | <html> | 2 | <html> |
3640 | 3 | <head> | 3 | <head> |
3641 | 4 | <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"> | 4 | <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"> |
3642 | 5 | <meta http-equiv="content-style-type" content="text/css"> | 5 | <meta http-equiv="content-style-type" content="text/css"> |
3643 | 6 | <link rel="stylesheet" type="text/css" href="style.css"> | 6 | <link rel="stylesheet" type="text/css" href="style.css"> |
3644 | 7 | <title>ProGuard GUI</title> | 7 | <title>ProGuard GUI</title> |
3645 | 8 | <script type="text/javascript" language="JavaScript"> | ||
3646 | 9 | <!-- | ||
3647 | 10 | if (window.self==window.top) | ||
3648 | 11 | window.top.location.replace("../index.html#"+window.location.pathname+window.location.hash); | ||
3649 | 12 | else { | ||
3650 | 13 | var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), ""); | ||
3651 | 14 | if (window.top.location.hash!=hash) | ||
3652 | 15 | window.top.location.hash=hash; | ||
3653 | 16 | } | ||
3654 | 17 | //--> | ||
3655 | 18 | </script> | ||
3656 | 8 | </head> | 19 | </head> |
3657 | 9 | <body> | 20 | <body> |
3658 | 10 | 21 | ||
3659 | @@ -15,10 +26,12 @@ | |||
3660 | 15 | <p class="code"> | 26 | <p class="code"> |
3661 | 16 | <code><b>java -jar proguardgui.jar</b> [-nosplash] </code>[<i>configuration_file</i>] | 27 | <code><b>java -jar proguardgui.jar</b> [-nosplash] </code>[<i>configuration_file</i>] |
3662 | 17 | </p> | 28 | </p> |
3667 | 18 | The GUI will pop up in a window. With the <code>-nosplash</code> option, you | 29 | Alternatively, the <code>bin</code> directory contains some short Linux and |
3668 | 19 | can switch off the short opening animation. If you have specified a ProGuard | 30 | Windows scripts containing this command. The GUI will pop up in a window. With |
3669 | 20 | configuration file, it will be loaded. The GUI works like a wizard. You can | 31 | the <code>-nosplash</code> option, you can switch off the short opening |
3670 | 21 | edit the configuration and execute ProGuard through a few tabs: | 32 | animation. If you have specified a ProGuard configuration file, it will be |
3671 | 33 | loaded. The GUI works like a wizard. You can edit the configuration and | ||
3672 | 34 | execute ProGuard through a few tabs: | ||
3673 | 22 | <p> | 35 | <p> |
3674 | 23 | 36 | ||
3675 | 24 | <table cellspacing="5" cellpadding="5"> | 37 | <table cellspacing="5" cellpadding="5"> |
3676 | @@ -57,8 +70,7 @@ | |||
3677 | 57 | href="introduction.html">Introduction</a> of this manual. | 70 | href="introduction.html">Introduction</a> of this manual. |
3678 | 58 | <p> | 71 | <p> |
3679 | 59 | 72 | ||
3682 | 60 | <a name="proguard"> </a> | 73 | <h2><a name="proguard">The ProGuard Tab</a></h2> |
3681 | 61 | <h2>The ProGuard Tab</h2> | ||
3683 | 62 | 74 | ||
3684 | 63 | The <i>ProGuard</i> tab presents a welcome message and one important button at | 75 | The <i>ProGuard</i> tab presents a welcome message and one important button at |
3685 | 64 | the bottom: | 76 | the bottom: |
3686 | @@ -75,8 +87,7 @@ | |||
3687 | 75 | creating a new configuration from scratch. | 87 | creating a new configuration from scratch. |
3688 | 76 | <p> | 88 | <p> |
3689 | 77 | 89 | ||
3692 | 78 | <a name="inputoutput"> </a> | 90 | <h2><a name="inputoutput">The Input/Output Tab</a></h2> |
3691 | 79 | <h2>The Input/Output Tab</h2> | ||
3693 | 80 | 91 | ||
3694 | 81 | The <i>Input/Output</i> tab contains two lists, respectively to specify the | 92 | The <i>Input/Output</i> tab contains two lists, respectively to specify the |
3695 | 82 | program jars (or wars, ears, zips, or directories), and the library jars (or | 93 | program jars (or wars, ears, zips, or directories), and the library jars (or |
3696 | @@ -88,12 +99,12 @@ | |||
3697 | 88 | entries specify the destinations to which the processed results will be | 99 | entries specify the destinations to which the processed results will be |
3698 | 89 | written. They are preceded by arrows, to distinguish them from input | 100 | written. They are preceded by arrows, to distinguish them from input |
3699 | 90 | entries. The results of each consecutive list of input entries will be | 101 | entries. The results of each consecutive list of input entries will be |
3701 | 91 | written to the subsequent consecutive list of output entries. | 102 | written to the subsequent consecutive list of output entries.</li> |
3702 | 92 | 103 | ||
3703 | 93 | <li>The library jars are not copied to the output jars; they contain class | 104 | <li>The library jars are not copied to the output jars; they contain class |
3704 | 94 | files that are used by class files in the program jars and that are | 105 | files that are used by class files in the program jars and that are |
3705 | 95 | necessary for correct processing. This list typically at least contains the | 106 | necessary for correct processing. This list typically at least contains the |
3707 | 96 | targeted Java runtime jar. | 107 | targeted Java runtime jar.</li> |
3708 | 97 | </ul> | 108 | </ul> |
3709 | 98 | <p> | 109 | <p> |
3710 | 99 | 110 | ||
3711 | @@ -145,16 +156,15 @@ | |||
3712 | 145 | 156 | ||
3713 | 146 | Corresponding configuration options: | 157 | Corresponding configuration options: |
3714 | 147 | <ul type="none"> | 158 | <ul type="none"> |
3720 | 148 | <li>-<a href="usage.html#injars">injars</a> | 159 | <li>-<a href="usage.html#injars">injars</a></li> |
3721 | 149 | <li>-<a href="usage.html#outjars">outjars</a> | 160 | <li>-<a href="usage.html#outjars">outjars</a></li> |
3722 | 150 | <li>-<a href="usage.html#libraryjars">libraryjars</a> | 161 | <li>-<a href="usage.html#libraryjars">libraryjars</a></li> |
3723 | 151 | <li><a href="usage.html#classpath"><i>class_path</i></a> | 162 | <li><a href="usage.html#classpath"><i>class_path</i></a></li> |
3724 | 152 | <li><a href="usage.html#filters"><i>filters</i></a> | 163 | <li><a href="usage.html#filters"><i>filters</i></a></li> |
3725 | 153 | </ul> | 164 | </ul> |
3726 | 154 | <p> | 165 | <p> |
3727 | 155 | 166 | ||
3730 | 156 | <a name="shrinking"> </a> | 167 | <h2><a name="shrinking">The Shrinking Tab</a></h2> |
3729 | 157 | <h2>The Shrinking Tab</h2> | ||
3731 | 158 | 168 | ||
3732 | 159 | The <i>Shrinking</i> tab presents a number of options that affect the | 169 | The <i>Shrinking</i> tab presents a number of options that affect the |
3733 | 160 | shrinking step. The basic options are followed by a few lists of classes and | 170 | shrinking step. The basic options are followed by a few lists of classes and |
3734 | @@ -224,41 +234,41 @@ | |||
3735 | 224 | <ul> | 234 | <ul> |
3736 | 225 | <li>The <b>Comments</b> text field allows to add optional comments to this | 235 | <li>The <b>Comments</b> text field allows to add optional comments to this |
3737 | 226 | entry. The comments will identify the entry in the list and they will | 236 | entry. The comments will identify the entry in the list and they will |
3739 | 227 | appear as comments in the configuration file. | 237 | appear as comments in the configuration file.</li> |
3740 | 228 | 238 | ||
3741 | 229 | <li>The <b>Keep</b> selection allows to specify whether you want to protect | 239 | <li>The <b>Keep</b> selection allows to specify whether you want to protect |
3742 | 230 | the specified classes and their specified class members, or just the | 240 | the specified classes and their specified class members, or just the |
3743 | 231 | specified class members from the specified classes, or the specified | 241 | specified class members from the specified classes, or the specified |
3744 | 232 | classes and the specified class members, if the class members are present. | 242 | classes and the specified class members, if the class members are present. |
3745 | 233 | Note that class members will only be protected if they are explicitly | 243 | Note that class members will only be protected if they are explicitly |
3747 | 234 | specified, even if only by means of a wildcard. | 244 | specified, even if only by means of a wildcard.</li> |
3748 | 235 | 245 | ||
3749 | 236 | <li>The <b>Allow</b> selection allows to specify whether you want to allow the | 246 | <li>The <b>Allow</b> selection allows to specify whether you want to allow the |
3750 | 237 | the specified classes and their specified class members to be shrunk, | 247 | the specified classes and their specified class members to be shrunk, |
3752 | 238 | optimized and/or obfuscated. | 248 | optimized and/or obfuscated.</li> |
3753 | 239 | 249 | ||
3754 | 240 | <li>The <b>Access</b> selections allows to specify constraints on the class or | 250 | <li>The <b>Access</b> selections allows to specify constraints on the class or |
3756 | 241 | classes, based on their access modifiers. | 251 | classes, based on their access modifiers.</li> |
3757 | 242 | 252 | ||
3758 | 243 | <li>The <b>Annotation</b> text field takes the fully-qualified name of an | 253 | <li>The <b>Annotation</b> text field takes the fully-qualified name of an |
3759 | 244 | annotation that is required for matching classes. The annotation name can | 254 | annotation that is required for matching classes. The annotation name can |
3760 | 245 | contain wildcards. This is an advanced option for defining <i>keep</i> | 255 | contain wildcards. This is an advanced option for defining <i>keep</i> |
3762 | 246 | annotations. | 256 | annotations.</li> |
3763 | 247 | 257 | ||
3764 | 248 | <li>The <b>Class</b> text field takes the fully-qualified name of the class or | 258 | <li>The <b>Class</b> text field takes the fully-qualified name of the class or |
3766 | 249 | classes. The class name can contain wildcards. | 259 | classes. The class name can contain wildcards.</li> |
3767 | 250 | 260 | ||
3768 | 251 | <li>The <b>Annotation</b> text field takes the fully-qualified name of an | 261 | <li>The <b>Annotation</b> text field takes the fully-qualified name of an |
3769 | 252 | annotation that is required for the class or interface that the above | 262 | annotation that is required for the class or interface that the above |
3770 | 253 | class must extend. The annotation name can contain wildcards. This is an | 263 | class must extend. The annotation name can contain wildcards. This is an |
3772 | 254 | advanced option for defining <i>keep</i> annotations. | 264 | advanced option for defining <i>keep</i> annotations.</li> |
3773 | 255 | 265 | ||
3774 | 256 | <li>The <b>Extends/implements class</b> text field takes the fully-qualified | 266 | <li>The <b>Extends/implements class</b> text field takes the fully-qualified |
3776 | 257 | name of the class or interface that the above classes must extend. | 267 | name of the class or interface that the above classes must extend.</li> |
3777 | 258 | 268 | ||
3778 | 259 | <li>The <b>Class members</b> list allows to specify a list of fields and | 269 | <li>The <b>Class members</b> list allows to specify a list of fields and |
3779 | 260 | methods to keep. It can be edited by means of a list of buttons on the | 270 | methods to keep. It can be edited by means of a list of buttons on the |
3781 | 261 | right-hand side. | 271 | right-hand side.</li> |
3782 | 262 | </ul> | 272 | </ul> |
3783 | 263 | <p> | 273 | <p> |
3784 | 264 | 274 | ||
3785 | @@ -270,18 +280,18 @@ | |||
3786 | 270 | 280 | ||
3787 | 271 | <ul> | 281 | <ul> |
3788 | 272 | <li>The <b>Access</b> selections allows to specify constraints on the field or | 282 | <li>The <b>Access</b> selections allows to specify constraints on the field or |
3790 | 273 | fields, based on their access modifiers. | 283 | fields, based on their access modifiers.</li> |
3791 | 274 | 284 | ||
3792 | 275 | <li>The <b>Annotation</b> text field takes the fully-qualified name of an | 285 | <li>The <b>Annotation</b> text field takes the fully-qualified name of an |
3793 | 276 | annotation that is required for matching fields. The annotation name can | 286 | annotation that is required for matching fields. The annotation name can |
3794 | 277 | contain wildcards. This is an advanced option for defining <i>keep</i> | 287 | contain wildcards. This is an advanced option for defining <i>keep</i> |
3796 | 278 | annotations. | 288 | annotations.</li> |
3797 | 279 | 289 | ||
3798 | 280 | <li>The <b>Return type</b> text field takes the fully-qualified type of the | 290 | <li>The <b>Return type</b> text field takes the fully-qualified type of the |
3800 | 281 | field or fields. The type can contain wildcards. | 291 | field or fields. The type can contain wildcards.</li> |
3801 | 282 | 292 | ||
3802 | 283 | <li>The <b>Name</b> text field takes the name of the field or fields. The field | 293 | <li>The <b>Name</b> text field takes the name of the field or fields. The field |
3804 | 284 | name can contain wildcards. | 294 | name can contain wildcards.</li> |
3805 | 285 | </ul> | 295 | </ul> |
3806 | 286 | <p> | 296 | <p> |
3807 | 287 | 297 | ||
3808 | @@ -293,36 +303,35 @@ | |||
3809 | 293 | 303 | ||
3810 | 294 | <ul> | 304 | <ul> |
3811 | 295 | <li>The <b>Access</b> selections allows to specify constraints on the method or | 305 | <li>The <b>Access</b> selections allows to specify constraints on the method or |
3813 | 296 | methods, based on their access modifiers. | 306 | methods, based on their access modifiers.</li> |
3814 | 297 | 307 | ||
3815 | 298 | <li>The <b>Annotation</b> text field takes the fully-qualified name of an | 308 | <li>The <b>Annotation</b> text field takes the fully-qualified name of an |
3816 | 299 | annotation that is required for matching methods. The annotation name can | 309 | annotation that is required for matching methods. The annotation name can |
3817 | 300 | contain wildcards. This is an advanced option for defining <i>keep</i> | 310 | contain wildcards. This is an advanced option for defining <i>keep</i> |
3819 | 301 | annotations. | 311 | annotations.</li> |
3820 | 302 | 312 | ||
3822 | 303 | <li>The <b>Return type</b> text field takes the fully-qualified type of the method or methods. The type can contain wildcards. | 313 | <li>The <b>Return type</b> text field takes the fully-qualified type of the method or methods. The type can contain wildcards.</li> |
3823 | 304 | 314 | ||
3824 | 305 | <li>The <b>Name</b> text field takes the name of the method or methods. The | 315 | <li>The <b>Name</b> text field takes the name of the method or methods. The |
3826 | 306 | method name can contain wildcards. | 316 | method name can contain wildcards.</li> |
3827 | 307 | 317 | ||
3828 | 308 | <li>The <b>Arguments</b> text field takes the comma-separated list of | 318 | <li>The <b>Arguments</b> text field takes the comma-separated list of |
3829 | 309 | fully-qualified method arguments. Each of these arguments can contain | 319 | fully-qualified method arguments. Each of these arguments can contain |
3831 | 310 | wildcards. | 320 | wildcards.</li> |
3832 | 311 | </ul> | 321 | </ul> |
3833 | 312 | <p> | 322 | <p> |
3834 | 313 | 323 | ||
3835 | 314 | Corresponding configuration options: | 324 | Corresponding configuration options: |
3836 | 315 | <ul type="none"> | 325 | <ul type="none"> |
3842 | 316 | <li>-<a href="usage.html#dontshrink">dontshrink</a> | 326 | <li>-<a href="usage.html#dontshrink">dontshrink</a></li> |
3843 | 317 | <li>-<a href="usage.html#printusage">printusage</a> | 327 | <li>-<a href="usage.html#printusage">printusage</a></li> |
3844 | 318 | <li>-<a href="usage.html#keep">keep</a> | 328 | <li>-<a href="usage.html#keep">keep</a></li> |
3845 | 319 | <li>-<a href="usage.html#keepclassmembers">keepclassmembers</a> | 329 | <li>-<a href="usage.html#keepclassmembers">keepclassmembers</a></li> |
3846 | 320 | <li>-<a href="usage.html#keepclasseswithmembers">keepclasseswithmembers</a> | 330 | <li>-<a href="usage.html#keepclasseswithmembers">keepclasseswithmembers</a></li> |
3847 | 321 | </ul> | 331 | </ul> |
3848 | 322 | <p> | 332 | <p> |
3849 | 323 | 333 | ||
3852 | 324 | <a name="obfuscation"> </a> | 334 | <h2><a name="obfuscation">The Obfuscation Tab</a></h2> |
3851 | 325 | <h2>The Obfuscation Tab</h2> | ||
3853 | 326 | 335 | ||
3854 | 327 | The <i>Obfuscation</i> tab presents a number of options that affect the | 336 | The <i>Obfuscation</i> tab presents a number of options that affect the |
3855 | 328 | obfuscation step. The basic options are followed by a few lists of classes and | 337 | obfuscation step. The basic options are followed by a few lists of classes and |
3856 | @@ -336,32 +345,32 @@ | |||
3857 | 336 | 345 | ||
3858 | 337 | Corresponding configuration options: | 346 | Corresponding configuration options: |
3859 | 338 | <ul type="none"> | 347 | <ul type="none"> |
3881 | 339 | <li>-<a href="usage.html#dontobfuscate">dontobfuscate</a> | 348 | <li>-<a href="usage.html#dontobfuscate">dontobfuscate</a></li> |
3882 | 340 | <li>-<a href="usage.html#printmapping">printmapping</a> | 349 | <li>-<a href="usage.html#printmapping">printmapping</a></li> |
3883 | 341 | <li>-<a href="usage.html#applymapping">applymapping</a> | 350 | <li>-<a href="usage.html#applymapping">applymapping</a></li> |
3884 | 342 | <li>-<a href="usage.html#obfuscationdictionary">obfuscationdictionary</a> | 351 | <li>-<a href="usage.html#obfuscationdictionary">obfuscationdictionary</a></li> |
3885 | 343 | <li>-<a href="usage.html#classobfuscationdictionary">classobfuscationdictionary</a> | 352 | <li>-<a href="usage.html#classobfuscationdictionary">classobfuscationdictionary</a></li> |
3886 | 344 | <li>-<a href="usage.html#packageobfuscationdictionary">packageobfuscationdictionary</a> | 353 | <li>-<a href="usage.html#packageobfuscationdictionary">packageobfuscationdictionary</a></li> |
3887 | 345 | <li>-<a href="usage.html#overloadaggressively">overloadaggressively</a> | 354 | <li>-<a href="usage.html#overloadaggressively">overloadaggressively</a></li> |
3888 | 346 | <li>-<a href="usage.html#useuniqueclassmembernames">useuniqueclassmembernames</a> | 355 | <li>-<a href="usage.html#useuniqueclassmembernames">useuniqueclassmembernames</a></li> |
3889 | 347 | <li>-<a href="usage.html#dontusemixedcaseclassnames">dontusemixedcaseclassnames</a> | 356 | <li>-<a href="usage.html#dontusemixedcaseclassnames">dontusemixedcaseclassnames</a></li> |
3890 | 348 | <li>-<a href="usage.html#keeppackagenames">keeppackagenames</a> | 357 | <li>-<a href="usage.html#keeppackagenames">keeppackagenames</a></li> |
3891 | 349 | <li>-<a href="usage.html#flattenpackagehierarchy">flattenpackagehierarchy</a> | 358 | <li>-<a href="usage.html#flattenpackagehierarchy">flattenpackagehierarchy</a></li> |
3892 | 350 | <li>-<a href="usage.html#repackageclasses">repackageclasses</a> | 359 | <li>-<a href="usage.html#repackageclasses">repackageclasses</a></li> |
3893 | 351 | <li>-<a href="usage.html#keepattributes">keepattributes</a> | 360 | <li>-<a href="usage.html#keepattributes">keepattributes</a></li> |
3894 | 352 | <li>-<a href="usage.html#renamesourcefileattribute">renamesourcefileattribute</a> | 361 | <li>-<a href="usage.html#keepparameternames">keepparameternames</a></li> |
3895 | 353 | <li>-<a href="usage.html#adaptclassstrings">adaptclassstrings</a> | 362 | <li>-<a href="usage.html#renamesourcefileattribute">renamesourcefileattribute</a></li> |
3896 | 354 | <li>-<a href="usage.html#adaptresourcefilenames">adaptresourcefilenames</a> | 363 | <li>-<a href="usage.html#adaptclassstrings">adaptclassstrings</a></li> |
3897 | 355 | <li>-<a href="usage.html#adaptresourcefilecontents">adaptresourcefilecontents</a> | 364 | <li>-<a href="usage.html#adaptresourcefilenames">adaptresourcefilenames</a></li> |
3898 | 356 | <li>-<a href="usage.html#keepnames">keepnames</a> | 365 | <li>-<a href="usage.html#adaptresourcefilecontents">adaptresourcefilecontents</a></li> |
3899 | 357 | <li>-<a href="usage.html#keepclassmembernames">keepclassmembernames</a> | 366 | <li>-<a href="usage.html#keepnames">keepnames</a></li> |
3900 | 358 | <li>-<a href="usage.html#keepclasseswithmembernames">keepclasseswithmembernames</a> | 367 | <li>-<a href="usage.html#keepclassmembernames">keepclassmembernames</a></li> |
3901 | 359 | <li><a href="usage.html#classspecification"><i>class_specification</i></a> | 368 | <li>-<a href="usage.html#keepclasseswithmembernames">keepclasseswithmembernames</a></li> |
3902 | 369 | <li><a href="usage.html#classspecification"><i>class_specification</i></a></li> | ||
3903 | 360 | </ul> | 370 | </ul> |
3904 | 361 | <p> | 371 | <p> |
3905 | 362 | 372 | ||
3908 | 363 | <a name="optimization"> </a> | 373 | <h2><a name="optimization">The Optimization Tab</a></h2> |
3907 | 364 | <h2>The Optimization Tab</h2> | ||
3909 | 365 | 374 | ||
3910 | 366 | The <i>Optimization</i> tab presents a number of options that affect the | 375 | The <i>Optimization</i> tab presents a number of options that affect the |
3911 | 367 | optimization step. The basic options are followed by a few lists of class | 376 | optimization step. The basic options are followed by a few lists of class |
3912 | @@ -375,18 +384,17 @@ | |||
3913 | 375 | 384 | ||
3914 | 376 | Corresponding configuration options: | 385 | Corresponding configuration options: |
3915 | 377 | <ul type="none"> | 386 | <ul type="none"> |
3923 | 378 | <li>-<a href="usage.html#dontoptimize">dontoptimize</a> | 387 | <li>-<a href="usage.html#dontoptimize">dontoptimize</a></li> |
3924 | 379 | <li>-<a href="usage.html#optimizations">optimizations</a> | 388 | <li>-<a href="usage.html#optimizations">optimizations</a></li> |
3925 | 380 | <li>-<a href="usage.html#optimizationpasses">optimizationpasses</a> | 389 | <li>-<a href="usage.html#optimizationpasses">optimizationpasses</a></li> |
3926 | 381 | <li>-<a href="usage.html#allowaccessmodification">allowaccessmodification</a> | 390 | <li>-<a href="usage.html#allowaccessmodification">allowaccessmodification</a></li> |
3927 | 382 | <li>-<a href="usage.html#mergeinterfacesaggressively">mergeinterfacesaggressively</a> | 391 | <li>-<a href="usage.html#mergeinterfacesaggressively">mergeinterfacesaggressively</a></li> |
3928 | 383 | <li>-<a href="usage.html#assumenosideeffects">assumenosideeffects</a> | 392 | <li>-<a href="usage.html#assumenosideeffects">assumenosideeffects</a></li> |
3929 | 384 | <li><a href="usage.html#classspecification"><i>class_specification</i></a> | 393 | <li><a href="usage.html#classspecification"><i>class_specification</i></a></li> |
3930 | 385 | </ul> | 394 | </ul> |
3931 | 386 | <p> | 395 | <p> |
3932 | 387 | 396 | ||
3935 | 388 | <a name="information"> </a> | 397 | <h2><a name="information">The Information Tab</a></h2> |
3934 | 389 | <h2>The Information Tab</h2> | ||
3936 | 390 | 398 | ||
3937 | 391 | The <i>Information</i> tab presents a number of options for preverification | 399 | The <i>Information</i> tab presents a number of options for preverification |
3938 | 392 | and targeting, and for the information that ProGuard returns when processing | 400 | and targeting, and for the information that ProGuard returns when processing |
3939 | @@ -396,26 +404,26 @@ | |||
3940 | 396 | 404 | ||
3941 | 397 | Corresponding configuration options: | 405 | Corresponding configuration options: |
3942 | 398 | <ul type="none"> | 406 | <ul type="none"> |
3958 | 399 | <li>-<a href="usage.html#dontpreverify">dontpreverify</a> | 407 | <li>-<a href="usage.html#dontpreverify">dontpreverify</a></li> |
3959 | 400 | <li>-<a href="usage.html#microedition">microedition</a> | 408 | <li>-<a href="usage.html#microedition">microedition</a></li> |
3960 | 401 | <li>-<a href="usage.html#target">target</a> | 409 | <li>-<a href="usage.html#target">target</a></li> |
3961 | 402 | <li>-<a href="usage.html#verbose">verbose</a> | 410 | <li>-<a href="usage.html#verbose">verbose</a></li> |
3962 | 403 | <li>-<a href="usage.html#dontnote">dontnote</a> | 411 | <li>-<a href="usage.html#dontnote">dontnote</a></li> |
3963 | 404 | <li>-<a href="usage.html#dontwarn">dontwarn</a> | 412 | <li>-<a href="usage.html#dontwarn">dontwarn</a></li> |
3964 | 405 | <li>-<a href="usage.html#ignorewarnings">ignorewarnings</a> | 413 | <li>-<a href="usage.html#ignorewarnings">ignorewarnings</a></li> |
3965 | 406 | <li>-<a href="usage.html#dontskipnonpubliclibraryclasses">dontskipnonpubliclibraryclasses</a> | 414 | <li>-<a href="usage.html#skipnonpubliclibraryclasses">skipnonpubliclibraryclasses</a></li> |
3966 | 407 | <li>-<a href="usage.html#dontskipnonpubliclibraryclassmembers">dontskipnonpubliclibraryclassmembers</a> | 415 | <li>-<a href="usage.html#dontskipnonpubliclibraryclasses">dontskipnonpubliclibraryclasses</a></li> |
3967 | 408 | <li>-<a href="usage.html#keepdirectories">keepdirectories</a> | 416 | <li>-<a href="usage.html#dontskipnonpubliclibraryclassmembers">dontskipnonpubliclibraryclassmembers</a></li> |
3968 | 409 | <li>-<a href="usage.html#forceprocessing">forceprocessing</a> | 417 | <li>-<a href="usage.html#keepdirectories">keepdirectories</a></li> |
3969 | 410 | <li>-<a href="usage.html#printseeds">printseeds</a> | 418 | <li>-<a href="usage.html#forceprocessing">forceprocessing</a></li> |
3970 | 411 | <li>-<a href="usage.html#printconfiguration">printconfiguration</a> | 419 | <li>-<a href="usage.html#printseeds">printseeds</a></li> |
3971 | 412 | <li>-<a href="usage.html#dump">dump</a> | 420 | <li>-<a href="usage.html#printconfiguration">printconfiguration</a></li> |
3972 | 413 | <li>-<a href="usage.html#whyareyoukeeping">whyareyoukeeping</a> | 421 | <li>-<a href="usage.html#dump">dump</a></li> |
3973 | 422 | <li>-<a href="usage.html#whyareyoukeeping">whyareyoukeeping</a></li> | ||
3974 | 414 | </ul> | 423 | </ul> |
3975 | 415 | <p> | 424 | <p> |
3976 | 416 | 425 | ||
3979 | 417 | <a name="process"> </a> | 426 | <h2><a name="process">The Process Tab</a></h2> |
3978 | 418 | <h2>The Process Tab</h2> | ||
3980 | 419 | 427 | ||
3981 | 420 | The <i>Process</i> tab has an output console for displaying the configuration | 428 | The <i>Process</i> tab has an output console for displaying the configuration |
3982 | 421 | and the messages while processing. There are three important buttons at the | 429 | and the messages while processing. There are three important buttons at the |
3983 | @@ -433,8 +441,7 @@ | |||
3984 | 433 | </table> | 441 | </table> |
3985 | 434 | <p> | 442 | <p> |
3986 | 435 | 443 | ||
3989 | 436 | <a name="retrace"> </a> | 444 | <h2><a name="retrace">The ReTrace Tab</a></h2> |
3988 | 437 | <h2>The ReTrace Tab</h2> | ||
3990 | 438 | 445 | ||
3991 | 439 | The <i>ReTrace</i> tab has a panel with a few settings, an input text area for | 446 | The <i>ReTrace</i> tab has a panel with a few settings, an input text area for |
3992 | 440 | the obfuscated stack trace, and an output console to view the de-obfuscated | 447 | the obfuscated stack trace, and an output console to view the de-obfuscated |
3993 | @@ -442,16 +449,16 @@ | |||
3994 | 442 | 449 | ||
3995 | 443 | <ul> | 450 | <ul> |
3996 | 444 | <li>The <b>Verbose</b> check box in the settings panel allows to toggle between | 451 | <li>The <b>Verbose</b> check box in the settings panel allows to toggle between |
3998 | 445 | normal mode and verbose mode. | 452 | normal mode and verbose mode.</li> |
3999 | 446 | 453 | ||
4000 | 447 | <li>The <b>Mapping file</b> text field takes the name of the required mapping | 454 | <li>The <b>Mapping file</b> text field takes the name of the required mapping |
4001 | 448 | file that ProGuard wrote while processing the original code. The file name | 455 | file that ProGuard wrote while processing the original code. The file name |
4002 | 449 | can be entered manually or by means of the <b>Browse...</b> button that | 456 | can be entered manually or by means of the <b>Browse...</b> button that |
4004 | 450 | opens a file chooser. | 457 | opens a file chooser.</li> |
4005 | 451 | 458 | ||
4006 | 452 | <li>The <b>Obfuscated stack trace</b> text area allows to enter the stack | 459 | <li>The <b>Obfuscated stack trace</b> text area allows to enter the stack |
4007 | 453 | trace, typically by copying and pasting it from elsewhere. Alternatively, | 460 | trace, typically by copying and pasting it from elsewhere. Alternatively, |
4009 | 454 | it can be loaded from a file by means of the load button below. | 461 | it can be loaded from a file by means of the load button below.</li> |
4010 | 455 | </ul> | 462 | </ul> |
4011 | 456 | 463 | ||
4012 | 457 | There are two buttons at the bottom: | 464 | There are two buttons at the bottom: |
4013 | @@ -463,12 +470,12 @@ | |||
4014 | 463 | <tr><td class="button">ReTrace!</td> | 470 | <tr><td class="button">ReTrace!</td> |
4015 | 464 | <td>executes ReTrace with the current settings.</td></tr> | 471 | <td>executes ReTrace with the current settings.</td></tr> |
4016 | 465 | </table> | 472 | </table> |
4017 | 466 | <p> | ||
4018 | 467 | 473 | ||
4020 | 468 | <hr> | 474 | <hr /> |
4021 | 475 | <noscript><div><a target="_top" href="../index.html" class="button">Show menu</a></div></noscript> | ||
4022 | 469 | <address> | 476 | <address> |
4025 | 470 | Copyright © 2002-2009 | 477 | Copyright © 2002-2012 |
4026 | 471 | <a href="http://www.graphics.cornell.edu/~eric/">Eric Lafortune</a>. | 478 | <a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>. |
4027 | 472 | </address> | 479 | </address> |
4028 | 473 | </body> | 480 | </body> |
4029 | 474 | </html> | 481 | </html> |
4030 | 475 | 482 | ||
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 @@ | |||
4036 | 1 | <!doctype html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> | 1 | <!doctype html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> |
4037 | 2 | <html> | 2 | <html> |
4038 | 3 | <head> | 3 | <head> |
4039 | 4 | <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"> | 4 | <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"> |
4040 | 5 | <meta http-equiv="content-style-type" content="text/css"> | 5 | <meta http-equiv="content-style-type" content="text/css"> |
4041 | 6 | <link rel="stylesheet" type="text/css" href="style.css"> | 6 | <link rel="stylesheet" type="text/css" href="style.css"> |
4042 | 7 | <title>ProGuard Manual</title> | 7 | <title>ProGuard Manual</title> |
4043 | 8 | <script type="text/javascript" language="JavaScript"> | ||
4044 | 9 | <!-- | ||
4045 | 10 | if (window.self==window.top) | ||
4046 | 11 | window.top.location.replace("../index.html#"+window.location.pathname+window.location.hash); | ||
4047 | 12 | else { | ||
4048 | 13 | var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), ""); | ||
4049 | 14 | if (window.top.location.hash!=hash) | ||
4050 | 15 | window.top.location.hash=hash; | ||
4051 | 16 | } | ||
4052 | 17 | //--> | ||
4053 | 18 | </script> | ||
4054 | 8 | </head> | 19 | </head> |
4055 | 9 | <body> | 20 | <body> |
4056 | 10 | 21 | ||
4057 | 11 | <h2>ProGuard</h2> | 22 | <h2>ProGuard</h2> |
4058 | 12 | 23 | ||
4059 | 13 | <ol> | 24 | <ol> |
4069 | 14 | <li><a href="introduction.html">Introduction</a> | 25 | <li><a href="introduction.html">Introduction</a></li> |
4070 | 15 | <li><a href="usage.html">Usage</a> | 26 | <li><a href="usage.html">Usage</a></li> |
4071 | 16 | <li><a href="limitations.html">Limitations</a> | 27 | <li><a href="limitations.html">Limitations</a></li> |
4072 | 17 | <li><a href="examples.html">Examples</a> | 28 | <li><a href="examples.html">Examples</a></li> |
4073 | 18 | <li><a href="troubleshooting.html">Troubleshooting</a> | 29 | <li><a href="troubleshooting.html">Troubleshooting</a></li> |
4074 | 19 | <li><a href="refcard.html">Reference Card</a> | 30 | <li><a href="refcard.html">Reference Card</a></li> |
4075 | 20 | <li><a href="gui.html">Graphical User Interface</a> | 31 | <li><a href="gui.html">Graphical User Interface</a></li> |
4076 | 21 | <li><a href="ant.html">Ant Task</a> | 32 | <li><a href="ant.html">Ant Task</a></li> |
4077 | 22 | <li><a href="wtk.html">JME Wireless Toolkit Integration</a> | 33 | <li><a href="wtk.html">JME Wireless Toolkit Integration</a></li> |
4078 | 23 | </ol> | 34 | </ol> |
4079 | 24 | 35 | ||
4080 | 25 | <h2>ReTrace</h2> | 36 | <h2>ReTrace</h2> |
4081 | 26 | 37 | ||
4082 | 27 | <ol> | 38 | <ol> |
4086 | 28 | <li><a href="retrace/introduction.html">Introduction</a> | 39 | <li><a href="retrace/introduction.html">Introduction</a></li> |
4087 | 29 | <li><a href="retrace/usage.html">Usage</a> | 40 | <li><a href="retrace/usage.html">Usage</a></li> |
4088 | 30 | <li><a href="retrace/examples.html">Examples</a> | 41 | <li><a href="retrace/examples.html">Examples</a></li> |
4089 | 31 | </ol> | 42 | </ol> |
4090 | 32 | 43 | ||
4092 | 33 | <hr> | 44 | <hr /> |
4093 | 45 | <noscript><div><a target="_top" href="../index.html" class="button">Show menu</a></div></noscript> | ||
4094 | 34 | <address> | 46 | <address> |
4097 | 35 | Copyright © 2002-2009 | 47 | Copyright © 2002-2012 |
4098 | 36 | <a href="http://www.graphics.cornell.edu/~eric/">Eric Lafortune</a>. | 48 | <a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>. |
4099 | 37 | </address> | 49 | </address> |
4100 | 38 | </body> | 50 | </body> |
4101 | 39 | </html> | 51 | </html> |
4102 | 40 | 52 | ||
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 @@ | |||
4108 | 1 | <!doctype html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> | 1 | <!doctype html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> |
4109 | 2 | <html> | 2 | <html> |
4110 | 3 | <head> | 3 | <head> |
4111 | 4 | <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"> | 4 | <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"> |
4112 | 5 | <meta http-equiv="content-style-type" content="text/css"> | 5 | <meta http-equiv="content-style-type" content="text/css"> |
4113 | 6 | <link rel="stylesheet" type="text/css" href="style.css"> | 6 | <link rel="stylesheet" type="text/css" href="style.css"> |
4114 | 7 | <title>ProGuard Introduction</title> | 7 | <title>ProGuard Introduction</title> |
4115 | 8 | <script type="text/javascript" language="JavaScript"> | ||
4116 | 9 | <!-- | ||
4117 | 10 | if (window.self==window.top) | ||
4118 | 11 | window.top.location.replace("../index.html#"+window.location.pathname+window.location.hash); | ||
4119 | 12 | else { | ||
4120 | 13 | var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), ""); | ||
4121 | 14 | if (window.top.location.hash!=hash) | ||
4122 | 15 | window.top.location.hash=hash; | ||
4123 | 16 | } | ||
4124 | 17 | //--> | ||
4125 | 18 | </script> | ||
4126 | 8 | </head> | 19 | </head> |
4127 | 9 | <body> | 20 | <body> |
4128 | 10 | 21 | ||
4129 | @@ -17,8 +28,7 @@ | |||
4130 | 17 | fields, and methods using short meaningless names. These first steps make the | 28 | fields, and methods using short meaningless names. These first steps make the |
4131 | 18 | code base smaller, more efficient, and harder to reverse-engineer. The final | 29 | code base smaller, more efficient, and harder to reverse-engineer. The final |
4132 | 19 | preverification step adds preverification information to the classes, which is | 30 | preverification step adds preverification information to the classes, which is |
4135 | 20 | required for Java Micro Edition or which improves the start-up time for Java | 31 | required for Java Micro Edition and for Java 6 and higher. |
4134 | 21 | 6. | ||
4136 | 22 | <p> | 32 | <p> |
4137 | 23 | Each of these steps is optional. For instance, ProGuard can also be used to | 33 | Each of these steps is optional. For instance, ProGuard can also be used to |
4138 | 24 | just list dead code in an application, or to preverify class files for | 34 | just list dead code in an application, or to preverify class files for |
4139 | @@ -62,13 +72,13 @@ | |||
4140 | 62 | </table> | 72 | </table> |
4141 | 63 | <p> | 73 | <p> |
4142 | 64 | 74 | ||
4150 | 65 | ProGuard typically reads the <b>input jars</b> (or wars, ears, zips, or | 75 | ProGuard first reads the <b>input jars</b> (or wars, ears, zips, or |
4151 | 66 | directories). It then shrinks, optimizes, obfuscates, and preverifies them. | 76 | directories). It then subsequently shrinks, optimizes, obfuscates, and |
4152 | 67 | Optionally, multiple optimization passes can be performed, each typically | 77 | preverifies them. You can optionally let ProGuard perform multiple |
4153 | 68 | followed by another shrinking step. ProGuard writes the processed results to | 78 | optimization passes. ProGuard writes the processed results to one or |
4154 | 69 | one or more <b>output jars</b> (or wars, ears, zips, or directories). The | 79 | more <b>output jars</b> (or wars, ears, zips, or directories). The input may |
4155 | 70 | input may contain resource files, whose names and contents can optionally be | 80 | contain resource files, whose names and contents can optionally be updated to |
4156 | 71 | updated to reflect the obfuscated class names. | 81 | reflect the obfuscated class names. |
4157 | 72 | <p> | 82 | <p> |
4158 | 73 | ProGuard requires the <b>library jars</b> (or wars, ears, zips, or | 83 | ProGuard requires the <b>library jars</b> (or wars, ears, zips, or |
4159 | 74 | directories) of the input jars to be specified. These are essentially the | 84 | directories) of the input jars to be specified. These are essentially the |
4160 | @@ -76,63 +86,69 @@ | |||
4161 | 76 | reconstruct the class dependencies that are necessary for proper processing. | 86 | reconstruct the class dependencies that are necessary for proper processing. |
4162 | 77 | The library jars themselves always remain unchanged. You should still put them | 87 | The library jars themselves always remain unchanged. You should still put them |
4163 | 78 | in the class path of your final application. | 88 | in the class path of your final application. |
4165 | 79 | <p> | 89 | |
4166 | 90 | <h3>Entry points</h3> | ||
4167 | 91 | |||
4168 | 80 | In order to determine which code has to be preserved and which code can be | 92 | In order to determine which code has to be preserved and which code can be |
4169 | 81 | discarded or obfuscated, you have to specify one or more <i>entry points</i> to | 93 | discarded or obfuscated, you have to specify one or more <i>entry points</i> to |
4170 | 82 | your code. These entry points are typically classes with main methods, applets, | 94 | your code. These entry points are typically classes with main methods, applets, |
4172 | 83 | midlets, etc. | 95 | midlets, activities, etc. |
4173 | 84 | <ul> | 96 | <ul> |
4174 | 85 | <li>In the <b>shrinking step</b>, ProGuard starts from these seeds and | 97 | <li>In the <b>shrinking step</b>, ProGuard starts from these seeds and |
4175 | 86 | recursively determines which classes and class members are used. All other | 98 | recursively determines which classes and class members are used. All other |
4177 | 87 | classes and class members are discarded. | 99 | classes and class members are discarded.</li> |
4178 | 88 | 100 | ||
4179 | 89 | <li>In the <b>optimization step</b>, ProGuard further optimizes the code. | 101 | <li>In the <b>optimization step</b>, ProGuard further optimizes the code. |
4180 | 90 | Among other optimizations, classes and methods that are not entry points | 102 | Among other optimizations, classes and methods that are not entry points |
4181 | 91 | can be made private, static, or final, unused parameters can be removed, | 103 | can be made private, static, or final, unused parameters can be removed, |
4183 | 92 | and some methods may be inlined. | 104 | and some methods may be inlined.</li> |
4184 | 93 | 105 | ||
4185 | 94 | <li>In the <b>obfuscation step</b>, ProGuard renames classes and class members | 106 | <li>In the <b>obfuscation step</b>, ProGuard renames classes and class members |
4186 | 95 | that are not entry points. In this entire process, keeping the entry | 107 | that are not entry points. In this entire process, keeping the entry |
4188 | 96 | points ensures that they can still be accessed by their original names. | 108 | points ensures that they can still be accessed by their original names.</li> |
4189 | 97 | 109 | ||
4190 | 98 | <li>The <b>preverification step</b> is the only step that doesn't have to know | 110 | <li>The <b>preverification step</b> is the only step that doesn't have to know |
4192 | 99 | the entry points. | 111 | the entry points.</li> |
4193 | 100 | </ul> | 112 | </ul> |
4194 | 101 | <p> | 113 | <p> |
4195 | 102 | The <a href="usage.html">Usage section</a> of this manual describes the | 114 | The <a href="usage.html">Usage section</a> of this manual describes the |
4196 | 103 | necessary <a href="usage.html#keepoptions"><code>-keep</code> options</a> and | 115 | necessary <a href="usage.html#keepoptions"><code>-keep</code> options</a> and |
4197 | 104 | the <a href="examples.html">Examples section</a> provides plenty of examples. | 116 | the <a href="examples.html">Examples section</a> provides plenty of examples. |
4198 | 105 | 117 | ||
4200 | 106 | <h3>Introspection</h3> | 118 | <h3>Reflection</h3> |
4201 | 107 | 119 | ||
4210 | 108 | Introspection presents particular problems for any automatic processing of | 120 | Reflection and introspection present particular problems for any automatic |
4211 | 109 | code. In ProGuard, classes or class members in your code that are created or | 121 | processing of code. In ProGuard, classes or class members in your code that |
4212 | 110 | invoked dynamically (that is, by name) have to be specified as entry points | 122 | are created or invoked dynamically (that is, by name) have to be specified as |
4213 | 111 | too. For example, <code>Class.forName()</code> constructs may refer to any | 123 | entry points too. For example, <code>Class.forName()</code> constructs may |
4214 | 112 | class at run-time. It is generally impossible to foresee which classes have to | 124 | refer to any class at run-time. It is generally impossible to compute which |
4215 | 113 | be preserved (with their original names), since the class names might be read | 125 | classes have to be preserved (with their original names), since the class |
4216 | 114 | from a configuration file, for instance. You therefore have to specify them in | 126 | names might be read from a configuration file, for instance. You therefore |
4217 | 115 | your ProGuard configuration, with the same simple <code>-keep</code> options. | 127 | have to specify them in your ProGuard configuration, with the same |
4218 | 128 | simple <code>-keep</code> options. | ||
4219 | 116 | <p> | 129 | <p> |
4220 | 117 | However, ProGuard will already detect and handle the following cases for you: | 130 | However, ProGuard will already detect and handle the following cases for you: |
4221 | 118 | 131 | ||
4222 | 119 | <ul> | 132 | <ul> |
4233 | 120 | <li><code>Class.forName("SomeClass")</code> | 133 | <li><code>Class.forName("SomeClass")</code></li> |
4234 | 121 | <li><code>SomeClass.class</code> | 134 | <li><code>SomeClass.class</code></li> |
4235 | 122 | <li><code>SomeClass.class.getField("someField")</code> | 135 | <li><code>SomeClass.class.getField("someField")</code></li> |
4236 | 123 | <li><code>SomeClass.class.getDeclaredField("someField")</code> | 136 | <li><code>SomeClass.class.getDeclaredField("someField")</code></li> |
4237 | 124 | <li><code>SomeClass.class.getMethod("someMethod", new Class[] {})</code> | 137 | <li><code>SomeClass.class.getMethod("someMethod", new Class[] {})</code></li> |
4238 | 125 | <li><code>SomeClass.class.getMethod("someMethod", new Class[] { A.class })</code> | 138 | <li><code>SomeClass.class.getMethod("someMethod", new Class[] { A.class })</code></li> |
4239 | 126 | <li><code>SomeClass.class.getMethod("someMethod", new Class[] { A.class, B.class })</code> | 139 | <li><code>SomeClass.class.getMethod("someMethod", new Class[] { A.class, B.class })</code></li> |
4240 | 127 | <li><code>SomeClass.class.getDeclaredMethod("someMethod", new Class[] {})</code> | 140 | <li><code>SomeClass.class.getDeclaredMethod("someMethod", new Class[] {})</code></li> |
4241 | 128 | <li><code>SomeClass.class.getDeclaredMethod("someMethod", new Class[] { A.class })</code> | 141 | <li><code>SomeClass.class.getDeclaredMethod("someMethod", new Class[] { A.class })</code></li> |
4242 | 129 | <li><code>SomeClass.class.getDeclaredMethod("someMethod", new Class[] { A.class, B.class })</code> | 142 | <li><code>SomeClass.class.getDeclaredMethod("someMethod", new Class[] { A.class, B.class })</code></li> |
4243 | 143 | <li><code>AtomicIntegerFieldUpdater.newUpdater(SomeClass.class, "someField")</code></li> | ||
4244 | 144 | <li><code>AtomicLongFieldUpdater.newUpdater(SomeClass.class, "someField")</code></li> | ||
4245 | 145 | <li><code>AtomicReferenceFieldUpdater.newUpdater(SomeClass.class, SomeType.class, "someField")</code></li> | ||
4246 | 130 | </ul> | 146 | </ul> |
4247 | 131 | 147 | ||
4248 | 132 | The names of the classes and class members may of course be different, but the | 148 | The names of the classes and class members may of course be different, but the |
4249 | 133 | constructs should be literally the same for ProGuard to recognize them. The | 149 | constructs should be literally the same for ProGuard to recognize them. The |
4250 | 134 | referenced classes and class members are preserved in the shrinking phase, and | 150 | referenced classes and class members are preserved in the shrinking phase, and |
4252 | 135 | the string arguments are properly replaced in the obfuscation phase. | 151 | the string arguments are properly updated in the obfuscation phase. |
4253 | 136 | <p> | 152 | <p> |
4254 | 137 | Furthermore, ProGuard will offer some suggestions if keeping some classes or | 153 | Furthermore, ProGuard will offer some suggestions if keeping some classes or |
4255 | 138 | class members appears necessary. For example, ProGuard will note constructs | 154 | class members appears necessary. For example, ProGuard will note constructs |
4256 | @@ -142,15 +158,15 @@ | |||
4257 | 142 | configuration accordingly. | 158 | configuration accordingly. |
4258 | 143 | <p> | 159 | <p> |
4259 | 144 | For proper results, you should at least be somewhat familiar with the code | 160 | For proper results, you should at least be somewhat familiar with the code |
4261 | 145 | that you are processing. Obfuscating code that performs a lot of introspection | 161 | that you are processing. Obfuscating code that performs a lot of reflection |
4262 | 146 | may require trial and error, especially without the necessary information | 162 | may require trial and error, especially without the necessary information |
4263 | 147 | about the internals of the code. | 163 | about the internals of the code. |
4264 | 148 | <p> | ||
4265 | 149 | 164 | ||
4267 | 150 | <hr> | 165 | <hr /> |
4268 | 166 | <noscript><div><a target="_top" href="../index.html" class="button">Show menu</a></div></noscript> | ||
4269 | 151 | <address> | 167 | <address> |
4272 | 152 | Copyright © 2002-2009 | 168 | Copyright © 2002-2012 |
4273 | 153 | <a href="http://www.graphics.cornell.edu/~eric/">Eric Lafortune</a>. | 169 | <a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>. |
4274 | 154 | </address> | 170 | </address> |
4275 | 155 | </body> | 171 | </body> |
4276 | 156 | </html> | 172 | </html> |
4277 | 157 | 173 | ||
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 @@ | |||
4283 | 1 | <!doctype html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> | 1 | <!doctype html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> |
4284 | 2 | <html> | 2 | <html> |
4285 | 3 | <head> | 3 | <head> |
4286 | 4 | <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"> | 4 | <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"> |
4287 | 5 | <meta http-equiv="content-style-type" content="text/css"> | 5 | <meta http-equiv="content-style-type" content="text/css"> |
4288 | 6 | <link rel="stylesheet" type="text/css" href="style.css"> | 6 | <link rel="stylesheet" type="text/css" href="style.css"> |
4289 | 7 | <title>ProGuard Limitations</title> | 7 | <title>ProGuard Limitations</title> |
4290 | 8 | <script type="text/javascript" language="JavaScript"> | ||
4291 | 9 | <!-- | ||
4292 | 10 | if (window.self==window.top) | ||
4293 | 11 | window.top.location.replace("../index.html#"+window.location.pathname+window.location.hash); | ||
4294 | 12 | else { | ||
4295 | 13 | var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), ""); | ||
4296 | 14 | if (window.top.location.hash!=hash) | ||
4297 | 15 | window.top.location.hash=hash; | ||
4298 | 16 | } | ||
4299 | 17 | //--> | ||
4300 | 18 | </script> | ||
4301 | 8 | </head> | 19 | </head> |
4302 | 9 | <body> | 20 | <body> |
4303 | 10 | 21 | ||
4304 | @@ -13,16 +24,7 @@ | |||
4305 | 13 | When using ProGuard, you should be aware of a few technical issues, all of | 24 | When using ProGuard, you should be aware of a few technical issues, all of |
4306 | 14 | which are easily avoided or resolved: | 25 | which are easily avoided or resolved: |
4307 | 15 | <p> | 26 | <p> |
4318 | 16 | <ul> | 27 | <ul class="spacious"> |
4309 | 17 | |||
4310 | 18 | <li>For efficiency, ProGuard always ignores any <b>private or package visible | ||
4311 | 19 | library classes</b> while reading library jars. If any of them are | ||
4312 | 20 | extended by public library classes, and then extended again by input | ||
4313 | 21 | classes, ProGuard will complain it can't find them. In that case, you'll | ||
4314 | 22 | have to use the <code>-dontskipnonpubliclibraryclasses</code> option, and | ||
4315 | 23 | maybe even the <code>-dontskipnonpubliclibraryclassmembers</code> option. | ||
4316 | 24 | The graphical user interface has checkboxes for these settings. | ||
4317 | 25 | <p> | ||
4319 | 26 | 28 | ||
4320 | 27 | <li>For best results, ProGuard's optimization algorithms assume that the | 29 | <li>For best results, ProGuard's optimization algorithms assume that the |
4321 | 28 | processed code never <b>intentionally throws NullPointerExceptions</b> or | 30 | processed code never <b>intentionally throws NullPointerExceptions</b> or |
4322 | @@ -33,32 +35,35 @@ | |||
4323 | 33 | <code>myObject</code> might be null, causing a NullPointerException. In | 35 | <code>myObject</code> might be null, causing a NullPointerException. In |
4324 | 34 | some way this is a good thing: optimized code may throw fewer exceptions. | 36 | some way this is a good thing: optimized code may throw fewer exceptions. |
4325 | 35 | Should this entire assumption be false, you'll have to switch off | 37 | Should this entire assumption be false, you'll have to switch off |
4328 | 36 | optimization using the <code>-dontoptimize</code> option. | 38 | optimization using the <code>-dontoptimize</code> option.</li> |
4329 | 37 | <p> | 39 | |
4330 | 40 | <li>ProGuard's optimization algorithms currently also assume that the | ||
4331 | 41 | processed code never creates <b>busy-waiting loops</b> without at least | ||
4332 | 42 | testing on a volatile field. Again, it may remove such loops. Should this | ||
4333 | 43 | assumption be false, you'll have to switch off optimization using | ||
4334 | 44 | the <code>-dontoptimize</code> option.</li> | ||
4335 | 38 | 45 | ||
4336 | 39 | <li>If an input jar and a library jar contain classes in the <b>same | 46 | <li>If an input jar and a library jar contain classes in the <b>same |
4337 | 40 | package</b>, the obfuscated output jar may contain class names that | 47 | package</b>, the obfuscated output jar may contain class names that |
4338 | 41 | overlap with class names in the library jar. This is most likely if the | 48 | overlap with class names in the library jar. This is most likely if the |
4339 | 42 | library jar has been obfuscated before, as it will then probably contain | 49 | library jar has been obfuscated before, as it will then probably contain |
4340 | 43 | classes named 'a', 'b', etc. Packages should therefore never be split | 50 | classes named 'a', 'b', etc. Packages should therefore never be split |
4343 | 44 | across input jars and library jars. | 51 | across input jars and library jars.</li> |
4342 | 45 | <p> | ||
4344 | 46 | 52 | ||
4352 | 47 | <li>When obfuscating, ProGuard will write out class files named | 53 | <li>When obfuscating, ProGuard writes out class files named |
4353 | 48 | "<code>a.class</code>", "<code>b.class</code>", etc. If there is a large | 54 | "<code>a.class</code>", "<code>b.class</code>", etc. If a package contains |
4354 | 49 | numbers of classes in the same package, it may also write out | 55 | a large number of classes, ProGuard may also write out |
4355 | 50 | <b>"<code>aux.class</code>"</b>. Windows doesn't allow creating files with | 56 | <b>"<code>aux.class</code>"</b>. Inconveniently, Windows refuses to create |
4356 | 51 | this reserved name (among a few other names), so it's generally better to | 57 | files with this reserved name (among a few other names). It's generally |
4357 | 52 | write the output to a jar, in order to avoid such problems. | 58 | better to write the output to a jar, in order to avoid such problems.</li> |
4351 | 53 | <p> | ||
4358 | 54 | 59 | ||
4359 | 55 | </ul> | 60 | </ul> |
4360 | 56 | <p> | ||
4361 | 57 | 61 | ||
4363 | 58 | <hr> | 62 | <hr /> |
4364 | 63 | <noscript><div><a target="_top" href="../index.html" class="button">Show menu</a></div></noscript> | ||
4365 | 59 | <address> | 64 | <address> |
4368 | 60 | Copyright © 2002-2009 | 65 | Copyright © 2002-2012 |
4369 | 61 | <a href="http://www.graphics.cornell.edu/~eric/">Eric Lafortune</a>. | 66 | <a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>. |
4370 | 62 | </address> | 67 | </address> |
4371 | 63 | </body> | 68 | </body> |
4372 | 64 | </html> | 69 | </html> |
4373 | 65 | 70 | ||
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 @@ | |||
4379 | 1 | <!doctype html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> | 1 | <!doctype html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> |
4380 | 2 | <html> | 2 | <html> |
4381 | 3 | <head> | 3 | <head> |
4382 | 4 | <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"> | 4 | <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"> |
4383 | 5 | <meta http-equiv="content-style-type" content="text/css"> | 5 | <meta http-equiv="content-style-type" content="text/css"> |
4384 | 6 | <link rel="stylesheet" type="text/css" href="style.css"> | 6 | <link rel="stylesheet" type="text/css" href="style.css"> |
4385 | 7 | <title>Optimizations</title> | 7 | <title>Optimizations</title> |
4386 | 8 | <script type="text/javascript" language="JavaScript"> | ||
4387 | 9 | <!-- | ||
4388 | 10 | if (window.self==window.top) | ||
4389 | 11 | window.top.location.replace("../index.html#"+window.location.pathname+window.location.hash); | ||
4390 | 12 | else { | ||
4391 | 13 | var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), ""); | ||
4392 | 14 | if (window.top.location.hash!=hash) | ||
4393 | 15 | window.top.location.hash=hash; | ||
4394 | 16 | } | ||
4395 | 17 | //--> | ||
4396 | 18 | </script> | ||
4397 | 8 | </head> | 19 | </head> |
4398 | 9 | <body> | 20 | <body> |
4399 | 10 | 21 | ||
4400 | @@ -124,6 +135,9 @@ | |||
4401 | 124 | <code><b>code/simplification/branch</b></code></dt> | 135 | <code><b>code/simplification/branch</b></code></dt> |
4402 | 125 | <dd>Performs peephole optimizations for branch instructions.</dd> | 136 | <dd>Performs peephole optimizations for branch instructions.</dd> |
4403 | 126 | 137 | ||
4404 | 138 | <dt><code><b>code/simplification/string</b></code></dt> | ||
4405 | 139 | <dd>Performs peephole optimizations for constant strings.</dd> | ||
4406 | 140 | |||
4407 | 127 | <dt><div>(<i>best used with</i> <code>code/removal/advanced</code>)</div> | 141 | <dt><div>(<i>best used with</i> <code>code/removal/advanced</code>)</div> |
4408 | 128 | <code><b>code/simplification/advanced</b></code></dt> | 142 | <code><b>code/simplification/advanced</b></code></dt> |
4409 | 129 | <dd>Simplifies code based on control flow analysis and data flow | 143 | <dd>Simplifies code based on control flow analysis and data flow |
4410 | @@ -142,17 +156,17 @@ | |||
4411 | 142 | <dd>Removes unused variables from the local variable frame.</dd> | 156 | <dd>Removes unused variables from the local variable frame.</dd> |
4412 | 143 | 157 | ||
4413 | 144 | <dt><code><b>code/removal/exception</b></code></dt> | 158 | <dt><code><b>code/removal/exception</b></code></dt> |
4415 | 145 | <dd>Removes exceptions with empty catch blocks.</dd> | 159 | <dd>Removes exceptions with empty try blocks.</dd> |
4416 | 146 | 160 | ||
4417 | 147 | <dt><code><b>code/allocation/variable</b></code></dt> | 161 | <dt><code><b>code/allocation/variable</b></code></dt> |
4418 | 148 | <dd>Optimizes variable allocation on the local variable frame.</dd> | 162 | <dd>Optimizes variable allocation on the local variable frame.</dd> |
4419 | 149 | </dl> | 163 | </dl> |
4420 | 150 | <p> | ||
4421 | 151 | 164 | ||
4423 | 152 | <hr> | 165 | <hr /> |
4424 | 166 | <noscript><div><a target="_top" href="../index.html" class="button">Show menu</a></div></noscript> | ||
4425 | 153 | <address> | 167 | <address> |
4428 | 154 | Copyright © 2002-2009 | 168 | Copyright © 2002-2012 |
4429 | 155 | <a href="http://www.graphics.cornell.edu/~eric/">Eric Lafortune</a>. | 169 | <a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>. |
4430 | 156 | </address> | 170 | </address> |
4431 | 157 | </body> | 171 | </body> |
4432 | 158 | </html> | 172 | </html> |
4433 | 159 | 173 | ||
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 @@ | |||
4439 | 1 | <!doctype html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> | 1 | <!doctype html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> |
4440 | 2 | <html> | 2 | <html> |
4441 | 3 | <head> | 3 | <head> |
4442 | 4 | <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"> | 4 | <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"> |
4443 | 5 | <meta http-equiv="content-style-type" content="text/css"> | 5 | <meta http-equiv="content-style-type" content="text/css"> |
4444 | 6 | <link rel="stylesheet" type="text/css" href="style.css"> | 6 | <link rel="stylesheet" type="text/css" href="style.css"> |
4445 | 7 | <title>ProGuard Reference Card</title> | 7 | <title>ProGuard Reference Card</title> |
4446 | 8 | <script type="text/javascript" language="JavaScript"> | ||
4447 | 9 | <!-- | ||
4448 | 10 | if (window.self==window.top) | ||
4449 | 11 | window.top.location.replace("../index.html#"+window.location.pathname+window.location.hash); | ||
4450 | 12 | else { | ||
4451 | 13 | var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), ""); | ||
4452 | 14 | if (window.top.location.hash!=hash) | ||
4453 | 15 | window.top.location.hash=hash; | ||
4454 | 16 | } | ||
4455 | 17 | //--> | ||
4456 | 18 | </script> | ||
4457 | 8 | </head> | 19 | </head> |
4458 | 9 | <body> | 20 | <body> |
4459 | 10 | 21 | ||
4460 | @@ -52,7 +63,7 @@ | |||
4461 | 52 | <tr> | 63 | <tr> |
4462 | 53 | <td valign="top"><a href="usage.html#outjars"><code><b>-outjars</b></code></a> | 64 | <td valign="top"><a href="usage.html#outjars"><code><b>-outjars</b></code></a> |
4463 | 54 | <a href="usage.html#classpath"><i>class_path</i></a></td> | 65 | <a href="usage.html#classpath"><i>class_path</i></a></td> |
4465 | 55 | <td>Specifies the name of the output jars (or wars, ears, zips, or | 66 | <td>Specifies the names of the output jars (or wars, ears, zips, or |
4466 | 56 | directories).</td> | 67 | directories).</td> |
4467 | 57 | </tr> | 68 | </tr> |
4468 | 58 | 69 | ||
4469 | @@ -63,8 +74,13 @@ | |||
4470 | 63 | </tr> | 74 | </tr> |
4471 | 64 | 75 | ||
4472 | 65 | <tr> | 76 | <tr> |
4473 | 77 | <td valign="top"><a href="usage.html#skipnonpubliclibraryclasses"><code><b>-skipnonpubliclibraryclasses</b></code></a></td> | ||
4474 | 78 | <td>Ignore non-public library classes.</td> | ||
4475 | 79 | </tr> | ||
4476 | 80 | |||
4477 | 81 | <tr> | ||
4478 | 66 | <td valign="top"><a href="usage.html#dontskipnonpubliclibraryclasses"><code><b>-dontskipnonpubliclibraryclasses</b></code></a></td> | 82 | <td valign="top"><a href="usage.html#dontskipnonpubliclibraryclasses"><code><b>-dontskipnonpubliclibraryclasses</b></code></a></td> |
4480 | 67 | <td>Don't ignore non-public library classes.</td> | 83 | <td>Don't ignore non-public library classes (the default).</td> |
4481 | 68 | </tr> | 84 | </tr> |
4482 | 69 | 85 | ||
4483 | 70 | <tr> | 86 | <tr> |
4484 | @@ -281,6 +297,11 @@ | |||
4485 | 281 | </tr> | 297 | </tr> |
4486 | 282 | 298 | ||
4487 | 283 | <tr> | 299 | <tr> |
4488 | 300 | <td valign="top"><a href="usage.html#keepparameternames"><code><b>-keepparameternames</b></code></a></td> | ||
4489 | 301 | <td>Keep the parameter names and types of methods that are kept.</td> | ||
4490 | 302 | </tr> | ||
4491 | 303 | |||
4492 | 304 | <tr> | ||
4493 | 284 | <td valign="top"><a href="usage.html#renamesourcefileattribute"><code><b>-renamesourcefileattribute</b></code></a> | 305 | <td valign="top"><a href="usage.html#renamesourcefileattribute"><code><b>-renamesourcefileattribute</b></code></a> |
4494 | 285 | [<i>string</i>]</td> | 306 | [<i>string</i>]</td> |
4495 | 286 | <td>Put the given constant string in the <code>SourceFile</code> | 307 | <td>Put the given constant string in the <code>SourceFile</code> |
4496 | @@ -345,28 +366,28 @@ | |||
4497 | 345 | <tr> | 366 | <tr> |
4498 | 346 | <td valign="top"><a href="usage.html#printconfiguration"><code><b>-printconfiguration</b></code></a> | 367 | <td valign="top"><a href="usage.html#printconfiguration"><code><b>-printconfiguration</b></code></a> |
4499 | 347 | [<a href="usage.html#filename"><i>filename</i></a>]</td> | 368 | [<a href="usage.html#filename"><i>filename</i></a>]</td> |
4500 | 369 | <td>Write out the entire configuration in traditional ProGuard style, to the | ||
4501 | 370 | standard output or to the given file.</td> | ||
4502 | 371 | </tr> | ||
4503 | 372 | |||
4504 | 373 | <tr> | ||
4505 | 374 | <td valign="top"><a href="usage.html#dump"><code><b>-dump</b></code></a> | ||
4506 | 375 | [<a href="usage.html#filename"><i>filename</i></a>]</td> | ||
4507 | 348 | <td>Write out the internal structure of the processed class files, to the | 376 | <td>Write out the internal structure of the processed class files, to the |
4508 | 349 | standard output or to the given file.</td> | 377 | standard output or to the given file.</td> |
4509 | 350 | </tr> | 378 | </tr> |
4510 | 351 | 379 | ||
4511 | 352 | <tr> | ||
4512 | 353 | <td valign="top"><a href="usage.html#dump"><code><b>-dump</b></code></a> | ||
4513 | 354 | [<a href="usage.html#filename"><i>filename</i></a>]</td> | ||
4514 | 355 | <td>Write out the entire configuration in traditional ProGuard style, to the | ||
4515 | 356 | standard output or to the given file.</td> | ||
4516 | 357 | </tr> | ||
4517 | 358 | |||
4518 | 359 | </table> | 380 | </table> |
4519 | 360 | <p> | 381 | <p> |
4520 | 361 | Notes: | 382 | Notes: |
4521 | 362 | <ul> | 383 | <ul> |
4522 | 363 | 384 | ||
4523 | 364 | <li><i>class_path</i> is a list of jars, wars, ears, zips, and directories, | 385 | <li><i>class_path</i> is a list of jars, wars, ears, zips, and directories, |
4525 | 365 | with optional filters, separated by path separators. | 386 | with optional filters, separated by path separators.</li> |
4526 | 366 | <li><i>filename</i> can contain Java system properties delimited by | 387 | <li><i>filename</i> can contain Java system properties delimited by |
4528 | 367 | '<b><</b>' and '<b>></b>'. | 388 | '<b><</b>' and '<b>></b>'.</li> |
4529 | 368 | <li>If <i>filename</i> contains special characters, the entire name | 389 | <li>If <i>filename</i> contains special characters, the entire name |
4531 | 369 | should be quoted with single or double quotes. | 390 | should be quoted with single or double quotes.</li> |
4532 | 370 | </ul> | 391 | </ul> |
4533 | 371 | <p> | 392 | <p> |
4534 | 372 | 393 | ||
4535 | @@ -443,23 +464,23 @@ | |||
4536 | 443 | Notes: | 464 | Notes: |
4537 | 444 | <ul> | 465 | <ul> |
4538 | 445 | <li>Class names must always be fully qualified, i.e. including their package | 466 | <li>Class names must always be fully qualified, i.e. including their package |
4540 | 446 | names. | 467 | names.</li> |
4541 | 447 | <li>Types in <i>classname</i>, <i>annotationtype</i>, <i>returntype</i>, and | 468 | <li>Types in <i>classname</i>, <i>annotationtype</i>, <i>returntype</i>, and |
4542 | 448 | <i>argumenttype</i> can contain wildcards: '<code><b>?</b></code>' for a | 469 | <i>argumenttype</i> can contain wildcards: '<code><b>?</b></code>' for a |
4543 | 449 | single character, '<code><b>*</b></code>' for any number of characters | 470 | single character, '<code><b>*</b></code>' for any number of characters |
4544 | 450 | (but not the package separator), '<code><b>**</b></code>' for any number | 471 | (but not the package separator), '<code><b>**</b></code>' for any number |
4545 | 451 | of (any) characters, '<code><b>%</b></code>' for any primitive type, | 472 | of (any) characters, '<code><b>%</b></code>' for any primitive type, |
4547 | 452 | '<code><b>***</b></code>' for any type, and '<code><b>...</b></code>' for any number of arguments.. | 473 | '<code><b>***</b></code>' for any type, and '<code><b>...</b></code>' for any number of arguments.</li> |
4548 | 453 | <li><i>fieldname</i> and <i>methodname</i> can contain wildcards as well: | 474 | <li><i>fieldname</i> and <i>methodname</i> can contain wildcards as well: |
4549 | 454 | '<code><b>?</b></code>' for a single character and '<code><b>*</b></code>' | 475 | '<code><b>?</b></code>' for a single character and '<code><b>*</b></code>' |
4551 | 455 | for any number of characters. | 476 | for any number of characters.</li> |
4552 | 456 | </ul> | 477 | </ul> |
4553 | 457 | <p> | ||
4554 | 458 | 478 | ||
4556 | 459 | <hr> | 479 | <hr /> |
4557 | 480 | <noscript><div><a target="_top" href="../index.html" class="button">Show menu</a></div></noscript> | ||
4558 | 460 | <address> | 481 | <address> |
4561 | 461 | Copyright © 2002-2009 | 482 | Copyright © 2002-2012 |
4562 | 462 | <a href="http://www.graphics.cornell.edu/~eric/">Eric Lafortune</a>. | 483 | <a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>. |
4563 | 463 | </address> | 484 | </address> |
4564 | 464 | </body> | 485 | </body> |
4565 | 465 | </html> | 486 | </html> |
4566 | 466 | 487 | ||
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 @@ | |||
4572 | 1 | <!doctype html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> | 1 | <!doctype html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> |
4573 | 2 | <html> | 2 | <html> |
4574 | 3 | <head> | 3 | <head> |
4575 | 4 | <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"> | 4 | <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"> |
4576 | 5 | <meta http-equiv="content-style-type" content="text/css"> | 5 | <meta http-equiv="content-style-type" content="text/css"> |
4577 | 6 | <link rel="stylesheet" type="text/css" href="../style.css"> | 6 | <link rel="stylesheet" type="text/css" href="../style.css"> |
4578 | 7 | <title>ReTrace Examples</title> | 7 | <title>ReTrace Examples</title> |
4579 | 8 | <script type="text/javascript" language="JavaScript"> | ||
4580 | 9 | <!-- | ||
4581 | 10 | if (window.self==window.top) | ||
4582 | 11 | window.top.location.replace("../../index.html#"+window.location.pathname+window.location.hash); | ||
4583 | 12 | else { | ||
4584 | 13 | var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), ""); | ||
4585 | 14 | if (window.top.location.hash!=hash) | ||
4586 | 15 | window.top.location.hash=hash; | ||
4587 | 16 | } | ||
4588 | 17 | //--> | ||
4589 | 18 | </script> | ||
4590 | 8 | </head> | 19 | </head> |
4591 | 9 | <body> | 20 | <body> |
4592 | 10 | 21 | ||
4593 | @@ -12,13 +23,13 @@ | |||
4594 | 12 | 23 | ||
4595 | 13 | Some typical example uses: | 24 | Some typical example uses: |
4596 | 14 | <ol> | 25 | <ol> |
4600 | 15 | <li><a href="#with">Restoring a stack trace with line numbers</a> | 26 | <li><a href="#with">Restoring a stack trace with line numbers</a></li> |
4601 | 16 | <li><a href="#withverbose">Restoring a stack trace with line numbers (verbose)</a> | 27 | <li><a href="#withverbose">Restoring a stack trace with line numbers |
4602 | 17 | <li><a href="#without">Restoring a stack trace without line numbers</a> | 28 | (verbose)</a></li> |
4603 | 29 | <li><a href="#without">Restoring a stack trace without line numbers</a></li> | ||
4604 | 18 | </ol> | 30 | </ol> |
4605 | 19 | 31 | ||
4608 | 20 | <a name="with"> </a> | 32 | <h3><a name="with">Restoring a stack trace with line numbers</a></h3> |
4607 | 21 | <h3>Restoring a stack trace with line numbers</h3> | ||
4609 | 22 | 33 | ||
4610 | 23 | Assume for instance ProGuard itself has been obfuscated using the following | 34 | Assume for instance ProGuard itself has been obfuscated using the following |
4611 | 24 | extra options: | 35 | extra options: |
4612 | @@ -133,8 +144,7 @@ | |||
4613 | 133 | at proguard.ProGuard.main(ProGuard:429) | 144 | at proguard.ProGuard.main(ProGuard:429) |
4614 | 134 | </pre> | 145 | </pre> |
4615 | 135 | 146 | ||
4618 | 136 | <a name="withverbose"> </a> | 147 | <h3><a name="withverbose">Restoring a stack trace with line numbers (verbose)</a></h3> |
4617 | 137 | <h3>Restoring a stack trace with line numbers (verbose)</h3> | ||
4619 | 138 | 148 | ||
4620 | 139 | In the previous example, we could also use the verbose flag: | 149 | In the previous example, we could also use the verbose flag: |
4621 | 140 | <pre> | 150 | <pre> |
4622 | @@ -189,8 +199,7 @@ | |||
4623 | 189 | </pre> | 199 | </pre> |
4624 | 190 | 200 | ||
4625 | 191 | 201 | ||
4628 | 192 | <a name="without"> </a> | 202 | <h3><a name="without">Restoring a stack trace without line numbers</a></h3> |
4627 | 193 | <h3>Restoring a stack trace without line numbers</h3> | ||
4629 | 194 | 203 | ||
4630 | 195 | Assume for instance ProGuard itself has been obfuscated using the following | 204 | Assume for instance ProGuard itself has been obfuscated using the following |
4631 | 196 | extra options, this time without preserving the line number tables: | 205 | extra options, this time without preserving the line number tables: |
4632 | @@ -324,12 +333,12 @@ | |||
4633 | 324 | execute | 333 | execute |
4634 | 325 | at proguard.ProGuard.main(Unknown Source) | 334 | at proguard.ProGuard.main(Unknown Source) |
4635 | 326 | </pre> | 335 | </pre> |
4636 | 327 | <p> | ||
4637 | 328 | 336 | ||
4639 | 329 | <hr> | 337 | <hr /> |
4640 | 338 | <noscript><div><a target="_top" href="../../index.html" class="button">Show menu</a></div></noscript> | ||
4641 | 330 | <address> | 339 | <address> |
4644 | 331 | Copyright © 2002-2009 | 340 | Copyright © 2002-2012 |
4645 | 332 | <a href="http://www.graphics.cornell.edu/~eric/">Eric Lafortune</a>. | 341 | <a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>. |
4646 | 333 | </address> | 342 | </address> |
4647 | 334 | </body> | 343 | </body> |
4648 | 335 | </html> | 344 | </html> |
4649 | 336 | 345 | ||
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 @@ | |||
4655 | 1 | <!doctype html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> | 1 | <!doctype html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> |
4656 | 2 | <html> | 2 | <html> |
4657 | 3 | <head> | 3 | <head> |
4658 | 4 | <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"> | 4 | <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"> |
4659 | 5 | <meta http-equiv="content-style-type" content="text/css"> | 5 | <meta http-equiv="content-style-type" content="text/css"> |
4660 | 6 | <link rel="stylesheet" type="text/css" href="../style.css"> | 6 | <link rel="stylesheet" type="text/css" href="../style.css"> |
4661 | 7 | <title>ReTrace Manual</title> | 7 | <title>ReTrace Manual</title> |
4662 | 8 | <script type="text/javascript" language="JavaScript"> | ||
4663 | 9 | <!-- | ||
4664 | 10 | if (window.self==window.top) | ||
4665 | 11 | window.top.location.replace("../../index.html#"+window.location.pathname+window.location.hash); | ||
4666 | 12 | else { | ||
4667 | 13 | var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), ""); | ||
4668 | 14 | if (window.top.location.hash!=hash) | ||
4669 | 15 | window.top.location.hash=hash; | ||
4670 | 16 | } | ||
4671 | 17 | //--> | ||
4672 | 18 | </script> | ||
4673 | 8 | </head> | 19 | </head> |
4674 | 9 | <body> | 20 | <body> |
4675 | 10 | 21 | ||
4676 | 11 | <h2>ReTrace</h2> | 22 | <h2>ReTrace</h2> |
4677 | 12 | 23 | ||
4678 | 13 | <ol> | 24 | <ol> |
4682 | 14 | <li><a href="introduction.html">Introduction</a> | 25 | <li><a href="introduction.html">Introduction</a></li> |
4683 | 15 | <li><a href="usage.html">Usage</a> | 26 | <li><a href="usage.html">Usage</a></li> |
4684 | 16 | <li><a href="examples.html">Examples</a> | 27 | <li><a href="examples.html">Examples</a></li> |
4685 | 17 | </ol> | 28 | </ol> |
4686 | 18 | 29 | ||
4688 | 19 | <hr> | 30 | <hr /> |
4689 | 31 | <noscript><div><a target="_top" href="../../index.html" class="button">Show menu</a></div></noscript> | ||
4690 | 20 | <address> | 32 | <address> |
4693 | 21 | Copyright © 2002-2009 | 33 | Copyright © 2002-2012 |
4694 | 22 | <a href="http://www.graphics.cornell.edu/~eric/">Eric Lafortune</a>. | 34 | <a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>. |
4695 | 23 | </address> | 35 | </address> |
4696 | 24 | </body> | 36 | </body> |
4697 | 25 | </html> | 37 | </html> |
4698 | 26 | 38 | ||
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 @@ | |||
4704 | 1 | <!doctype html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> | 1 | <!doctype html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> |
4705 | 2 | <html> | 2 | <html> |
4706 | 3 | <head> | 3 | <head> |
4707 | 4 | <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"> | 4 | <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"> |
4708 | 5 | <meta http-equiv="content-style-type" content="text/css"> | 5 | <meta http-equiv="content-style-type" content="text/css"> |
4709 | 6 | <link rel="stylesheet" type="text/css" href="../style.css"> | 6 | <link rel="stylesheet" type="text/css" href="../style.css"> |
4710 | 7 | <title>ReTrace Introduction</title> | 7 | <title>ReTrace Introduction</title> |
4711 | 8 | <script type="text/javascript" language="JavaScript"> | ||
4712 | 9 | <!-- | ||
4713 | 10 | if (window.self==window.top) | ||
4714 | 11 | window.top.location.replace("../../index.html#"+window.location.pathname+window.location.hash); | ||
4715 | 12 | else { | ||
4716 | 13 | var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), ""); | ||
4717 | 14 | if (window.top.location.hash!=hash) | ||
4718 | 15 | window.top.location.hash=hash; | ||
4719 | 16 | } | ||
4720 | 17 | //--> | ||
4721 | 18 | </script> | ||
4722 | 8 | </head> | 19 | </head> |
4723 | 9 | <body> | 20 | <body> |
4724 | 10 | 21 | ||
4725 | @@ -56,12 +67,12 @@ | |||
4726 | 56 | look like without obfuscation. The restoration is based on the mapping file | 67 | look like without obfuscation. The restoration is based on the mapping file |
4727 | 57 | that ProGuard can write out during obfuscation. The mapping file links the | 68 | that ProGuard can write out during obfuscation. The mapping file links the |
4728 | 58 | original class names and class member names to their obfuscated names. | 69 | original class names and class member names to their obfuscated names. |
4729 | 59 | <p> | ||
4730 | 60 | 70 | ||
4732 | 61 | <hr> | 71 | <hr /> |
4733 | 72 | <noscript><div><a target="_top" href="../../index.html" class="button">Show menu</a></div></noscript> | ||
4734 | 62 | <address> | 73 | <address> |
4737 | 63 | Copyright © 2002-2009 | 74 | Copyright © 2002-2012 |
4738 | 64 | <a href="http://www.graphics.cornell.edu/~eric/">Eric Lafortune</a>. | 75 | <a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>. |
4739 | 65 | </address> | 76 | </address> |
4740 | 66 | </body> | 77 | </body> |
4741 | 67 | </html> | 78 | </html> |
4742 | 68 | 79 | ||
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 @@ | |||
4748 | 1 | <!doctype html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> | 1 | <!doctype html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> |
4749 | 2 | <html> | 2 | <html> |
4750 | 3 | <head> | 3 | <head> |
4751 | 4 | <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"> | 4 | <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"> |
4752 | 5 | <meta http-equiv="content-style-type" content="text/css"> | 5 | <meta http-equiv="content-style-type" content="text/css"> |
4753 | 6 | <link rel="stylesheet" type="text/css" href="../style.css"> | 6 | <link rel="stylesheet" type="text/css" href="../style.css"> |
4754 | 7 | <title>ReTrace Usage</title> | 7 | <title>ReTrace Usage</title> |
4755 | 8 | <script type="text/javascript" language="JavaScript"> | ||
4756 | 9 | <!-- | ||
4757 | 10 | if (window.self==window.top) | ||
4758 | 11 | window.top.location.replace("../../index.html#"+window.location.pathname+window.location.hash); | ||
4759 | 12 | else { | ||
4760 | 13 | var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), ""); | ||
4761 | 14 | if (window.top.location.hash!=hash) | ||
4762 | 15 | window.top.location.hash=hash; | ||
4763 | 16 | } | ||
4764 | 17 | //--> | ||
4765 | 18 | </script> | ||
4766 | 8 | </head> | 19 | </head> |
4767 | 9 | <body> | 20 | <body> |
4768 | 10 | 21 | ||
4769 | @@ -17,7 +28,8 @@ | |||
4770 | 17 | <code><b>java -jar retrace.jar </b></code>[<i>options...</i>] | 28 | <code><b>java -jar retrace.jar </b></code>[<i>options...</i>] |
4771 | 18 | <i>mapping_file</i> [<i>stacktrace_file</i>] | 29 | <i>mapping_file</i> [<i>stacktrace_file</i>] |
4772 | 19 | </p> | 30 | </p> |
4774 | 20 | These are the arguments: | 31 | Alternatively, the <code>bin</code> directory contains some short Linux and |
4775 | 32 | Windows scripts containing this command. These are the arguments: | ||
4776 | 21 | 33 | ||
4777 | 22 | <dl> | 34 | <dl> |
4778 | 23 | <dt><i>mapping_file</i></dt> | 35 | <dt><i>mapping_file</i></dt> |
4779 | @@ -48,7 +60,7 @@ | |||
4780 | 48 | de-obfuscate more general types of input than just stack traces. The | 60 | de-obfuscate more general types of input than just stack traces. The |
4781 | 49 | default is suitable for stack traces produced by most JVMs: | 61 | default is suitable for stack traces produced by most JVMs: |
4782 | 50 | <pre> | 62 | <pre> |
4784 | 51 | (?:\s*%c:.*)|(?:\s*at\s+%c.%m\s*\(.*?(?::%l)?\)\s*) | 63 | (?:.*?\bat\s+%c.%m\s*\(.*?(?::%l)?\)\s*)|(?:(?:.*?[:"]\s+)?%c(?::.*)?) |
4785 | 52 | </pre> | 64 | </pre> |
4786 | 53 | The regular expression is a Java regular expression (cfr. the documentation | 65 | The regular expression is a Java regular expression (cfr. the documentation |
4787 | 54 | of <code>java.util.regex.Pattern</code>), with a few additional wildcards: | 66 | of <code>java.util.regex.Pattern</code>), with a few additional wildcards: |
4788 | @@ -87,14 +99,13 @@ | |||
4789 | 87 | 99 | ||
4790 | 88 | <ul> | 100 | <ul> |
4791 | 89 | <li>If all line numbers have been preserved while obfuscating the application, | 101 | <li>If all line numbers have been preserved while obfuscating the application, |
4794 | 90 | ReTrace will be able to restore the stack trace completely. | 102 | ReTrace will be able to restore the stack trace completely.</li> |
4793 | 91 | <p> | ||
4795 | 92 | 103 | ||
4796 | 93 | <li>If the line numbers have been removed, mapping obfuscated method names | 104 | <li>If the line numbers have been removed, mapping obfuscated method names |
4797 | 94 | back to their original names has become ambiguous. Retrace will list all | 105 | back to their original names has become ambiguous. Retrace will list all |
4798 | 95 | possible original method names for each line in the stack trace. The user | 106 | possible original method names for each line in the stack trace. The user |
4799 | 96 | can then try to deduce the actual stack trace manually, based on the logic | 107 | can then try to deduce the actual stack trace manually, based on the logic |
4801 | 97 | of the program. | 108 | of the program.</li> |
4802 | 98 | 109 | ||
4803 | 99 | </ul> | 110 | </ul> |
4804 | 100 | <p> | 111 | <p> |
4805 | @@ -105,12 +116,12 @@ | |||
4806 | 105 | 116 | ||
4807 | 106 | Unobfuscated elements and obfuscated elements for which no mapping is available | 117 | Unobfuscated elements and obfuscated elements for which no mapping is available |
4808 | 107 | will be left unchanged. | 118 | will be left unchanged. |
4809 | 108 | <p> | ||
4810 | 109 | 119 | ||
4812 | 110 | <hr> | 120 | <hr /> |
4813 | 121 | <noscript><div><a target="_top" href="../../index.html" class="button">Show menu</a></div></noscript> | ||
4814 | 111 | <address> | 122 | <address> |
4817 | 112 | Copyright © 2002-2009 | 123 | Copyright © 2002-2012 |
4818 | 113 | <a href="http://www.graphics.cornell.edu/~eric/">Eric Lafortune</a>. | 124 | <a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>. |
4819 | 114 | </address> | 125 | </address> |
4820 | 115 | </body> | 126 | </body> |
4821 | 116 | </html> | 127 | </html> |
4822 | 117 | 128 | ||
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 @@ | |||
4828 | 1 | <!doctype html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> | 1 | <!doctype html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> |
4829 | 2 | <html> | 2 | <html> |
4830 | 3 | <head> | 3 | <head> |
4831 | 4 | <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"> | 4 | <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"> |
4832 | @@ -42,22 +42,18 @@ | |||
4833 | 42 | document.write(document.location.hostname == "proguard.sourceforge.net" ? | 42 | document.write(document.location.hostname == "proguard.sourceforge.net" ? |
4834 | 43 | "http://sourceforge.net/sflogo.php?group_id=54750&type=1" : | 43 | "http://sourceforge.net/sflogo.php?group_id=54750&type=1" : |
4835 | 44 | "../sflogo.png"); | 44 | "../sflogo.png"); |
4837 | 45 | document.write("\" width=\"88\" height=\"31\" alt=\"SourceForge\">"); | 45 | document.write("\" width=\"88\" height=\"31\" alt=\"SourceForge\" />"); |
4838 | 46 | //--> | 46 | //--> |
4839 | 47 | </script> | 47 | </script> |
4840 | 48 | <noscript> | 48 | <noscript> |
4842 | 49 | <img src="../sflogo.png" width="88" height="31" alt="SourceForge"> | 49 | <img src="../sflogo.png" width="88" height="31" alt="SourceForge" /> |
4843 | 50 | </noscript> | 50 | </noscript> |
4844 | 51 | 51 | ||
4845 | 52 | </a> | 52 | </a> |
4846 | 53 | 53 | ||
4847 | 54 | <p> | 54 | <p> |
4854 | 55 | <a href="http://www.luciad.com/" target="other"> | 55 | <a href="http://www.saikoa.com/" target="_top"> |
4855 | 56 | <img src="../luciadlogo.png" width="88" height="24" alt="Luciad"></a> | 56 | <img src="../saikoalogo.png" width="88" height="19" alt="Saikoa" /></a> |
4850 | 57 | |||
4851 | 58 | <p> | ||
4852 | 59 | <a href="http://www.javadocking.com/" target="other"> | ||
4853 | 60 | <img src="../sanawarelogo.png" width="88" height="24" alt="Luciad"></a> | ||
4856 | 61 | </center> | 57 | </center> |
4857 | 62 | 58 | ||
4858 | 63 | </body> | 59 | </body> |
4859 | 64 | 60 | ||
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 | 2 | 2 | ||
4865 | 3 | /* Global settings. */ | 3 | /* Global settings. */ |
4866 | 4 | 4 | ||
4868 | 5 | body { | 5 | body |
4869 | 6 | { | ||
4870 | 6 | background: #FFFFFF; | 7 | background: #FFFFFF; |
4871 | 7 | } | 8 | } |
4872 | 8 | 9 | ||
4874 | 9 | h1 { | 10 | h1 |
4875 | 11 | { | ||
4876 | 10 | text-align: center; | 12 | text-align: center; |
4877 | 11 | } | 13 | } |
4878 | 12 | 14 | ||
4880 | 13 | h2 { | 15 | h2 |
4881 | 16 | { | ||
4882 | 14 | background: #EEEEFF; | 17 | background: #EEEEFF; |
4883 | 15 | padding: 10px; | 18 | padding: 10px; |
4884 | 16 | } | 19 | } |
4885 | 17 | 20 | ||
4887 | 18 | dt { | 21 | dt |
4888 | 22 | { | ||
4889 | 19 | padding: 6px; | 23 | padding: 6px; |
4890 | 20 | } | 24 | } |
4891 | 21 | 25 | ||
4892 | @@ -25,23 +29,50 @@ | |||
4893 | 25 | float: right; | 29 | float: right; |
4894 | 26 | } | 30 | } |
4895 | 27 | 31 | ||
4897 | 28 | dd { | 32 | dd |
4898 | 33 | { | ||
4899 | 29 | padding: 6px; | 34 | padding: 6px; |
4900 | 30 | } | 35 | } |
4901 | 31 | 36 | ||
4903 | 32 | pre { | 37 | pre |
4904 | 38 | { | ||
4905 | 33 | padding: 10px; | 39 | padding: 10px; |
4906 | 34 | background: #E0E0E0; | 40 | background: #E0E0E0; |
4907 | 35 | } | 41 | } |
4908 | 36 | 42 | ||
4909 | 43 | .spacious li | ||
4910 | 44 | { | ||
4911 | 45 | padding: 8px; | ||
4912 | 46 | } | ||
4913 | 47 | |||
4914 | 48 | .shifted li | ||
4915 | 49 | { | ||
4916 | 50 | margin-left: 50px; | ||
4917 | 51 | } | ||
4918 | 52 | |||
4919 | 53 | img.float | ||
4920 | 54 | { | ||
4921 | 55 | float: left; | ||
4922 | 56 | } | ||
4923 | 57 | |||
4924 | 37 | a | 58 | a |
4925 | 38 | { | 59 | { |
4926 | 39 | text-decoration: none; | 60 | text-decoration: none; |
4927 | 40 | } | 61 | } |
4928 | 41 | 62 | ||
4929 | 63 | a.button | ||
4930 | 64 | { | ||
4931 | 65 | color: #000000; | ||
4932 | 66 | text-decoration: none; | ||
4933 | 67 | background: #E0E0E0; | ||
4934 | 68 | border: 1px outset #FFFFFF; | ||
4935 | 69 | float: right; | ||
4936 | 70 | } | ||
4937 | 71 | |||
4938 | 42 | /* Settings for variable width code. */ | 72 | /* Settings for variable width code. */ |
4939 | 43 | 73 | ||
4941 | 44 | p.code { | 74 | p.code |
4942 | 75 | { | ||
4943 | 45 | padding: 10px; | 76 | padding: 10px; |
4944 | 46 | background: #E0E0E0; | 77 | background: #E0E0E0; |
4945 | 47 | } | 78 | } |
4946 | @@ -49,34 +80,39 @@ | |||
4947 | 49 | 80 | ||
4948 | 50 | /* Settings for diagrams. */ | 81 | /* Settings for diagrams. */ |
4949 | 51 | 82 | ||
4951 | 52 | table.diagram { | 83 | table.diagram |
4952 | 84 | { | ||
4953 | 53 | padding: 8px; | 85 | padding: 8px; |
4954 | 54 | border: none; | 86 | border: none; |
4955 | 55 | border-spacing: 2px; | 87 | border-spacing: 2px; |
4956 | 56 | } | 88 | } |
4957 | 57 | 89 | ||
4959 | 58 | td.transparentblock { | 90 | td.transparentblock |
4960 | 91 | { | ||
4961 | 59 | text-align: center; | 92 | text-align: center; |
4962 | 60 | padding: 10px 0px; | 93 | padding: 10px 0px; |
4963 | 61 | } | 94 | } |
4964 | 62 | 95 | ||
4966 | 63 | td.whiteblock { | 96 | td.whiteblock |
4967 | 97 | { | ||
4968 | 64 | width: 100px; | 98 | width: 100px; |
4969 | 65 | text-align: center; | 99 | text-align: center; |
4971 | 66 | border: solid #C0C0C0 1px; | 100 | border: 1px solid #C0C0C0; |
4972 | 67 | background: #E0E0E0; | 101 | background: #E0E0E0; |
4973 | 68 | padding: 10px 0px; | 102 | padding: 10px 0px; |
4974 | 69 | } | 103 | } |
4975 | 70 | 104 | ||
4977 | 71 | td.lightblock { | 105 | td.lightblock |
4978 | 106 | { | ||
4979 | 72 | width: 100px; | 107 | width: 100px; |
4980 | 73 | text-align: center; | 108 | text-align: center; |
4982 | 74 | border: solid #8888FF 1px; | 109 | border: 1px solid #8888FF; |
4983 | 75 | background: #BBBBFF; | 110 | background: #BBBBFF; |
4984 | 76 | padding: 20px 0px; | 111 | padding: 20px 0px; |
4985 | 77 | } | 112 | } |
4986 | 78 | 113 | ||
4988 | 79 | td.darkblock { | 114 | td.darkblock |
4989 | 115 | { | ||
4990 | 80 | width: 100px; | 116 | width: 100px; |
4991 | 81 | text-align: center; | 117 | text-align: center; |
4992 | 82 | background: #8888FF; | 118 | background: #8888FF; |
4993 | @@ -85,8 +121,9 @@ | |||
4994 | 85 | 121 | ||
4995 | 86 | /* Settings for buttons. */ | 122 | /* Settings for buttons. */ |
4996 | 87 | 123 | ||
4998 | 88 | td.button { | 124 | td.button |
4999 | 125 | { | ||
5000 | 89 | background: #E0E0E0; | 126 | background: #E0E0E0; |
The diff has been truncated for viewing.
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!