sometsome 1.0.2 → 3.10.42

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (732) hide show
  1. checksums.yaml +4 -4
  2. data/lib/proguard4.7/README +33 -0
  3. data/lib/proguard4.7/bin/proguard.bat +14 -0
  4. data/lib/proguard4.7/bin/proguard.sh +11 -0
  5. data/lib/proguard4.7/bin/proguardgui.bat +14 -0
  6. data/lib/proguard4.7/bin/proguardgui.sh +15 -0
  7. data/lib/proguard4.7/bin/retrace.bat +14 -0
  8. data/lib/proguard4.7/bin/retrace.sh +12 -0
  9. data/lib/proguard4.7/build/build.sh +94 -0
  10. data/lib/proguard4.7/build/build.xml +171 -0
  11. data/lib/proguard4.7/build/makefile +94 -0
  12. data/lib/proguard4.7/docs/FAQ.html +253 -0
  13. data/lib/proguard4.7/docs/GPL.html +406 -0
  14. data/lib/proguard4.7/docs/GPL_exception.html +56 -0
  15. data/lib/proguard4.7/docs/acknowledgements.html +76 -0
  16. data/lib/proguard4.7/docs/alternatives.html +699 -0
  17. data/lib/proguard4.7/docs/checkmark.gif +0 -0
  18. data/lib/proguard4.7/docs/downloads.html +623 -0
  19. data/lib/proguard4.7/docs/drop1.gif +0 -0
  20. data/lib/proguard4.7/docs/drop2.gif +0 -0
  21. data/lib/proguard4.7/docs/drop3.gif +0 -0
  22. data/lib/proguard4.7/docs/favicon.ico +0 -0
  23. data/lib/proguard4.7/docs/feedback.html +120 -0
  24. data/lib/proguard4.7/docs/index.html +92 -0
  25. data/lib/proguard4.7/docs/license.html +60 -0
  26. data/lib/proguard4.7/docs/main.html +102 -0
  27. data/lib/proguard4.7/docs/manual/ant.html +634 -0
  28. data/lib/proguard4.7/docs/manual/attention.gif +0 -0
  29. data/lib/proguard4.7/docs/manual/examples.html +1504 -0
  30. data/lib/proguard4.7/docs/manual/gui.html +479 -0
  31. data/lib/proguard4.7/docs/manual/index.html +51 -0
  32. data/lib/proguard4.7/docs/manual/introduction.html +173 -0
  33. data/lib/proguard4.7/docs/manual/limitations.html +69 -0
  34. data/lib/proguard4.7/docs/manual/optimizations.html +172 -0
  35. data/lib/proguard4.7/docs/manual/refcard.html +486 -0
  36. data/lib/proguard4.7/docs/manual/retrace/examples.html +345 -0
  37. data/lib/proguard4.7/docs/manual/retrace/index.html +37 -0
  38. data/lib/proguard4.7/docs/manual/retrace/introduction.html +79 -0
  39. data/lib/proguard4.7/docs/manual/retrace/usage.html +127 -0
  40. data/lib/proguard4.7/docs/manual/sections.html +60 -0
  41. data/lib/proguard4.7/docs/manual/style.css +105 -0
  42. data/lib/proguard4.7/docs/manual/troubleshooting.html +729 -0
  43. data/lib/proguard4.7/docs/manual/usage.html +1243 -0
  44. data/lib/proguard4.7/docs/manual/wtk.html +70 -0
  45. data/lib/proguard4.7/docs/quality.html +56 -0
  46. data/lib/proguard4.7/docs/results.html +170 -0
  47. data/lib/proguard4.7/docs/saikoalogo.png +0 -0
  48. data/lib/proguard4.7/docs/screenshot_console.gif +0 -0
  49. data/lib/proguard4.7/docs/screenshot_console_small.gif +0 -0
  50. data/lib/proguard4.7/docs/screenshot_gui1.gif +0 -0
  51. data/lib/proguard4.7/docs/screenshot_gui2.gif +0 -0
  52. data/lib/proguard4.7/docs/screenshot_gui3.gif +0 -0
  53. data/lib/proguard4.7/docs/screenshot_gui4.gif +0 -0
  54. data/lib/proguard4.7/docs/screenshot_gui5.gif +0 -0
  55. data/lib/proguard4.7/docs/screenshot_gui6.gif +0 -0
  56. data/lib/proguard4.7/docs/screenshot_gui7.gif +0 -0
  57. data/lib/proguard4.7/docs/screenshot_gui8.gif +0 -0
  58. data/lib/proguard4.7/docs/screenshots.html +67 -0
  59. data/lib/proguard4.7/docs/screenshots_gui_small.gif +0 -0
  60. data/lib/proguard4.7/docs/sections.html +64 -0
  61. data/lib/proguard4.7/docs/sflogo.png +0 -0
  62. data/lib/proguard4.7/docs/steel.gif +0 -0
  63. data/lib/proguard4.7/docs/style.css +223 -0
  64. data/lib/proguard4.7/docs/testimonials.html +133 -0
  65. data/lib/proguard4.7/docs/title.gif +0 -0
  66. data/lib/proguard4.7/docs/title.html +17 -0
  67. data/lib/proguard4.7/examples/android.pro +149 -0
  68. data/lib/proguard4.7/examples/annotations/examples.pro +60 -0
  69. data/lib/proguard4.7/examples/annotations/examples/Applet.java +22 -0
  70. data/lib/proguard4.7/examples/annotations/examples/Application.java +20 -0
  71. data/lib/proguard4.7/examples/annotations/examples/Bean.java +56 -0
  72. data/lib/proguard4.7/examples/annotations/examples/NativeCallBack.java +44 -0
  73. data/lib/proguard4.7/examples/annotations/lib/annotations.jar +0 -0
  74. data/lib/proguard4.7/examples/annotations/lib/annotations.pro +118 -0
  75. data/lib/proguard4.7/examples/annotations/src/proguard/annotation/Keep.java +18 -0
  76. data/lib/proguard4.7/examples/annotations/src/proguard/annotation/KeepApplication.java +18 -0
  77. data/lib/proguard4.7/examples/annotations/src/proguard/annotation/KeepClassMemberNames.java +18 -0
  78. data/lib/proguard4.7/examples/annotations/src/proguard/annotation/KeepClassMembers.java +18 -0
  79. data/lib/proguard4.7/examples/annotations/src/proguard/annotation/KeepGettersSetters.java +18 -0
  80. data/lib/proguard4.7/examples/annotations/src/proguard/annotation/KeepImplementations.java +18 -0
  81. data/lib/proguard4.7/examples/annotations/src/proguard/annotation/KeepName.java +18 -0
  82. data/lib/proguard4.7/examples/annotations/src/proguard/annotation/KeepPublicClassMemberNames.java +18 -0
  83. data/lib/proguard4.7/examples/annotations/src/proguard/annotation/KeepPublicClassMembers.java +18 -0
  84. data/lib/proguard4.7/examples/annotations/src/proguard/annotation/KeepPublicGettersSetters.java +18 -0
  85. data/lib/proguard4.7/examples/annotations/src/proguard/annotation/KeepPublicImplementations.java +18 -0
  86. data/lib/proguard4.7/examples/annotations/src/proguard/annotation/KeepPublicProtectedClassMemberNames.java +18 -0
  87. data/lib/proguard4.7/examples/annotations/src/proguard/annotation/KeepPublicProtectedClassMembers.java +19 -0
  88. data/lib/proguard4.7/examples/ant/android-8.xml +177 -0
  89. data/lib/proguard4.7/examples/ant/applets.xml +88 -0
  90. data/lib/proguard4.7/examples/ant/applications1.xml +15 -0
  91. data/lib/proguard4.7/examples/ant/applications2.xml +74 -0
  92. data/lib/proguard4.7/examples/ant/applications3.xml +98 -0
  93. data/lib/proguard4.7/examples/ant/library.xml +102 -0
  94. data/lib/proguard4.7/examples/ant/midlets.xml +52 -0
  95. data/lib/proguard4.7/examples/ant/proguard.xml +78 -0
  96. data/lib/proguard4.7/examples/ant/servlets.xml +88 -0
  97. data/lib/proguard4.7/examples/applets.pro +69 -0
  98. data/lib/proguard4.7/examples/applications.pro +75 -0
  99. data/lib/proguard4.7/examples/dictionaries/compact.txt +18 -0
  100. data/lib/proguard4.7/examples/dictionaries/keywords.txt +58 -0
  101. data/lib/proguard4.7/examples/dictionaries/shakespeare.txt +23 -0
  102. data/lib/proguard4.7/examples/dictionaries/windows.txt +209 -0
  103. data/lib/proguard4.7/examples/library.pro +79 -0
  104. data/lib/proguard4.7/examples/midlets.pro +67 -0
  105. data/lib/proguard4.7/examples/proguard.pro +57 -0
  106. data/lib/proguard4.7/examples/proguardall.pro +62 -0
  107. data/lib/proguard4.7/examples/proguardgui.pro +50 -0
  108. data/lib/proguard4.7/examples/retrace.pro +43 -0
  109. data/lib/proguard4.7/examples/scala.pro +132 -0
  110. data/lib/proguard4.7/examples/servlets.pro +70 -0
  111. data/lib/proguard4.7/lib/proguard.jar +0 -0
  112. data/lib/proguard4.7/lib/proguardgui.jar +0 -0
  113. data/lib/proguard4.7/lib/retrace.jar +0 -0
  114. data/lib/proguard4.7/src/proguard/ArgumentWordReader.java +111 -0
  115. data/lib/proguard4.7/src/proguard/ClassPath.java +94 -0
  116. data/lib/proguard4.7/src/proguard/ClassPathEntry.java +282 -0
  117. data/lib/proguard4.7/src/proguard/ClassSpecification.java +259 -0
  118. data/lib/proguard4.7/src/proguard/ClassSpecificationVisitorFactory.java +503 -0
  119. data/lib/proguard4.7/src/proguard/Configuration.java +328 -0
  120. data/lib/proguard4.7/src/proguard/ConfigurationConstants.java +123 -0
  121. data/lib/proguard4.7/src/proguard/ConfigurationParser.java +1285 -0
  122. data/lib/proguard4.7/src/proguard/ConfigurationWriter.java +651 -0
  123. data/lib/proguard4.7/src/proguard/DataEntryReaderFactory.java +141 -0
  124. data/lib/proguard4.7/src/proguard/DataEntryWriterFactory.java +150 -0
  125. data/lib/proguard4.7/src/proguard/DescriptorKeepChecker.java +169 -0
  126. data/lib/proguard4.7/src/proguard/DuplicateClassPrinter.java +63 -0
  127. data/lib/proguard4.7/src/proguard/FileWordReader.java +55 -0
  128. data/lib/proguard4.7/src/proguard/FullyQualifiedClassNameChecker.java +191 -0
  129. data/lib/proguard4.7/src/proguard/GPL.java +197 -0
  130. data/lib/proguard4.7/src/proguard/Initializer.java +424 -0
  131. data/lib/proguard4.7/src/proguard/InputReader.java +233 -0
  132. data/lib/proguard4.7/src/proguard/KeepClassMemberChecker.java +87 -0
  133. data/lib/proguard4.7/src/proguard/KeepClassSpecification.java +137 -0
  134. data/lib/proguard4.7/src/proguard/LineWordReader.java +74 -0
  135. data/lib/proguard4.7/src/proguard/MANIFEST.MF +2 -0
  136. data/lib/proguard4.7/src/proguard/MemberSpecification.java +114 -0
  137. data/lib/proguard4.7/src/proguard/OutputWriter.java +296 -0
  138. data/lib/proguard4.7/src/proguard/ParseException.java +51 -0
  139. data/lib/proguard4.7/src/proguard/ProGuard.java +512 -0
  140. data/lib/proguard4.7/src/proguard/SeedPrinter.java +97 -0
  141. data/lib/proguard4.7/src/proguard/SubclassedClassFilter.java +62 -0
  142. data/lib/proguard4.7/src/proguard/Targeter.java +88 -0
  143. data/lib/proguard4.7/src/proguard/UpToDateChecker.java +232 -0
  144. data/lib/proguard4.7/src/proguard/WordReader.java +387 -0
  145. data/lib/proguard4.7/src/proguard/ant/ClassPathElement.java +191 -0
  146. data/lib/proguard4.7/src/proguard/ant/ClassSpecificationElement.java +258 -0
  147. data/lib/proguard4.7/src/proguard/ant/ConfigurationElement.java +53 -0
  148. data/lib/proguard4.7/src/proguard/ant/ConfigurationTask.java +441 -0
  149. data/lib/proguard4.7/src/proguard/ant/FilterElement.java +85 -0
  150. data/lib/proguard4.7/src/proguard/ant/KeepSpecificationElement.java +87 -0
  151. data/lib/proguard4.7/src/proguard/ant/MemberSpecificationElement.java +218 -0
  152. data/lib/proguard4.7/src/proguard/ant/ProGuardTask.java +352 -0
  153. data/lib/proguard4.7/src/proguard/ant/package.html +3 -0
  154. data/lib/proguard4.7/src/proguard/ant/task.properties +2 -0
  155. data/lib/proguard4.7/src/proguard/classfile/ClassConstants.java +316 -0
  156. data/lib/proguard4.7/src/proguard/classfile/ClassPool.java +152 -0
  157. data/lib/proguard4.7/src/proguard/classfile/Clazz.java +261 -0
  158. data/lib/proguard4.7/src/proguard/classfile/Field.java +32 -0
  159. data/lib/proguard4.7/src/proguard/classfile/LibraryClass.java +548 -0
  160. data/lib/proguard4.7/src/proguard/classfile/LibraryField.java +77 -0
  161. data/lib/proguard4.7/src/proguard/classfile/LibraryMember.java +108 -0
  162. data/lib/proguard4.7/src/proguard/classfile/LibraryMethod.java +83 -0
  163. data/lib/proguard4.7/src/proguard/classfile/Member.java +57 -0
  164. data/lib/proguard4.7/src/proguard/classfile/Method.java +32 -0
  165. data/lib/proguard4.7/src/proguard/classfile/ProgramClass.java +572 -0
  166. data/lib/proguard4.7/src/proguard/classfile/ProgramField.java +93 -0
  167. data/lib/proguard4.7/src/proguard/classfile/ProgramMember.java +168 -0
  168. data/lib/proguard4.7/src/proguard/classfile/ProgramMethod.java +99 -0
  169. data/lib/proguard4.7/src/proguard/classfile/VisitorAccepter.java +47 -0
  170. data/lib/proguard4.7/src/proguard/classfile/attribute/Attribute.java +142 -0
  171. data/lib/proguard4.7/src/proguard/classfile/attribute/BootstrapMethodInfo.java +89 -0
  172. data/lib/proguard4.7/src/proguard/classfile/attribute/BootstrapMethodsAttribute.java +95 -0
  173. data/lib/proguard4.7/src/proguard/classfile/attribute/CodeAttribute.java +202 -0
  174. data/lib/proguard4.7/src/proguard/classfile/attribute/ConstantValueAttribute.java +62 -0
  175. data/lib/proguard4.7/src/proguard/classfile/attribute/DeprecatedAttribute.java +66 -0
  176. data/lib/proguard4.7/src/proguard/classfile/attribute/EnclosingMethodAttribute.java +132 -0
  177. data/lib/proguard4.7/src/proguard/classfile/attribute/ExceptionInfo.java +100 -0
  178. data/lib/proguard4.7/src/proguard/classfile/attribute/ExceptionsAttribute.java +80 -0
  179. data/lib/proguard4.7/src/proguard/classfile/attribute/InnerClassesAttribute.java +80 -0
  180. data/lib/proguard4.7/src/proguard/classfile/attribute/InnerClassesInfo.java +119 -0
  181. data/lib/proguard4.7/src/proguard/classfile/attribute/LineNumberInfo.java +50 -0
  182. data/lib/proguard4.7/src/proguard/classfile/attribute/LineNumberTableAttribute.java +100 -0
  183. data/lib/proguard4.7/src/proguard/classfile/attribute/LocalVariableInfo.java +99 -0
  184. data/lib/proguard4.7/src/proguard/classfile/attribute/LocalVariableTableAttribute.java +79 -0
  185. data/lib/proguard4.7/src/proguard/classfile/attribute/LocalVariableTypeInfo.java +107 -0
  186. data/lib/proguard4.7/src/proguard/classfile/attribute/LocalVariableTypeTableAttribute.java +79 -0
  187. data/lib/proguard4.7/src/proguard/classfile/attribute/SignatureAttribute.java +100 -0
  188. data/lib/proguard4.7/src/proguard/classfile/attribute/SourceDirAttribute.java +62 -0
  189. data/lib/proguard4.7/src/proguard/classfile/attribute/SourceFileAttribute.java +62 -0
  190. data/lib/proguard4.7/src/proguard/classfile/attribute/SyntheticAttribute.java +66 -0
  191. data/lib/proguard4.7/src/proguard/classfile/attribute/UnknownAttribute.java +82 -0
  192. data/lib/proguard4.7/src/proguard/classfile/attribute/annotation/Annotation.java +143 -0
  193. data/lib/proguard4.7/src/proguard/classfile/attribute/annotation/AnnotationDefaultAttribute.java +73 -0
  194. data/lib/proguard4.7/src/proguard/classfile/attribute/annotation/AnnotationElementValue.java +76 -0
  195. data/lib/proguard4.7/src/proguard/classfile/attribute/annotation/AnnotationsAttribute.java +100 -0
  196. data/lib/proguard4.7/src/proguard/classfile/attribute/annotation/ArrayElementValue.java +82 -0
  197. data/lib/proguard4.7/src/proguard/classfile/attribute/annotation/ClassElementValue.java +95 -0
  198. data/lib/proguard4.7/src/proguard/classfile/attribute/annotation/ConstantElementValue.java +71 -0
  199. data/lib/proguard4.7/src/proguard/classfile/attribute/annotation/ElementValue.java +126 -0
  200. data/lib/proguard4.7/src/proguard/classfile/attribute/annotation/EnumConstantElementValue.java +99 -0
  201. data/lib/proguard4.7/src/proguard/classfile/attribute/annotation/ParameterAnnotationsAttribute.java +83 -0
  202. data/lib/proguard4.7/src/proguard/classfile/attribute/annotation/RuntimeInvisibleAnnotationsAttribute.java +70 -0
  203. data/lib/proguard4.7/src/proguard/classfile/attribute/annotation/RuntimeInvisibleParameterAnnotationsAttribute.java +62 -0
  204. data/lib/proguard4.7/src/proguard/classfile/attribute/annotation/RuntimeVisibleAnnotationsAttribute.java +70 -0
  205. data/lib/proguard4.7/src/proguard/classfile/attribute/annotation/RuntimeVisibleParameterAnnotationsAttribute.java +62 -0
  206. data/lib/proguard4.7/src/proguard/classfile/attribute/annotation/package.html +4 -0
  207. data/lib/proguard4.7/src/proguard/classfile/attribute/annotation/visitor/AllAnnotationVisitor.java +100 -0
  208. data/lib/proguard4.7/src/proguard/classfile/attribute/annotation/visitor/AnnotatedClassVisitor.java +62 -0
  209. data/lib/proguard4.7/src/proguard/classfile/attribute/annotation/visitor/AnnotationToMemberVisitor.java +62 -0
  210. data/lib/proguard4.7/src/proguard/classfile/attribute/annotation/visitor/AnnotationTypeFilter.java +102 -0
  211. data/lib/proguard4.7/src/proguard/classfile/attribute/annotation/visitor/AnnotationVisitor.java +40 -0
  212. data/lib/proguard4.7/src/proguard/classfile/attribute/annotation/visitor/ElementValueVisitor.java +51 -0
  213. data/lib/proguard4.7/src/proguard/classfile/attribute/annotation/visitor/package.html +3 -0
  214. data/lib/proguard4.7/src/proguard/classfile/attribute/package.html +3 -0
  215. data/lib/proguard4.7/src/proguard/classfile/attribute/preverification/DoubleType.java +66 -0
  216. data/lib/proguard4.7/src/proguard/classfile/attribute/preverification/FloatType.java +66 -0
  217. data/lib/proguard4.7/src/proguard/classfile/attribute/preverification/FullFrame.java +202 -0
  218. data/lib/proguard4.7/src/proguard/classfile/attribute/preverification/IntegerType.java +66 -0
  219. data/lib/proguard4.7/src/proguard/classfile/attribute/preverification/LessZeroFrame.java +103 -0
  220. data/lib/proguard4.7/src/proguard/classfile/attribute/preverification/LongType.java +66 -0
  221. data/lib/proguard4.7/src/proguard/classfile/attribute/preverification/MoreZeroFrame.java +161 -0
  222. data/lib/proguard4.7/src/proguard/classfile/attribute/preverification/NullType.java +66 -0
  223. data/lib/proguard4.7/src/proguard/classfile/attribute/preverification/ObjectType.java +107 -0
  224. data/lib/proguard4.7/src/proguard/classfile/attribute/preverification/SameOneFrame.java +115 -0
  225. data/lib/proguard4.7/src/proguard/classfile/attribute/preverification/SameZeroFrame.java +74 -0
  226. data/lib/proguard4.7/src/proguard/classfile/attribute/preverification/StackMapAttribute.java +91 -0
  227. data/lib/proguard4.7/src/proguard/classfile/attribute/preverification/StackMapFrame.java +117 -0
  228. data/lib/proguard4.7/src/proguard/classfile/attribute/preverification/StackMapTableAttribute.java +93 -0
  229. data/lib/proguard4.7/src/proguard/classfile/attribute/preverification/TopType.java +66 -0
  230. data/lib/proguard4.7/src/proguard/classfile/attribute/preverification/UninitializedThisType.java +66 -0
  231. data/lib/proguard4.7/src/proguard/classfile/attribute/preverification/UninitializedType.java +106 -0
  232. data/lib/proguard4.7/src/proguard/classfile/attribute/preverification/VerificationType.java +103 -0
  233. data/lib/proguard4.7/src/proguard/classfile/attribute/preverification/VerificationTypeFactory.java +112 -0
  234. data/lib/proguard4.7/src/proguard/classfile/attribute/preverification/visitor/StackMapFrameVisitor.java +40 -0
  235. data/lib/proguard4.7/src/proguard/classfile/attribute/preverification/visitor/VerificationTypeVisitor.java +65 -0
  236. data/lib/proguard4.7/src/proguard/classfile/attribute/visitor/AllAttributeVisitor.java +117 -0
  237. data/lib/proguard4.7/src/proguard/classfile/attribute/visitor/AllBootstrapMethodInfoVisitor.java +55 -0
  238. data/lib/proguard4.7/src/proguard/classfile/attribute/visitor/AllExceptionInfoVisitor.java +55 -0
  239. data/lib/proguard4.7/src/proguard/classfile/attribute/visitor/AllInnerClassesInfoVisitor.java +55 -0
  240. data/lib/proguard4.7/src/proguard/classfile/attribute/visitor/AttributeNameFilter.java +368 -0
  241. data/lib/proguard4.7/src/proguard/classfile/attribute/visitor/AttributeVisitor.java +90 -0
  242. data/lib/proguard4.7/src/proguard/classfile/attribute/visitor/BootstrapMethodInfoVisitor.java +40 -0
  243. data/lib/proguard4.7/src/proguard/classfile/attribute/visitor/ExceptionInfoVisitor.java +37 -0
  244. data/lib/proguard4.7/src/proguard/classfile/attribute/visitor/InnerClassesInfoVisitor.java +38 -0
  245. data/lib/proguard4.7/src/proguard/classfile/attribute/visitor/LineNumberInfoVisitor.java +38 -0
  246. data/lib/proguard4.7/src/proguard/classfile/attribute/visitor/LocalVariableInfoVisitor.java +38 -0
  247. data/lib/proguard4.7/src/proguard/classfile/attribute/visitor/LocalVariableTypeInfoVisitor.java +38 -0
  248. data/lib/proguard4.7/src/proguard/classfile/attribute/visitor/MultiAttributeVisitor.java +365 -0
  249. data/lib/proguard4.7/src/proguard/classfile/attribute/visitor/NonEmptyAttributeFilter.java +293 -0
  250. data/lib/proguard4.7/src/proguard/classfile/attribute/visitor/RequiredAttributeFilter.java +360 -0
  251. data/lib/proguard4.7/src/proguard/classfile/attribute/visitor/StackSizeComputer.java +378 -0
  252. data/lib/proguard4.7/src/proguard/classfile/attribute/visitor/package.html +3 -0
  253. data/lib/proguard4.7/src/proguard/classfile/constant/ClassConstant.java +105 -0
  254. data/lib/proguard4.7/src/proguard/classfile/constant/Constant.java +68 -0
  255. data/lib/proguard4.7/src/proguard/classfile/constant/DoubleConstant.java +82 -0
  256. data/lib/proguard4.7/src/proguard/classfile/constant/FieldrefConstant.java +71 -0
  257. data/lib/proguard4.7/src/proguard/classfile/constant/FloatConstant.java +82 -0
  258. data/lib/proguard4.7/src/proguard/classfile/constant/IntegerConstant.java +82 -0
  259. data/lib/proguard4.7/src/proguard/classfile/constant/InterfaceMethodrefConstant.java +71 -0
  260. data/lib/proguard4.7/src/proguard/classfile/constant/InvokeDynamicConstant.java +148 -0
  261. data/lib/proguard4.7/src/proguard/classfile/constant/LongConstant.java +82 -0
  262. data/lib/proguard4.7/src/proguard/classfile/constant/MethodHandleConstant.java +124 -0
  263. data/lib/proguard4.7/src/proguard/classfile/constant/MethodTypeConstant.java +93 -0
  264. data/lib/proguard4.7/src/proguard/classfile/constant/MethodrefConstant.java +71 -0
  265. data/lib/proguard4.7/src/proguard/classfile/constant/NameAndTypeConstant.java +119 -0
  266. data/lib/proguard4.7/src/proguard/classfile/constant/RefConstant.java +130 -0
  267. data/lib/proguard4.7/src/proguard/classfile/constant/StringConstant.java +135 -0
  268. data/lib/proguard4.7/src/proguard/classfile/constant/Utf8Constant.java +285 -0
  269. data/lib/proguard4.7/src/proguard/classfile/constant/visitor/AllConstantVisitor.java +53 -0
  270. data/lib/proguard4.7/src/proguard/classfile/constant/visitor/BootstrapMethodHandleTraveler.java +100 -0
  271. data/lib/proguard4.7/src/proguard/classfile/constant/visitor/ConstantTagFilter.java +86 -0
  272. data/lib/proguard4.7/src/proguard/classfile/constant/visitor/ConstantVisitor.java +49 -0
  273. data/lib/proguard4.7/src/proguard/classfile/constant/visitor/ExceptClassConstantFilter.java +69 -0
  274. data/lib/proguard4.7/src/proguard/classfile/constant/visitor/MethodrefTraveler.java +60 -0
  275. data/lib/proguard4.7/src/proguard/classfile/constant/visitor/package.html +3 -0
  276. data/lib/proguard4.7/src/proguard/classfile/editor/AccessFixer.java +180 -0
  277. data/lib/proguard4.7/src/proguard/classfile/editor/AnnotationAdder.java +153 -0
  278. data/lib/proguard4.7/src/proguard/classfile/editor/AnnotationsAttributeEditor.java +67 -0
  279. data/lib/proguard4.7/src/proguard/classfile/editor/AttributeAdder.java +457 -0
  280. data/lib/proguard4.7/src/proguard/classfile/editor/AttributeSorter.java +89 -0
  281. data/lib/proguard4.7/src/proguard/classfile/editor/AttributesEditor.java +269 -0
  282. data/lib/proguard4.7/src/proguard/classfile/editor/BridgeMethodFixer.java +117 -0
  283. data/lib/proguard4.7/src/proguard/classfile/editor/ClassEditor.java +255 -0
  284. data/lib/proguard4.7/src/proguard/classfile/editor/ClassElementSorter.java +52 -0
  285. data/lib/proguard4.7/src/proguard/classfile/editor/ClassMemberSorter.java +69 -0
  286. data/lib/proguard4.7/src/proguard/classfile/editor/ClassReferenceFixer.java +546 -0
  287. data/lib/proguard4.7/src/proguard/classfile/editor/CodeAttributeComposer.java +843 -0
  288. data/lib/proguard4.7/src/proguard/classfile/editor/CodeAttributeEditor.java +1104 -0
  289. data/lib/proguard4.7/src/proguard/classfile/editor/CodeAttributeEditorResetter.java +60 -0
  290. data/lib/proguard4.7/src/proguard/classfile/editor/ComparableConstant.java +249 -0
  291. data/lib/proguard4.7/src/proguard/classfile/editor/ConstantAdder.java +239 -0
  292. data/lib/proguard4.7/src/proguard/classfile/editor/ConstantPoolEditor.java +782 -0
  293. data/lib/proguard4.7/src/proguard/classfile/editor/ConstantPoolRemapper.java +662 -0
  294. data/lib/proguard4.7/src/proguard/classfile/editor/ConstantPoolShrinker.java +578 -0
  295. data/lib/proguard4.7/src/proguard/classfile/editor/ConstantPoolSorter.java +123 -0
  296. data/lib/proguard4.7/src/proguard/classfile/editor/ElementValueAdder.java +217 -0
  297. data/lib/proguard4.7/src/proguard/classfile/editor/ElementValuesEditor.java +238 -0
  298. data/lib/proguard4.7/src/proguard/classfile/editor/ExceptionAdder.java +65 -0
  299. data/lib/proguard4.7/src/proguard/classfile/editor/ExceptionInfoAdder.java +67 -0
  300. data/lib/proguard4.7/src/proguard/classfile/editor/ExceptionsAttributeEditor.java +68 -0
  301. data/lib/proguard4.7/src/proguard/classfile/editor/InnerClassesAccessFixer.java +83 -0
  302. data/lib/proguard4.7/src/proguard/classfile/editor/InstructionAdder.java +76 -0
  303. data/lib/proguard4.7/src/proguard/classfile/editor/InstructionWriter.java +278 -0
  304. data/lib/proguard4.7/src/proguard/classfile/editor/InterfaceAdder.java +62 -0
  305. data/lib/proguard4.7/src/proguard/classfile/editor/InterfaceSorter.java +152 -0
  306. data/lib/proguard4.7/src/proguard/classfile/editor/InterfacesEditor.java +122 -0
  307. data/lib/proguard4.7/src/proguard/classfile/editor/LineNumberInfoAdder.java +59 -0
  308. data/lib/proguard4.7/src/proguard/classfile/editor/LineNumberTableAttributeEditor.java +67 -0
  309. data/lib/proguard4.7/src/proguard/classfile/editor/LocalVariableInfoAdder.java +67 -0
  310. data/lib/proguard4.7/src/proguard/classfile/editor/LocalVariableTableAttributeEditor.java +67 -0
  311. data/lib/proguard4.7/src/proguard/classfile/editor/LocalVariableTypeInfoAdder.java +68 -0
  312. data/lib/proguard4.7/src/proguard/classfile/editor/LocalVariableTypeTableAttributeEditor.java +68 -0
  313. data/lib/proguard4.7/src/proguard/classfile/editor/MemberAdder.java +288 -0
  314. data/lib/proguard4.7/src/proguard/classfile/editor/MemberReferenceFixer.java +447 -0
  315. data/lib/proguard4.7/src/proguard/classfile/editor/MethodInvocationFixer.java +243 -0
  316. data/lib/proguard4.7/src/proguard/classfile/editor/NameAndTypeShrinker.java +188 -0
  317. data/lib/proguard4.7/src/proguard/classfile/editor/NamedAttributeDeleter.java +54 -0
  318. data/lib/proguard4.7/src/proguard/classfile/editor/ParameterAnnotationsAttributeEditor.java +71 -0
  319. data/lib/proguard4.7/src/proguard/classfile/editor/StackSizeUpdater.java +54 -0
  320. data/lib/proguard4.7/src/proguard/classfile/editor/SubclassAdder.java +59 -0
  321. data/lib/proguard4.7/src/proguard/classfile/editor/SubclassToAdder.java +60 -0
  322. data/lib/proguard4.7/src/proguard/classfile/editor/Utf8Shrinker.java +455 -0
  323. data/lib/proguard4.7/src/proguard/classfile/editor/VariableCleaner.java +267 -0
  324. data/lib/proguard4.7/src/proguard/classfile/editor/VariableEditor.java +130 -0
  325. data/lib/proguard4.7/src/proguard/classfile/editor/VariableRemapper.java +156 -0
  326. data/lib/proguard4.7/src/proguard/classfile/editor/VariableSizeUpdater.java +105 -0
  327. data/lib/proguard4.7/src/proguard/classfile/editor/package.html +3 -0
  328. data/lib/proguard4.7/src/proguard/classfile/instruction/BranchInstruction.java +180 -0
  329. data/lib/proguard4.7/src/proguard/classfile/instruction/ConstantInstruction.java +309 -0
  330. data/lib/proguard4.7/src/proguard/classfile/instruction/Instruction.java +920 -0
  331. data/lib/proguard4.7/src/proguard/classfile/instruction/InstructionConstants.java +449 -0
  332. data/lib/proguard4.7/src/proguard/classfile/instruction/InstructionFactory.java +300 -0
  333. data/lib/proguard4.7/src/proguard/classfile/instruction/InstructionUtil.java +67 -0
  334. data/lib/proguard4.7/src/proguard/classfile/instruction/LookUpSwitchInstruction.java +135 -0
  335. data/lib/proguard4.7/src/proguard/classfile/instruction/SimpleInstruction.java +255 -0
  336. data/lib/proguard4.7/src/proguard/classfile/instruction/SwitchInstruction.java +83 -0
  337. data/lib/proguard4.7/src/proguard/classfile/instruction/TableSwitchInstruction.java +139 -0
  338. data/lib/proguard4.7/src/proguard/classfile/instruction/VariableInstruction.java +372 -0
  339. data/lib/proguard4.7/src/proguard/classfile/instruction/package.html +9 -0
  340. data/lib/proguard4.7/src/proguard/classfile/instruction/visitor/AllInstructionVisitor.java +56 -0
  341. data/lib/proguard4.7/src/proguard/classfile/instruction/visitor/InstructionCounter.java +59 -0
  342. data/lib/proguard4.7/src/proguard/classfile/instruction/visitor/InstructionVisitor.java +42 -0
  343. data/lib/proguard4.7/src/proguard/classfile/instruction/visitor/MultiInstructionVisitor.java +131 -0
  344. data/lib/proguard4.7/src/proguard/classfile/instruction/visitor/package.html +3 -0
  345. data/lib/proguard4.7/src/proguard/classfile/io/LibraryClassReader.java +383 -0
  346. data/lib/proguard4.7/src/proguard/classfile/io/ProgramClassReader.java +919 -0
  347. data/lib/proguard4.7/src/proguard/classfile/io/ProgramClassWriter.java +735 -0
  348. data/lib/proguard4.7/src/proguard/classfile/io/RuntimeDataInput.java +223 -0
  349. data/lib/proguard4.7/src/proguard/classfile/io/RuntimeDataOutput.java +224 -0
  350. data/lib/proguard4.7/src/proguard/classfile/io/package.html +3 -0
  351. data/lib/proguard4.7/src/proguard/classfile/package.html +15 -0
  352. data/lib/proguard4.7/src/proguard/classfile/util/AccessUtil.java +105 -0
  353. data/lib/proguard4.7/src/proguard/classfile/util/ClassReferenceInitializer.java +559 -0
  354. data/lib/proguard4.7/src/proguard/classfile/util/ClassSubHierarchyInitializer.java +77 -0
  355. data/lib/proguard4.7/src/proguard/classfile/util/ClassSuperHierarchyInitializer.java +163 -0
  356. data/lib/proguard4.7/src/proguard/classfile/util/ClassUtil.java +1227 -0
  357. data/lib/proguard4.7/src/proguard/classfile/util/DescriptorClassEnumeration.java +236 -0
  358. data/lib/proguard4.7/src/proguard/classfile/util/DynamicClassReferenceInitializer.java +485 -0
  359. data/lib/proguard4.7/src/proguard/classfile/util/DynamicMemberReferenceInitializer.java +944 -0
  360. data/lib/proguard4.7/src/proguard/classfile/util/ExternalTypeEnumeration.java +106 -0
  361. data/lib/proguard4.7/src/proguard/classfile/util/InstructionSequenceMatcher.java +754 -0
  362. data/lib/proguard4.7/src/proguard/classfile/util/InternalTypeEnumeration.java +204 -0
  363. data/lib/proguard4.7/src/proguard/classfile/util/MemberFinder.java +197 -0
  364. data/lib/proguard4.7/src/proguard/classfile/util/MethodLinker.java +160 -0
  365. data/lib/proguard4.7/src/proguard/classfile/util/SimplifiedVisitor.java +834 -0
  366. data/lib/proguard4.7/src/proguard/classfile/util/StringReferenceInitializer.java +90 -0
  367. data/lib/proguard4.7/src/proguard/classfile/util/StringSharer.java +172 -0
  368. data/lib/proguard4.7/src/proguard/classfile/util/WarningPrinter.java +136 -0
  369. data/lib/proguard4.7/src/proguard/classfile/util/package.html +3 -0
  370. data/lib/proguard4.7/src/proguard/classfile/visitor/AllClassVisitor.java +47 -0
  371. data/lib/proguard4.7/src/proguard/classfile/visitor/AllFieldVisitor.java +55 -0
  372. data/lib/proguard4.7/src/proguard/classfile/visitor/AllMemberVisitor.java +57 -0
  373. data/lib/proguard4.7/src/proguard/classfile/visitor/AllMethodVisitor.java +55 -0
  374. data/lib/proguard4.7/src/proguard/classfile/visitor/BottomClassFilter.java +69 -0
  375. data/lib/proguard4.7/src/proguard/classfile/visitor/ClassAccessFilter.java +88 -0
  376. data/lib/proguard4.7/src/proguard/classfile/visitor/ClassCleaner.java +275 -0
  377. data/lib/proguard4.7/src/proguard/classfile/visitor/ClassCollector.java +58 -0
  378. data/lib/proguard4.7/src/proguard/classfile/visitor/ClassCounter.java +56 -0
  379. data/lib/proguard4.7/src/proguard/classfile/visitor/ClassHierarchyTraveler.java +91 -0
  380. data/lib/proguard4.7/src/proguard/classfile/visitor/ClassNameFilter.java +112 -0
  381. data/lib/proguard4.7/src/proguard/classfile/visitor/ClassPoolFiller.java +55 -0
  382. data/lib/proguard4.7/src/proguard/classfile/visitor/ClassPoolVisitor.java +37 -0
  383. data/lib/proguard4.7/src/proguard/classfile/visitor/ClassPresenceFilter.java +93 -0
  384. data/lib/proguard4.7/src/proguard/classfile/visitor/ClassPrinter.java +1011 -0
  385. data/lib/proguard4.7/src/proguard/classfile/visitor/ClassVersionFilter.java +85 -0
  386. data/lib/proguard4.7/src/proguard/classfile/visitor/ClassVersionSetter.java +83 -0
  387. data/lib/proguard4.7/src/proguard/classfile/visitor/ClassVisitor.java +36 -0
  388. data/lib/proguard4.7/src/proguard/classfile/visitor/ConcreteClassDownTraveler.java +100 -0
  389. data/lib/proguard4.7/src/proguard/classfile/visitor/DotClassClassVisitor.java +89 -0
  390. data/lib/proguard4.7/src/proguard/classfile/visitor/ExceptClassFilter.java +69 -0
  391. data/lib/proguard4.7/src/proguard/classfile/visitor/ExceptClassesFilter.java +90 -0
  392. data/lib/proguard4.7/src/proguard/classfile/visitor/ExceptionCounter.java +52 -0
  393. data/lib/proguard4.7/src/proguard/classfile/visitor/ExceptionExcludedOffsetFilter.java +64 -0
  394. data/lib/proguard4.7/src/proguard/classfile/visitor/ExceptionHandlerConstantVisitor.java +62 -0
  395. data/lib/proguard4.7/src/proguard/classfile/visitor/ExceptionHandlerFilter.java +70 -0
  396. data/lib/proguard4.7/src/proguard/classfile/visitor/ExceptionOffsetFilter.java +64 -0
  397. data/lib/proguard4.7/src/proguard/classfile/visitor/ExceptionRangeFilter.java +68 -0
  398. data/lib/proguard4.7/src/proguard/classfile/visitor/ImplementedClassConstantFilter.java +69 -0
  399. data/lib/proguard4.7/src/proguard/classfile/visitor/ImplementedClassFilter.java +71 -0
  400. data/lib/proguard4.7/src/proguard/classfile/visitor/ImplementingClassConstantFilter.java +70 -0
  401. data/lib/proguard4.7/src/proguard/classfile/visitor/LibraryClassFilter.java +60 -0
  402. data/lib/proguard4.7/src/proguard/classfile/visitor/LibraryMemberFilter.java +73 -0
  403. data/lib/proguard4.7/src/proguard/classfile/visitor/MemberAccessFilter.java +122 -0
  404. data/lib/proguard4.7/src/proguard/classfile/visitor/MemberClassAccessFilter.java +106 -0
  405. data/lib/proguard4.7/src/proguard/classfile/visitor/MemberCollector.java +59 -0
  406. data/lib/proguard4.7/src/proguard/classfile/visitor/MemberCounter.java +72 -0
  407. data/lib/proguard4.7/src/proguard/classfile/visitor/MemberDescriptorFilter.java +113 -0
  408. data/lib/proguard4.7/src/proguard/classfile/visitor/MemberNameFilter.java +113 -0
  409. data/lib/proguard4.7/src/proguard/classfile/visitor/MemberToClassVisitor.java +90 -0
  410. data/lib/proguard4.7/src/proguard/classfile/visitor/MemberVisitor.java +40 -0
  411. data/lib/proguard4.7/src/proguard/classfile/visitor/MethodImplementationFilter.java +70 -0
  412. data/lib/proguard4.7/src/proguard/classfile/visitor/MethodImplementationTraveler.java +128 -0
  413. data/lib/proguard4.7/src/proguard/classfile/visitor/MultiClassPoolVisitor.java +88 -0
  414. data/lib/proguard4.7/src/proguard/classfile/visitor/MultiClassVisitor.java +97 -0
  415. data/lib/proguard4.7/src/proguard/classfile/visitor/MultiMemberVisitor.java +113 -0
  416. data/lib/proguard4.7/src/proguard/classfile/visitor/NamedClassVisitor.java +49 -0
  417. data/lib/proguard4.7/src/proguard/classfile/visitor/NamedFieldVisitor.java +61 -0
  418. data/lib/proguard4.7/src/proguard/classfile/visitor/NamedMethodVisitor.java +61 -0
  419. data/lib/proguard4.7/src/proguard/classfile/visitor/ProgramClassFilter.java +60 -0
  420. data/lib/proguard4.7/src/proguard/classfile/visitor/ProgramMemberFilter.java +73 -0
  421. data/lib/proguard4.7/src/proguard/classfile/visitor/ReferencedClassVisitor.java +255 -0
  422. data/lib/proguard4.7/src/proguard/classfile/visitor/ReferencedMemberVisitor.java +73 -0
  423. data/lib/proguard4.7/src/proguard/classfile/visitor/SimilarMemberVisitor.java +125 -0
  424. data/lib/proguard4.7/src/proguard/classfile/visitor/SimpleClassPrinter.java +167 -0
  425. data/lib/proguard4.7/src/proguard/classfile/visitor/SubclassFilter.java +91 -0
  426. data/lib/proguard4.7/src/proguard/classfile/visitor/SubclassTraveler.java +60 -0
  427. data/lib/proguard4.7/src/proguard/classfile/visitor/VariableClassVisitor.java +78 -0
  428. data/lib/proguard4.7/src/proguard/classfile/visitor/VariableMemberVisitor.java +96 -0
  429. data/lib/proguard4.7/src/proguard/classfile/visitor/package.html +40 -0
  430. data/lib/proguard4.7/src/proguard/evaluation/BasicBranchUnit.java +126 -0
  431. data/lib/proguard4.7/src/proguard/evaluation/BasicInvocationUnit.java +425 -0
  432. data/lib/proguard4.7/src/proguard/evaluation/BranchUnit.java +63 -0
  433. data/lib/proguard4.7/src/proguard/evaluation/ClassConstantValueFactory.java +53 -0
  434. data/lib/proguard4.7/src/proguard/evaluation/ConstantValueFactory.java +113 -0
  435. data/lib/proguard4.7/src/proguard/evaluation/InvocationUnit.java +62 -0
  436. data/lib/proguard4.7/src/proguard/evaluation/Processor.java +908 -0
  437. data/lib/proguard4.7/src/proguard/evaluation/Stack.java +560 -0
  438. data/lib/proguard4.7/src/proguard/evaluation/TracedStack.java +342 -0
  439. data/lib/proguard4.7/src/proguard/evaluation/TracedVariables.java +199 -0
  440. data/lib/proguard4.7/src/proguard/evaluation/Variables.java +347 -0
  441. data/lib/proguard4.7/src/proguard/evaluation/value/Category1Value.java +41 -0
  442. data/lib/proguard4.7/src/proguard/evaluation/value/Category2Value.java +41 -0
  443. data/lib/proguard4.7/src/proguard/evaluation/value/ComparisonValue.java +69 -0
  444. data/lib/proguard4.7/src/proguard/evaluation/value/CompositeDoubleValue.java +81 -0
  445. data/lib/proguard4.7/src/proguard/evaluation/value/CompositeFloatValue.java +81 -0
  446. data/lib/proguard4.7/src/proguard/evaluation/value/CompositeIntegerValue.java +87 -0
  447. data/lib/proguard4.7/src/proguard/evaluation/value/CompositeLongValue.java +87 -0
  448. data/lib/proguard4.7/src/proguard/evaluation/value/ConvertedByteValue.java +64 -0
  449. data/lib/proguard4.7/src/proguard/evaluation/value/ConvertedCharacterValue.java +64 -0
  450. data/lib/proguard4.7/src/proguard/evaluation/value/ConvertedDoubleValue.java +64 -0
  451. data/lib/proguard4.7/src/proguard/evaluation/value/ConvertedFloatValue.java +64 -0
  452. data/lib/proguard4.7/src/proguard/evaluation/value/ConvertedIntegerValue.java +64 -0
  453. data/lib/proguard4.7/src/proguard/evaluation/value/ConvertedLongValue.java +64 -0
  454. data/lib/proguard4.7/src/proguard/evaluation/value/ConvertedShortValue.java +64 -0
  455. data/lib/proguard4.7/src/proguard/evaluation/value/DoubleValue.java +359 -0
  456. data/lib/proguard4.7/src/proguard/evaluation/value/FloatValue.java +359 -0
  457. data/lib/proguard4.7/src/proguard/evaluation/value/IdentifiedDoubleValue.java +67 -0
  458. data/lib/proguard4.7/src/proguard/evaluation/value/IdentifiedFloatValue.java +67 -0
  459. data/lib/proguard4.7/src/proguard/evaluation/value/IdentifiedIntegerValue.java +67 -0
  460. data/lib/proguard4.7/src/proguard/evaluation/value/IdentifiedLongValue.java +67 -0
  461. data/lib/proguard4.7/src/proguard/evaluation/value/IdentifiedReferenceValue.java +102 -0
  462. data/lib/proguard4.7/src/proguard/evaluation/value/IdentifiedValueFactory.java +75 -0
  463. data/lib/proguard4.7/src/proguard/evaluation/value/InstructionOffsetValue.java +307 -0
  464. data/lib/proguard4.7/src/proguard/evaluation/value/IntegerValue.java +1002 -0
  465. data/lib/proguard4.7/src/proguard/evaluation/value/LongValue.java +554 -0
  466. data/lib/proguard4.7/src/proguard/evaluation/value/NegatedDoubleValue.java +71 -0
  467. data/lib/proguard4.7/src/proguard/evaluation/value/NegatedFloatValue.java +71 -0
  468. data/lib/proguard4.7/src/proguard/evaluation/value/NegatedIntegerValue.java +71 -0
  469. data/lib/proguard4.7/src/proguard/evaluation/value/NegatedLongValue.java +71 -0
  470. data/lib/proguard4.7/src/proguard/evaluation/value/ParticularDoubleValue.java +216 -0
  471. data/lib/proguard4.7/src/proguard/evaluation/value/ParticularFloatValue.java +216 -0
  472. data/lib/proguard4.7/src/proguard/evaluation/value/ParticularIntegerValue.java +383 -0
  473. data/lib/proguard4.7/src/proguard/evaluation/value/ParticularLongValue.java +271 -0
  474. data/lib/proguard4.7/src/proguard/evaluation/value/ReferenceValue.java +540 -0
  475. data/lib/proguard4.7/src/proguard/evaluation/value/SpecificDoubleValue.java +186 -0
  476. data/lib/proguard4.7/src/proguard/evaluation/value/SpecificFloatValue.java +186 -0
  477. data/lib/proguard4.7/src/proguard/evaluation/value/SpecificIntegerValue.java +354 -0
  478. data/lib/proguard4.7/src/proguard/evaluation/value/SpecificLongValue.java +259 -0
  479. data/lib/proguard4.7/src/proguard/evaluation/value/SpecificValueFactory.java +97 -0
  480. data/lib/proguard4.7/src/proguard/evaluation/value/TopValue.java +79 -0
  481. data/lib/proguard4.7/src/proguard/evaluation/value/UnknownDoubleValue.java +125 -0
  482. data/lib/proguard4.7/src/proguard/evaluation/value/UnknownFloatValue.java +125 -0
  483. data/lib/proguard4.7/src/proguard/evaluation/value/UnknownIntegerValue.java +216 -0
  484. data/lib/proguard4.7/src/proguard/evaluation/value/UnknownLongValue.java +160 -0
  485. data/lib/proguard4.7/src/proguard/evaluation/value/Value.java +169 -0
  486. data/lib/proguard4.7/src/proguard/evaluation/value/ValueFactory.java +193 -0
  487. data/lib/proguard4.7/src/proguard/evaluation/value/package.html +3 -0
  488. data/lib/proguard4.7/src/proguard/gui/ClassPathPanel.java +441 -0
  489. data/lib/proguard4.7/src/proguard/gui/ClassSpecificationDialog.java +546 -0
  490. data/lib/proguard4.7/src/proguard/gui/ClassSpecificationsPanel.java +231 -0
  491. data/lib/proguard4.7/src/proguard/gui/ExtensionFileFilter.java +78 -0
  492. data/lib/proguard4.7/src/proguard/gui/FilterBuilder.java +208 -0
  493. data/lib/proguard4.7/src/proguard/gui/FilterDialog.java +320 -0
  494. data/lib/proguard4.7/src/proguard/gui/GUIResources.java +56 -0
  495. data/lib/proguard4.7/src/proguard/gui/GUIResources.properties +643 -0
  496. data/lib/proguard4.7/src/proguard/gui/KeepSpecificationsPanel.java +81 -0
  497. data/lib/proguard4.7/src/proguard/gui/ListPanel.java +341 -0
  498. data/lib/proguard4.7/src/proguard/gui/MANIFEST.MF +3 -0
  499. data/lib/proguard4.7/src/proguard/gui/MemberSpecificationDialog.java +509 -0
  500. data/lib/proguard4.7/src/proguard/gui/MemberSpecificationsPanel.java +304 -0
  501. data/lib/proguard4.7/src/proguard/gui/MessageDialogRunnable.java +90 -0
  502. data/lib/proguard4.7/src/proguard/gui/OptimizationsDialog.java +251 -0
  503. data/lib/proguard4.7/src/proguard/gui/ProGuardGUI.java +1777 -0
  504. data/lib/proguard4.7/src/proguard/gui/ProGuardRunnable.java +154 -0
  505. data/lib/proguard4.7/src/proguard/gui/ReTraceRunnable.java +149 -0
  506. data/lib/proguard4.7/src/proguard/gui/SwingUtil.java +82 -0
  507. data/lib/proguard4.7/src/proguard/gui/TabbedPane.java +229 -0
  508. data/lib/proguard4.7/src/proguard/gui/TextAreaOutputStream.java +81 -0
  509. data/lib/proguard4.7/src/proguard/gui/arrow.gif +0 -0
  510. data/lib/proguard4.7/src/proguard/gui/boilerplate.pro +410 -0
  511. data/lib/proguard4.7/src/proguard/gui/default.pro +318 -0
  512. data/lib/proguard4.7/src/proguard/gui/package.html +3 -0
  513. data/lib/proguard4.7/src/proguard/gui/splash/BufferedSprite.java +145 -0
  514. data/lib/proguard4.7/src/proguard/gui/splash/CircleSprite.java +74 -0
  515. data/lib/proguard4.7/src/proguard/gui/splash/ClipSprite.java +85 -0
  516. data/lib/proguard4.7/src/proguard/gui/splash/ColorSprite.java +65 -0
  517. data/lib/proguard4.7/src/proguard/gui/splash/CompositeSprite.java +56 -0
  518. data/lib/proguard4.7/src/proguard/gui/splash/ConstantColor.java +51 -0
  519. data/lib/proguard4.7/src/proguard/gui/splash/ConstantDouble.java +49 -0
  520. data/lib/proguard4.7/src/proguard/gui/splash/ConstantFont.java +46 -0
  521. data/lib/proguard4.7/src/proguard/gui/splash/ConstantInt.java +49 -0
  522. data/lib/proguard4.7/src/proguard/gui/splash/ConstantString.java +49 -0
  523. data/lib/proguard4.7/src/proguard/gui/splash/ConstantTiming.java +57 -0
  524. data/lib/proguard4.7/src/proguard/gui/splash/FontSprite.java +65 -0
  525. data/lib/proguard4.7/src/proguard/gui/splash/ImageSprite.java +76 -0
  526. data/lib/proguard4.7/src/proguard/gui/splash/LinearColor.java +72 -0
  527. data/lib/proguard4.7/src/proguard/gui/splash/LinearDouble.java +55 -0
  528. data/lib/proguard4.7/src/proguard/gui/splash/LinearInt.java +55 -0
  529. data/lib/proguard4.7/src/proguard/gui/splash/LinearTiming.java +55 -0
  530. data/lib/proguard4.7/src/proguard/gui/splash/OverrideGraphics2D.java +598 -0
  531. data/lib/proguard4.7/src/proguard/gui/splash/RectangleSprite.java +114 -0
  532. data/lib/proguard4.7/src/proguard/gui/splash/SawToothTiming.java +53 -0
  533. data/lib/proguard4.7/src/proguard/gui/splash/ShadowedSprite.java +109 -0
  534. data/lib/proguard4.7/src/proguard/gui/splash/SineTiming.java +53 -0
  535. data/lib/proguard4.7/src/proguard/gui/splash/SmoothTiming.java +66 -0
  536. data/lib/proguard4.7/src/proguard/gui/splash/SplashPanel.java +235 -0
  537. data/lib/proguard4.7/src/proguard/gui/splash/Sprite.java +41 -0
  538. data/lib/proguard4.7/src/proguard/gui/splash/TextSprite.java +89 -0
  539. data/lib/proguard4.7/src/proguard/gui/splash/TimeSwitchSprite.java +75 -0
  540. data/lib/proguard4.7/src/proguard/gui/splash/Timing.java +34 -0
  541. data/lib/proguard4.7/src/proguard/gui/splash/TypeWriterString.java +71 -0
  542. data/lib/proguard4.7/src/proguard/gui/splash/VariableColor.java +36 -0
  543. data/lib/proguard4.7/src/proguard/gui/splash/VariableDouble.java +34 -0
  544. data/lib/proguard4.7/src/proguard/gui/splash/VariableFont.java +36 -0
  545. data/lib/proguard4.7/src/proguard/gui/splash/VariableInt.java +34 -0
  546. data/lib/proguard4.7/src/proguard/gui/splash/VariableSizeFont.java +65 -0
  547. data/lib/proguard4.7/src/proguard/gui/splash/VariableString.java +34 -0
  548. data/lib/proguard4.7/src/proguard/gui/splash/package.html +4 -0
  549. data/lib/proguard4.7/src/proguard/gui/vtitle.png +0 -0
  550. data/lib/proguard4.7/src/proguard/io/CascadingDataEntryWriter.java +94 -0
  551. data/lib/proguard4.7/src/proguard/io/ClassFilter.java +59 -0
  552. data/lib/proguard4.7/src/proguard/io/ClassReader.java +115 -0
  553. data/lib/proguard4.7/src/proguard/io/ClassRewriter.java +80 -0
  554. data/lib/proguard4.7/src/proguard/io/DataEntry.java +62 -0
  555. data/lib/proguard4.7/src/proguard/io/DataEntryClassWriter.java +85 -0
  556. data/lib/proguard4.7/src/proguard/io/DataEntryCopier.java +247 -0
  557. data/lib/proguard4.7/src/proguard/io/DataEntryDirectoryFilter.java +40 -0
  558. data/lib/proguard4.7/src/proguard/io/DataEntryFilter.java +38 -0
  559. data/lib/proguard4.7/src/proguard/io/DataEntryNameFilter.java +54 -0
  560. data/lib/proguard4.7/src/proguard/io/DataEntryObfuscator.java +150 -0
  561. data/lib/proguard4.7/src/proguard/io/DataEntryParentFilter.java +51 -0
  562. data/lib/proguard4.7/src/proguard/io/DataEntryPump.java +43 -0
  563. data/lib/proguard4.7/src/proguard/io/DataEntryReader.java +38 -0
  564. data/lib/proguard4.7/src/proguard/io/DataEntryRenamer.java +104 -0
  565. data/lib/proguard4.7/src/proguard/io/DataEntryRewriter.java +148 -0
  566. data/lib/proguard4.7/src/proguard/io/DataEntryWriter.java +73 -0
  567. data/lib/proguard4.7/src/proguard/io/DirectoryFilter.java +58 -0
  568. data/lib/proguard4.7/src/proguard/io/DirectoryPump.java +78 -0
  569. data/lib/proguard4.7/src/proguard/io/DirectoryWriter.java +165 -0
  570. data/lib/proguard4.7/src/proguard/io/FileDataEntry.java +96 -0
  571. data/lib/proguard4.7/src/proguard/io/FilteredDataEntryReader.java +90 -0
  572. data/lib/proguard4.7/src/proguard/io/FilteredDataEntryWriter.java +125 -0
  573. data/lib/proguard4.7/src/proguard/io/Finisher.java +37 -0
  574. data/lib/proguard4.7/src/proguard/io/JarReader.java +75 -0
  575. data/lib/proguard4.7/src/proguard/io/JarWriter.java +235 -0
  576. data/lib/proguard4.7/src/proguard/io/ManifestRewriter.java +216 -0
  577. data/lib/proguard4.7/src/proguard/io/NameFilter.java +83 -0
  578. data/lib/proguard4.7/src/proguard/io/ParentDataEntryWriter.java +75 -0
  579. data/lib/proguard4.7/src/proguard/io/RenamedDataEntry.java +83 -0
  580. data/lib/proguard4.7/src/proguard/io/ZipDataEntry.java +98 -0
  581. data/lib/proguard4.7/src/proguard/io/package.html +4 -0
  582. data/lib/proguard4.7/src/proguard/obfuscate/AttributeShrinker.java +120 -0
  583. data/lib/proguard4.7/src/proguard/obfuscate/AttributeUsageMarker.java +71 -0
  584. data/lib/proguard4.7/src/proguard/obfuscate/ClassObfuscator.java +533 -0
  585. data/lib/proguard4.7/src/proguard/obfuscate/ClassRenamer.java +109 -0
  586. data/lib/proguard4.7/src/proguard/obfuscate/DictionaryNameFactory.java +189 -0
  587. data/lib/proguard4.7/src/proguard/obfuscate/MapCleaner.java +57 -0
  588. data/lib/proguard4.7/src/proguard/obfuscate/MappingKeeper.java +177 -0
  589. data/lib/proguard4.7/src/proguard/obfuscate/MappingPrinter.java +147 -0
  590. data/lib/proguard4.7/src/proguard/obfuscate/MappingProcessor.java +79 -0
  591. data/lib/proguard4.7/src/proguard/obfuscate/MappingReader.java +199 -0
  592. data/lib/proguard4.7/src/proguard/obfuscate/MemberNameCleaner.java +60 -0
  593. data/lib/proguard4.7/src/proguard/obfuscate/MemberNameCollector.java +106 -0
  594. data/lib/proguard4.7/src/proguard/obfuscate/MemberNameConflictFixer.java +159 -0
  595. data/lib/proguard4.7/src/proguard/obfuscate/MemberNameFilter.java +120 -0
  596. data/lib/proguard4.7/src/proguard/obfuscate/MemberObfuscator.java +230 -0
  597. data/lib/proguard4.7/src/proguard/obfuscate/MemberSpecialNameFilter.java +101 -0
  598. data/lib/proguard4.7/src/proguard/obfuscate/MultiMappingProcessor.java +96 -0
  599. data/lib/proguard4.7/src/proguard/obfuscate/NameFactory.java +34 -0
  600. data/lib/proguard4.7/src/proguard/obfuscate/NameFactoryResetter.java +59 -0
  601. data/lib/proguard4.7/src/proguard/obfuscate/NameMarker.java +166 -0
  602. data/lib/proguard4.7/src/proguard/obfuscate/NumericNameFactory.java +49 -0
  603. data/lib/proguard4.7/src/proguard/obfuscate/Obfuscator.java +445 -0
  604. data/lib/proguard4.7/src/proguard/obfuscate/ParameterNameMarker.java +128 -0
  605. data/lib/proguard4.7/src/proguard/obfuscate/SimpleNameFactory.java +156 -0
  606. data/lib/proguard4.7/src/proguard/obfuscate/SourceFileRenamer.java +84 -0
  607. data/lib/proguard4.7/src/proguard/obfuscate/SpecialNameFactory.java +83 -0
  608. data/lib/proguard4.7/src/proguard/obfuscate/package.html +3 -0
  609. data/lib/proguard4.7/src/proguard/optimize/BootstrapMethodArgumentShrinker.java +103 -0
  610. data/lib/proguard4.7/src/proguard/optimize/ChangedCodePrinter.java +297 -0
  611. data/lib/proguard4.7/src/proguard/optimize/ConstantMemberFilter.java +77 -0
  612. data/lib/proguard4.7/src/proguard/optimize/ConstantParameterFilter.java +79 -0
  613. data/lib/proguard4.7/src/proguard/optimize/DuplicateInitializerFixer.java +215 -0
  614. data/lib/proguard4.7/src/proguard/optimize/DuplicateInitializerInvocationFixer.java +161 -0
  615. data/lib/proguard4.7/src/proguard/optimize/KeepMarker.java +95 -0
  616. data/lib/proguard4.7/src/proguard/optimize/KeptClassFilter.java +69 -0
  617. data/lib/proguard4.7/src/proguard/optimize/KeptMemberFilter.java +88 -0
  618. data/lib/proguard4.7/src/proguard/optimize/MemberDescriptorSpecializer.java +138 -0
  619. data/lib/proguard4.7/src/proguard/optimize/MethodDescriptorShrinker.java +317 -0
  620. data/lib/proguard4.7/src/proguard/optimize/MethodStaticizer.java +87 -0
  621. data/lib/proguard4.7/src/proguard/optimize/OptimizationInfoMemberFilter.java +94 -0
  622. data/lib/proguard4.7/src/proguard/optimize/Optimizer.java +963 -0
  623. data/lib/proguard4.7/src/proguard/optimize/ParameterShrinker.java +146 -0
  624. data/lib/proguard4.7/src/proguard/optimize/TailRecursionSimplifier.java +356 -0
  625. data/lib/proguard4.7/src/proguard/optimize/WriteOnlyFieldFilter.java +65 -0
  626. data/lib/proguard4.7/src/proguard/optimize/evaluation/EvaluationShrinker.java +2082 -0
  627. data/lib/proguard4.7/src/proguard/optimize/evaluation/EvaluationSimplifier.java +973 -0
  628. data/lib/proguard4.7/src/proguard/optimize/evaluation/LivenessAnalyzer.java +526 -0
  629. data/lib/proguard4.7/src/proguard/optimize/evaluation/LoadingInvocationUnit.java +195 -0
  630. data/lib/proguard4.7/src/proguard/optimize/evaluation/PartialEvaluator.java +1282 -0
  631. data/lib/proguard4.7/src/proguard/optimize/evaluation/StoringInvocationUnit.java +207 -0
  632. data/lib/proguard4.7/src/proguard/optimize/evaluation/TracedBranchUnit.java +59 -0
  633. data/lib/proguard4.7/src/proguard/optimize/evaluation/VariableOptimizer.java +345 -0
  634. data/lib/proguard4.7/src/proguard/optimize/evaluation/package.html +4 -0
  635. data/lib/proguard4.7/src/proguard/optimize/info/AccessMethodMarker.java +202 -0
  636. data/lib/proguard4.7/src/proguard/optimize/info/BackwardBranchMarker.java +90 -0
  637. data/lib/proguard4.7/src/proguard/optimize/info/CatchExceptionMarker.java +69 -0
  638. data/lib/proguard4.7/src/proguard/optimize/info/CaughtClassFilter.java +63 -0
  639. data/lib/proguard4.7/src/proguard/optimize/info/CaughtClassMarker.java +64 -0
  640. data/lib/proguard4.7/src/proguard/optimize/info/ClassOptimizationInfo.java +165 -0
  641. data/lib/proguard4.7/src/proguard/optimize/info/ClassOptimizationInfoSetter.java +47 -0
  642. data/lib/proguard4.7/src/proguard/optimize/info/DotClassFilter.java +63 -0
  643. data/lib/proguard4.7/src/proguard/optimize/info/DotClassMarker.java +96 -0
  644. data/lib/proguard4.7/src/proguard/optimize/info/ExceptionInstructionChecker.java +193 -0
  645. data/lib/proguard4.7/src/proguard/optimize/info/FieldOptimizationInfo.java +204 -0
  646. data/lib/proguard4.7/src/proguard/optimize/info/InstanceofClassFilter.java +63 -0
  647. data/lib/proguard4.7/src/proguard/optimize/info/InstanceofClassMarker.java +93 -0
  648. data/lib/proguard4.7/src/proguard/optimize/info/InstantiationClassFilter.java +62 -0
  649. data/lib/proguard4.7/src/proguard/optimize/info/InstantiationClassMarker.java +93 -0
  650. data/lib/proguard4.7/src/proguard/optimize/info/MemberOptimizationInfoSetter.java +59 -0
  651. data/lib/proguard4.7/src/proguard/optimize/info/MethodInvocationMarker.java +107 -0
  652. data/lib/proguard4.7/src/proguard/optimize/info/MethodOptimizationInfo.java +302 -0
  653. data/lib/proguard4.7/src/proguard/optimize/info/NoSideEffectMethodMarker.java +91 -0
  654. data/lib/proguard4.7/src/proguard/optimize/info/NonPrivateMemberMarker.java +171 -0
  655. data/lib/proguard4.7/src/proguard/optimize/info/PackageVisibleMemberContainingClassMarker.java +85 -0
  656. data/lib/proguard4.7/src/proguard/optimize/info/PackageVisibleMemberInvokingClassMarker.java +129 -0
  657. data/lib/proguard4.7/src/proguard/optimize/info/ParameterUsageMarker.java +285 -0
  658. data/lib/proguard4.7/src/proguard/optimize/info/ReadWriteFieldMarker.java +163 -0
  659. data/lib/proguard4.7/src/proguard/optimize/info/SideEffectInstructionChecker.java +245 -0
  660. data/lib/proguard4.7/src/proguard/optimize/info/SideEffectMethodMarker.java +175 -0
  661. data/lib/proguard4.7/src/proguard/optimize/info/StaticInitializerContainingClassFilter.java +62 -0
  662. data/lib/proguard4.7/src/proguard/optimize/info/StaticInitializerContainingClassMarker.java +65 -0
  663. data/lib/proguard4.7/src/proguard/optimize/info/SuperInvocationMarker.java +93 -0
  664. data/lib/proguard4.7/src/proguard/optimize/info/VariableUsageMarker.java +96 -0
  665. data/lib/proguard4.7/src/proguard/optimize/info/package.html +4 -0
  666. data/lib/proguard4.7/src/proguard/optimize/package.html +4 -0
  667. data/lib/proguard4.7/src/proguard/optimize/peephole/BranchTargetFinder.java +687 -0
  668. data/lib/proguard4.7/src/proguard/optimize/peephole/ClassFinalizer.java +84 -0
  669. data/lib/proguard4.7/src/proguard/optimize/peephole/ClassMerger.java +576 -0
  670. data/lib/proguard4.7/src/proguard/optimize/peephole/GotoCommonCodeReplacer.java +266 -0
  671. data/lib/proguard4.7/src/proguard/optimize/peephole/GotoGotoReplacer.java +115 -0
  672. data/lib/proguard4.7/src/proguard/optimize/peephole/GotoReturnReplacer.java +115 -0
  673. data/lib/proguard4.7/src/proguard/optimize/peephole/HorizontalClassMerger.java +90 -0
  674. data/lib/proguard4.7/src/proguard/optimize/peephole/InstructionSequenceConstants.java +4424 -0
  675. data/lib/proguard4.7/src/proguard/optimize/peephole/InstructionSequenceReplacer.java +420 -0
  676. data/lib/proguard4.7/src/proguard/optimize/peephole/InstructionSequencesReplacer.java +138 -0
  677. data/lib/proguard4.7/src/proguard/optimize/peephole/MemberPrivatizer.java +103 -0
  678. data/lib/proguard4.7/src/proguard/optimize/peephole/MethodFinalizer.java +93 -0
  679. data/lib/proguard4.7/src/proguard/optimize/peephole/MethodInliner.java +597 -0
  680. data/lib/proguard4.7/src/proguard/optimize/peephole/NopRemover.java +89 -0
  681. data/lib/proguard4.7/src/proguard/optimize/peephole/PeepholeOptimizer.java +103 -0
  682. data/lib/proguard4.7/src/proguard/optimize/peephole/ReachableCodeMarker.java +262 -0
  683. data/lib/proguard4.7/src/proguard/optimize/peephole/RetargetedInnerClassAttributeRemover.java +170 -0
  684. data/lib/proguard4.7/src/proguard/optimize/peephole/TargetClassChanger.java +455 -0
  685. data/lib/proguard4.7/src/proguard/optimize/peephole/UnreachableCodeRemover.java +143 -0
  686. data/lib/proguard4.7/src/proguard/optimize/peephole/UnreachableExceptionRemover.java +163 -0
  687. data/lib/proguard4.7/src/proguard/optimize/peephole/VariableShrinker.java +129 -0
  688. data/lib/proguard4.7/src/proguard/optimize/peephole/VerticalClassMerger.java +88 -0
  689. data/lib/proguard4.7/src/proguard/optimize/peephole/package.html +3 -0
  690. data/lib/proguard4.7/src/proguard/package.html +5 -0
  691. data/lib/proguard4.7/src/proguard/preverify/CodePreverifier.java +611 -0
  692. data/lib/proguard4.7/src/proguard/preverify/CodeSubroutineInliner.java +406 -0
  693. data/lib/proguard4.7/src/proguard/preverify/Preverifier.java +73 -0
  694. data/lib/proguard4.7/src/proguard/preverify/SubroutineInliner.java +73 -0
  695. data/lib/proguard4.7/src/proguard/retrace/MANIFEST.MF +3 -0
  696. data/lib/proguard4.7/src/proguard/retrace/ReTrace.java +749 -0
  697. data/lib/proguard4.7/src/proguard/retrace/package.html +4 -0
  698. data/lib/proguard4.7/src/proguard/shrink/AnnotationUsageMarker.java +333 -0
  699. data/lib/proguard4.7/src/proguard/shrink/ClassShrinker.java +458 -0
  700. data/lib/proguard4.7/src/proguard/shrink/InnerUsageMarker.java +174 -0
  701. data/lib/proguard4.7/src/proguard/shrink/InterfaceUsageMarker.java +152 -0
  702. data/lib/proguard4.7/src/proguard/shrink/ShortestUsageMark.java +183 -0
  703. data/lib/proguard4.7/src/proguard/shrink/ShortestUsageMarker.java +277 -0
  704. data/lib/proguard4.7/src/proguard/shrink/ShortestUsagePrinter.java +210 -0
  705. data/lib/proguard4.7/src/proguard/shrink/Shrinker.java +181 -0
  706. data/lib/proguard4.7/src/proguard/shrink/UsageMarker.java +1036 -0
  707. data/lib/proguard4.7/src/proguard/shrink/UsagePrinter.java +177 -0
  708. data/lib/proguard4.7/src/proguard/shrink/UsedClassFilter.java +74 -0
  709. data/lib/proguard4.7/src/proguard/shrink/UsedMemberFilter.java +93 -0
  710. data/lib/proguard4.7/src/proguard/shrink/package.html +3 -0
  711. data/lib/proguard4.7/src/proguard/util/AndMatcher.java +49 -0
  712. data/lib/proguard4.7/src/proguard/util/ClassNameParser.java +216 -0
  713. data/lib/proguard4.7/src/proguard/util/ConstantMatcher.java +48 -0
  714. data/lib/proguard4.7/src/proguard/util/EmptyStringMatcher.java +36 -0
  715. data/lib/proguard4.7/src/proguard/util/ExtensionMatcher.java +63 -0
  716. data/lib/proguard4.7/src/proguard/util/FileNameParser.java +121 -0
  717. data/lib/proguard4.7/src/proguard/util/FixedStringMatcher.java +56 -0
  718. data/lib/proguard4.7/src/proguard/util/ListMatcher.java +69 -0
  719. data/lib/proguard4.7/src/proguard/util/ListParser.java +137 -0
  720. data/lib/proguard4.7/src/proguard/util/ListUtil.java +180 -0
  721. data/lib/proguard4.7/src/proguard/util/NameParser.java +106 -0
  722. data/lib/proguard4.7/src/proguard/util/NotMatcher.java +46 -0
  723. data/lib/proguard4.7/src/proguard/util/OrMatcher.java +49 -0
  724. data/lib/proguard4.7/src/proguard/util/SettableMatcher.java +46 -0
  725. data/lib/proguard4.7/src/proguard/util/StringMatcher.java +38 -0
  726. data/lib/proguard4.7/src/proguard/util/StringParser.java +35 -0
  727. data/lib/proguard4.7/src/proguard/util/VariableStringMatcher.java +126 -0
  728. data/lib/proguard4.7/src/proguard/util/package.html +3 -0
  729. data/lib/proguard4.7/src/proguard/wtk/ProGuardObfuscator.java +141 -0
  730. data/lib/proguard4.7/src/proguard/wtk/default.pro +114 -0
  731. data/lib/proguard4.7/src/proguard/wtk/package.html +3 -0
  732. metadata +960 -10
@@ -0,0 +1,1504 @@
1
+ <!doctype html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2
+ <html>
3
+ <head>
4
+ <meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
5
+ <meta http-equiv="content-style-type" content="text/css">
6
+ <link rel="stylesheet" type="text/css" href="style.css">
7
+ <title>ProGuard Examples</title>
8
+ <script type="text/javascript" language="JavaScript">
9
+ <!--
10
+ if (window.self==window.top)
11
+ window.top.location.replace("../index.html#"+window.location.pathname+window.location.hash);
12
+ else {
13
+ var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), "");
14
+ if (window.top.location.hash!=hash)
15
+ window.top.location.hash=hash;
16
+ }
17
+ //-->
18
+ </script>
19
+ </head>
20
+ <body>
21
+
22
+ <h2>Examples</h2>
23
+
24
+ Some typical useful configurations:
25
+ <ol>
26
+ <li><a href="#application">A typical application</a></li>
27
+ <li><a href="#applet">A typical applet</a></li>
28
+ <li><a href="#midlet">A typical midlet</a></li>
29
+ <li><a href="#jcapplet">A typical Java Card applet</a></li>
30
+ <li><a href="#xlet">A typical xlet</a></li>
31
+ <li><a href="#androidactivity">A simple Android activity</a></li>
32
+ <li><a href="#androidapplication">A complete Android application</a></li>
33
+ <li><a href="#library">A typical library</a></li>
34
+ <li><a href="#applications">All possible applications in the input jars</a></li>
35
+ <li><a href="#applets">All possible applets in the input jars</a></li>
36
+ <li><a href="#midlets">All possible midlets in the input jars</a></li>
37
+ <li><a href="#jcapplets">All possible Java Card applets in the input jars</a></li>
38
+ <li><a href="#xlets">All possible xlets in the input jars</a></li>
39
+ <li><a href="#servlets">All possible servlets in the input jars</a></li>
40
+ <li><a href="#scala">Scala applications with the Scala runtime</a></li>
41
+ <li><a href="#native">Processing native methods</a></li>
42
+ <li><a href="#callback">Processing callback methods</a></li>
43
+ <li><a href="#enumerations">Processing enumeration classes</a></li>
44
+ <li><a href="#serializable">Processing serializable classes</a></li>
45
+ <li><a href="#beans">Processing bean classes</a></li>
46
+ <li><a href="#annotations">Processing annotations</a></li>
47
+ <li><a href="#database">Processing database drivers</a></li>
48
+ <li><a href="#componentui">Processing ComponentUI classes</a></li>
49
+ <li><a href="#rmi">Processing RMI code</a></li>
50
+ <li><a href="#resourcefiles">Processing resource files</a></li>
51
+ <li><a href="#manifestfiles">Processing manifest files</a></li>
52
+ <li><a href="#stacktrace">Producing useful obfuscated stack traces</a></li>
53
+ <li><a href="#repackaging">Obfuscating package names</a></li>
54
+ <li><a href="#restructuring">Restructuring the output archives</a></li>
55
+ <li><a href="#filtering">Filtering the input and the output</a></li>
56
+ <li><a href="#multiple">Processing multiple applications at once</a></li>
57
+ <li><a href="#incremental">Incremental obfuscation</a></li>
58
+ <li><a href="#microedition">Preverifying class files for Java Micro Edition</a></li>
59
+ <li><a href="#upgrade">Upgrading class files to Java 6</a></li>
60
+ <li><a href="#deadcode">Finding dead code</a></li>
61
+ <li><a href="#structure">Printing out the internal structure of class files</a></li>
62
+ <li><a href="#annotated">Using annotations to configure ProGuard</a></li>
63
+ </ol>
64
+
65
+ You can find some sample configuration files in the <code>examples</code>
66
+ directory of the ProGuard distribution.
67
+
68
+ <h3><a name="application">A typical application</a></h3>
69
+
70
+ To shrink, optimize, and obfuscate a simple Java application, you typically
71
+ create a configuration file like <code>myconfig.pro</code>, which can be used
72
+ with
73
+ <pre>
74
+ bin/proguard @myconfig.pro
75
+ </pre>
76
+ <p>
77
+ The configuration file specifies the input, the output, and the entry points
78
+ of the application:
79
+ <pre>
80
+ -injars myapplication.jar
81
+ -outjars myapplication_out.jar
82
+ -libraryjars &lt;java.home&gt;/lib/rt.jar
83
+ -printmapping myapplication.map
84
+
85
+ -keep public class mypackage.MyMain {
86
+ public static void main(java.lang.String[]);
87
+ }
88
+ </pre>
89
+ <p>
90
+ Note the use of the <code>&lt;java.home&gt;</code> system property. ProGuard
91
+ automatically replaces it when parsing the file.
92
+ <p>
93
+ The <a href="usage.html#keep"><code>-keep</code></a> option specifies the
94
+ entry point of the application that has to be preserved.
95
+ The access modifiers <code>public</code> and <code>static</code> are not
96
+ really required in this case, since we know a priori that the specified class
97
+ and method have the proper access flags. It just looks more familiar this way.
98
+ <p>
99
+ Note that all type names are fully specified:
100
+ <code>mypackage.MyMain</code> and <code>java.lang.String[]</code>.
101
+ <p>
102
+ We're writing out an obfuscation mapping file with <a
103
+ href="usage.html#printmapping"><code>-printmapping</code></a>, for
104
+ de-obfuscating any stack traces later on, or for incremental obfuscation of
105
+ extensions.
106
+ <p>
107
+ We can further improve the results with a few additional options:
108
+ <pre>
109
+ -optimizationpasses 3
110
+ -overloadaggressively
111
+ -repackageclasses ''
112
+ -allowaccessmodification
113
+ </pre>
114
+ These options are not required; they just shave off some extra bytes from the
115
+ output jar, by performing up to 3 optimization passes, and by aggressively
116
+ obfuscating class members and <a href="#repackaging">package names</a>.
117
+ <p>
118
+ In general, you might need a few additional options for processing <a
119
+ href="#native">native methods</a>, <a href="#callback">callback methods</a>,
120
+ <a href="#enumerations">enumerations</a>, <a href="#serializable">serializable
121
+ classes</a>, <a href="#beans">bean classes</a>, <a
122
+ href="#annotations">annotations</a>, and <a href="#resourcefiles">resource
123
+ files</a>.
124
+
125
+ <h3><a name="applet">A typical applet</a></h3>
126
+
127
+ These options shrink, optimize, and obfuscate the applet
128
+ <code>mypackage.MyApplet</code>:
129
+ <pre>
130
+ -injars in.jar
131
+ -outjars out.jar
132
+ -libraryjars &lt;java.home&gt;/lib/rt.jar
133
+
134
+ -keep public class mypackage.MyApplet
135
+ </pre>
136
+ <p>
137
+ The typical applet methods will be preserved automatically, since
138
+ <code>mypackage.MyApplet</code> is an extension of the <code>Applet</code>
139
+ class in the library <code>rt.jar</code>.
140
+ <p>
141
+ If applicable, you should add options for processing <a href="#native">native
142
+ methods</a>, <a href="#callback">callback methods</a>, <a
143
+ href="#enumerations">enumerations</a>, <a href="#serializable">serializable
144
+ classes</a>, <a href="#beans">bean classes</a>, <a
145
+ href="#annotations">annotations</a>, and <a href="#resourcefiles">resource
146
+ files</a>.
147
+
148
+ <h3><a name="midlet">A typical midlet</a></h3>
149
+
150
+ These options shrink, optimize, obfuscate, and preverify the midlet
151
+ <code>mypackage.MyMIDlet</code>:
152
+ <pre>
153
+ -injars in.jar
154
+ -outjars out.jar
155
+ -libraryjars /usr/local/java/wtk2.5.2/lib/midpapi20.jar
156
+ -libraryjars /usr/local/java/wtk2.5.2/lib/cldcapi11.jar
157
+ -overloadaggressively
158
+ -repackageclasses ''
159
+ -allowaccessmodification
160
+ -microedition
161
+
162
+ -keep public class mypackage.MyMIDlet
163
+ </pre>
164
+ <p>
165
+ Note how we're now targeting the Java Micro Edition run-time environment of
166
+ <code>midpapi20.jar</code> and <code>cldcapi11.jar</code>, instead of the Java
167
+ Standard Edition run-time environment <code>rt.jar</code>. You can target
168
+ other JME environments by picking the appropriate jars.
169
+ <p>
170
+ The typical midlet methods will be preserved automatically, since
171
+ <code>mypackage.MyMIDlet</code> is an extension of the <code>MIDlet</code>
172
+ class in the library <code>midpapi20.jar</code>.
173
+ <p>
174
+ The <a href="usage.html#microedition"><code>-microedition</code></a> option
175
+ makes sure the class files are preverified for Java Micro Edition, producing
176
+ compact <code>StackMap</code> attributes. It is no longer necessary to run an
177
+ external preverifier.
178
+ <p>
179
+ Be careful if you do use the external <code>preverify</code> tool on a platform
180
+ with a case-insensitive filing system, such as Windows. Because this tool
181
+ unpacks your processed jars, you should then use ProGuard's <a
182
+ href="usage.html#dontusemixedcaseclassnames"><code>-dontusemixedcaseclassnames</code></a>
183
+ option.
184
+ <p>
185
+ If applicable, you should add options for processing <a href="#native">native
186
+ methods</a> and <a href="#resourcefiles">resource files</a>.
187
+ <p>
188
+ Note that you will still have to adapt the midlet jar size in the
189
+ corresponding jad file; ProGuard doesn't do that for you.
190
+
191
+ <h3><a name="jcapplet">A typical Java Card applet</a></h3>
192
+
193
+ These options shrink, optimize, and obfuscate the Java Card applet
194
+ <code>mypackage.MyApplet</code>:
195
+ <pre>
196
+ -injars in.jar
197
+ -outjars out.jar
198
+ -libraryjars /usr/local/java/javacard2.2.2/lib/api.jar
199
+ -dontwarn java.lang.Class
200
+ -overloadaggressively
201
+ -repackageclasses ''
202
+ -allowaccessmodification
203
+
204
+ -keep public class mypackage.MyApplet
205
+ </pre>
206
+ <p>
207
+ The configuration is very similar to the configuration for midlets, except that
208
+ it now targets the Java Card run-time environment. This environment doesn't
209
+ have java.lang.Class, so we're telling ProGuard not to worry about it.
210
+
211
+ <h3><a name="xlet">A typical xlet</a></h3>
212
+
213
+ These options shrink, optimize, and obfuscate the xlet
214
+ <code>mypackage.MyXlet</code>:
215
+ <pre>
216
+ -injars in.jar
217
+ -outjars out.jar
218
+ -libraryjars /usr/local/java/jtv1.1/javatv.jar
219
+ -libraryjars /usr/local/java/cdc1.1/lib/cdc.jar
220
+ -libraryjars /usr/local/java/cdc1.1/lib/btclasses.zip
221
+ -overloadaggressively
222
+ -repackageclasses ''
223
+ -allowaccessmodification
224
+
225
+ -keep public class mypackage.MyXlet
226
+ </pre>
227
+ <p>
228
+ The configuration is very similar to the configuration for midlets, except that
229
+ it now targets the CDC run-time environment with the Java TV API.
230
+
231
+ <h3><a name="androidactivity">A simple Android activity</a></h3>
232
+
233
+ These options shrink, optimize, and obfuscate the single Android
234
+ activity <code>mypackage.MyActivity</code>:
235
+ <pre>
236
+ -injars bin/classes
237
+ -outjars bin/classes-processed.jar
238
+ -libraryjars /usr/local/java/android-sdk/platforms/android-9/android.jar
239
+
240
+ -dontpreverify
241
+ -repackageclasses ''
242
+ -allowaccessmodification
243
+ -optimizations !code/simplification/arithmetic
244
+
245
+ -keep public class mypackage.MyActivity
246
+ </pre>
247
+ <p>
248
+ We're targeting the Android run-time and keeping the activity as an entry
249
+ point.
250
+ <p>
251
+ Preverification is irrelevant for the dex compiler and the Dalvik VM, so we
252
+ can switch it off with the
253
+ <a href="usage.html#dontpreverify"><code>-dontpreverify</code></a> option.
254
+ <p>
255
+ The <a href="usage.html#optimizations"><code>-optimizations</code></a> option
256
+ disables some arithmetic simplifications that Dalvik 1.0 and 1.5 can't handle.
257
+ Note that the Dalvik VM also can't
258
+ handle <a href="usage.html#overloadaggressively">aggressive overloading</a>
259
+ (of static fields).
260
+ <p>
261
+ If applicable, you should add options for processing <a href="#native">native
262
+ methods</a>, <a href="#callback">callback methods</a>,
263
+ <a href="#enumerations">enumerations</a>,
264
+ <a href="#annotations">annotations</a>, and
265
+ <a href="#resourcefiles">resource files</a>.
266
+
267
+ <h3><a name="androidapplication">A complete Android application</a></h3>
268
+
269
+ These options shrink, optimize, and obfuscate all public activities, services,
270
+ broadcast receivers, and content providers from the compiled classes and
271
+ external libraries:
272
+ <pre>
273
+ -injars bin/classes
274
+ -injars libs
275
+ -outjars bin/classes-processed.jar
276
+ -libraryjars /usr/local/java/android-sdk/platforms/android-9/android.jar
277
+
278
+ -dontpreverify
279
+ -repackageclasses ''
280
+ -allowaccessmodification
281
+ -optimizations !code/simplification/arithmetic
282
+ -keepattributes *Annotation*
283
+
284
+ -keep public class * extends android.app.Activity
285
+ -keep public class * extends android.app.Application
286
+ -keep public class * extends android.app.Service
287
+ -keep public class * extends android.content.BroadcastReceiver
288
+ -keep public class * extends android.content.ContentProvider
289
+
290
+ -keep public class * extends android.view.View {
291
+ public &lt;init&gt;(android.content.Context);
292
+ public &lt;init&gt;(android.content.Context, android.util.AttributeSet);
293
+ public &lt;init&gt;(android.content.Context, android.util.AttributeSet, int);
294
+ public void set*(...);
295
+ }
296
+
297
+ -keepclasseswithmembers class * {
298
+ public &lt;init&gt;(android.content.Context, android.util.AttributeSet);
299
+ }
300
+
301
+ -keepclasseswithmembers class * {
302
+ public &lt;init&gt;(android.content.Context, android.util.AttributeSet, int);
303
+ }
304
+
305
+ -keepclassmembers class * implements android.os.Parcelable {
306
+ static android.os.Parcelable$Creator CREATOR;
307
+ }
308
+
309
+ -keepclassmembers class **.R$* {
310
+ public static &lt;fields&gt;;
311
+ }
312
+ </pre>
313
+ <p>
314
+ Most importantly, we're keeping all fundamental classes that may be referenced
315
+ by the <code>AndroidManifest.xml</code> file of the application. If your
316
+ manifest file contains other classes and methods, you may have to specify
317
+ those as well.
318
+ <p>
319
+ We're keeping annotations, since they might be used by custom
320
+ <code>RemoteViews</code>.
321
+ <p>
322
+ We're keeping any custom <code>View</code> extensions and other classes with
323
+ typical constructors, since they might be referenced from XML layout files.
324
+ <p>
325
+ We're also keeping the required static fields in <code>Parcelable</code>
326
+ implementations, since they are accessed by introspection.
327
+ <p>
328
+ Finally, we're keeping the static fields of referenced inner classes of
329
+ auto-generated <code>R</code> classes, just in case your code is accessing
330
+ those fields by introspection. Note that the compiler already inlines
331
+ primitive fields, so ProGuard can generally remove all these classes entirely
332
+ anyway (because the classes are not referenced and therefore not required).
333
+ <p>
334
+ If you're using additional Google APIs, you'll have to specify
335
+ those as well, for instance:
336
+ <pre>
337
+ -libraryjars /usr/local/android-sdk/add-ons/google_apis-7_r01/libs/maps.jar
338
+ </pre>
339
+ <p>
340
+ If you're using Google's optional License Verification Library, you can
341
+ obfuscate its code along with your own code. You do have to preserve
342
+ its <code>ILicensingService</code> interface for the library to work:
343
+ <pre>
344
+ -keep public interface com.android.vending.licensing.ILicensingService
345
+ </pre>
346
+ <p>
347
+ If you're using the Android Compatibility library, you should add the
348
+ following line, to let ProGuard know it's ok that the library references some
349
+ classes that are not available in all versions of the API:
350
+ <pre>
351
+ -dontwarn android.support.**
352
+ </pre>
353
+ <p>
354
+ If applicable, you should add options for processing <a href="#native">native
355
+ methods</a>, <a href="#callback">callback methods</a>,
356
+ <a href="#enumerations">enumerations</a>,
357
+ and <a href="#resourcefiles">resource files</a>. You may also want to add
358
+ options for producing <a href="#stacktrace">useful stack traces</a>. You can
359
+ find a complete sample configuration in <code>examples/android.pro</code> in
360
+ the ProGuard distribution.
361
+ <p>
362
+ The build process of the Android SDK (version 2.3 and higher) already
363
+ integrates ProGuard by default. You only need to enable it (for release
364
+ builds) by adding <code>proguard.config=proguard.cfg</code> to the file
365
+ <code>build.properties</code>. In case of problems, you may want to check if
366
+ the automatically generated file <code>proguard.cfg</code> contains the
367
+ settings discussed above. The generated Ant build file already sets the input
368
+ and output files for you.
369
+ <p>
370
+ For more information, you can consult the official <a target="other"
371
+ href="http://developer.android.com/guide/developing/tools/proguard.html">Developer
372
+ Guide</a> in the Android SDK.
373
+
374
+ <h3><a name="library">A typical library</a></h3>
375
+
376
+ These options shrink, optimize, and obfuscate an entire library, keeping all
377
+ public and protected classes and class members, native method names, and
378
+ serialization code. The processed version of the library can then still be
379
+ used as such, for developing code based on its public API.
380
+ <pre>
381
+ -injars in.jar
382
+ -outjars out.jar
383
+ -libraryjars &lt;java.home&gt;/lib/rt.jar
384
+ -printmapping out.map
385
+
386
+ -keepparameternames
387
+ -renamesourcefileattribute SourceFile
388
+ -keepattributes Exceptions,InnerClasses,Signature,Deprecated,
389
+ SourceFile,LineNumberTable,*Annotation*,EnclosingMethod
390
+
391
+ -keep public class * {
392
+ public protected *;
393
+ }
394
+
395
+ -keepclassmembernames class * {
396
+ java.lang.Class class$(java.lang.String);
397
+ java.lang.Class class$(java.lang.String, boolean);
398
+ }
399
+
400
+ -keepclasseswithmembernames class * {
401
+ native &lt;methods&gt;;
402
+ }
403
+
404
+ -keepclassmembers enum * {
405
+ public static **[] values();
406
+ public static ** valueOf(java.lang.String);
407
+ }
408
+
409
+ -keepclassmembers class * implements java.io.Serializable {
410
+ static final long serialVersionUID;
411
+ private static final java.io.ObjectStreamField[] serialPersistentFields;
412
+ private void writeObject(java.io.ObjectOutputStream);
413
+ private void readObject(java.io.ObjectInputStream);
414
+ java.lang.Object writeReplace();
415
+ java.lang.Object readResolve();
416
+ }
417
+ </pre>
418
+ <p>
419
+ This configuration should preserve everything we'll ever want to access in the
420
+ library. Only if there are any other non-public classes or methods that are
421
+ invoked dynamically, they should be specified using additional <a
422
+ href="usage.html#keep"><code>-keep</code></a> options.
423
+ <p>
424
+ The <a
425
+ href="usage.html#keepclassmembernames"><code>-keepclassmembernames</code></a>
426
+ option for the <code>class$</code> methods is not strictly necessary. These
427
+ methods are inserted by the <code>javac</code> compiler and the
428
+ <code>jikes</code> compiler respectively, in JDK 1.2 and older, to implement
429
+ the <code>.class</code> construct. ProGuard will automatically detect them and
430
+ deal with them, even when their names have been obfuscated. However, other
431
+ obfuscators may rely on the original method names. It may therefore be helpful
432
+ to preserve them, in case these other obfuscators are ever used for further
433
+ obfuscation of the library.
434
+ <p>
435
+ The "Exceptions" attribute has to be preserved, so the compiler knows which
436
+ exceptions methods may throw.
437
+ <p>
438
+ The "InnerClasses" attribute (or more precisely, its source name part) has to
439
+ be preserved too, for any inner classes that can be referenced from outside the
440
+ library. The <code>javac</code> compiler would be unable to find the inner
441
+ classes otherwise.
442
+ <p>
443
+ The "Signature" attribute is required to be able to access generic types when
444
+ compiling in JDK 5.0 and higher.
445
+ <p>
446
+ The <a href="usage.html#keepparameternames"><code>-keepparameternames</code></a>
447
+ option keeps the parameter names in the "LocalVariableTable" and
448
+ "LocalVariableTypeTable" attributes of public library methods. Some IDEs can
449
+ present these names to the developers who use the library.
450
+ <p>
451
+ Finally, we're keeping the "Deprecated" attribute and the attributes for
452
+ producing <a href="#stacktrace">useful stack traces</a>.
453
+ <p>
454
+ We've also added some options for for processing <a href="#native">native
455
+ methods</a>, <a href="#enumerations">enumerations</a>, <a
456
+ href="#serializable">serializable classes</a>, and <a
457
+ href="#annotations">annotations</a>, which are all discussed in their
458
+ respective examples.
459
+
460
+ <h3><a name="applications">All possible applications in the input jars</a></h3>
461
+
462
+ These options shrink, optimize, and obfuscate all public applications in
463
+ <code>in.jar</code>:
464
+ <pre>
465
+ -injars in.jar
466
+ -outjars out.jar
467
+ -libraryjars &lt;java.home&gt;/lib/rt.jar
468
+ -printseeds
469
+
470
+ -keepclasseswithmembers public class * {
471
+ public static void main(java.lang.String[]);
472
+ }
473
+ </pre>
474
+ <p>
475
+ Note the use of <a
476
+ href="usage.html#keepclasseswithmembers"><code>-keepclasseswithmembers</code></a>.
477
+ We don't want to preserve all classes, just all classes that have main
478
+ methods, and those methods.
479
+ <p>
480
+ The <a href="usage.html#printseeds"><code>-printseeds</code></a> option prints
481
+ out which classes exactly will be preserved, so we know for sure we're getting
482
+ what we want.
483
+ <p>
484
+ If applicable, you should add options for processing <a href="#native">native
485
+ methods</a>, <a href="#callback">callback methods</a>, <a
486
+ href="#enumerations">enumerations</a>, <a href="#serializable">serializable
487
+ classes</a>, <a href="#beans">bean classes</a>, <a
488
+ href="#annotations">annotations</a>, and <a href="#resourcefiles">resource
489
+ files</a>.
490
+
491
+ <h3><a name="applets">All possible applets in the input jars</a></h3>
492
+
493
+ These options shrink, optimize, and obfuscate all public applets in
494
+ <code>in.jar</code>:
495
+ <pre>
496
+ -injars in.jar
497
+ -outjars out.jar
498
+ -libraryjars &lt;java.home&gt;/lib/rt.jar
499
+ -printseeds
500
+
501
+ -keep public class * extends java.applet.Applet
502
+ </pre>
503
+ <p>
504
+ We're simply keeping all classes that extend the <code>Applet</code> class.
505
+ <p>
506
+ Again, the <a href="usage.html#printseeds"><code>-printseeds</code></a> option
507
+ prints out which applets exactly will be preserved.
508
+ <p>
509
+ If applicable, you should add options for processing <a href="#native">native
510
+ methods</a>, <a href="#callback">callback methods</a>, <a
511
+ href="#enumerations">enumerations</a>, <a href="#serializable">serializable
512
+ classes</a>, <a href="#beans">bean classes</a>, <a
513
+ href="#annotations">annotations</a>, and <a href="#resourcefiles">resource
514
+ files</a>.
515
+
516
+ <h3><a name="midlets">All possible midlets in the input jars</a></h3>
517
+
518
+ These options shrink, optimize, obfuscate, and preverify all public midlets in
519
+ <code>in.jar</code>:
520
+ <pre>
521
+ -injars in.jar
522
+ -outjars out.jar
523
+ -libraryjars /usr/local/java/wtk2.5.2/lib/midpapi20.jar
524
+ -libraryjars /usr/local/java/wtk2.5.2/lib/cldcapi11.jar
525
+ -overloadaggressively
526
+ -repackageclasses ''
527
+ -allowaccessmodification
528
+ -microedition
529
+ -printseeds
530
+
531
+ -keep public class * extends javax.microedition.midlet.MIDlet
532
+ </pre>
533
+ <p>
534
+ We're simply keeping all classes that extend the <code>MIDlet</code> class.
535
+ <p>
536
+ The <a href="usage.html#microedition"><code>-microedition</code></a> option
537
+ makes sure the class files are preverified for Java Micro Edition, producing
538
+ compact <code>StackMap</code> attributes. It is no longer necessary to run an
539
+ external preverifier.
540
+ <p>
541
+ Be careful if you do use the external <code>preverify</code> tool on a platform
542
+ with a case-insensitive filing system, such as Windows. Because this tool
543
+ unpacks your processed jars, you should then use ProGuard's <a
544
+ href="usage.html#dontusemixedcaseclassnames"><code>-dontusemixedcaseclassnames</code></a>
545
+ option.
546
+ <p>
547
+ The <a href="usage.html#printseeds"><code>-printseeds</code></a> option prints
548
+ out which midlets exactly will be preserved.
549
+ <p>
550
+ If applicable, you should add options for processing <a href="#native">native
551
+ methods</a> and <a href="#resourcefiles">resource files</a>.
552
+ <p>
553
+ Note that you will still have to adapt the midlet jar size in the
554
+ corresponding jad file; ProGuard doesn't do that for you.
555
+
556
+ <h3><a name="jcapplets">All possible Java Card applets in the input jars</a></h3>
557
+
558
+ These options shrink, optimize, and obfuscate all public Java Card applets in
559
+ <code>in.jar</code>:
560
+ <pre>
561
+ -injars in.jar
562
+ -outjars out.jar
563
+ -libraryjars /usr/local/java/javacard2.2.2/lib/api.jar
564
+ -dontwarn java.lang.Class
565
+ -overloadaggressively
566
+ -repackageclasses ''
567
+ -allowaccessmodification
568
+ -printseeds
569
+
570
+ -keep public class * implements javacard.framework.Applet
571
+ </pre>
572
+ <p>
573
+ We're simply keeping all classes that implement the <code>Applet</code>
574
+ interface.
575
+ <p>
576
+ The <a href="usage.html#printseeds"><code>-printseeds</code></a> option prints
577
+ out which applets exactly will be preserved.
578
+
579
+ <h3><a name="xlets">All possible xlets in the input jars</a></h3>
580
+
581
+ These options shrink, optimize, and obfuscate all public xlets in
582
+ <code>in.jar</code>:
583
+ <pre>
584
+ -injars in.jar
585
+ -outjars out.jar
586
+ -libraryjars /usr/local/java/jtv1.1/javatv.jar
587
+ -libraryjars /usr/local/java/cdc1.1/lib/cdc.jar
588
+ -libraryjars /usr/local/java/cdc1.1/lib/btclasses.zip
589
+ -overloadaggressively
590
+ -repackageclasses ''
591
+ -allowaccessmodification
592
+ -printseeds
593
+
594
+ -keep public class * implements javax.tv.xlet.Xlet
595
+ </pre>
596
+ <p>
597
+ We're simply keeping all classes that implement the <code>Xlet</code> interface.
598
+ <p>
599
+ The <a href="usage.html#printseeds"><code>-printseeds</code></a> option prints
600
+ out which xlets exactly will be preserved.
601
+
602
+ <h3><a name="servlets">All possible servlets in the input jars</a></h3>
603
+
604
+ These options shrink, optimize, and obfuscate all public servlets in
605
+ <code>in.jar</code>:
606
+ <pre>
607
+ -injars in.jar
608
+ -outjars out.jar
609
+ -libraryjars &lt;java.home&gt;/lib/rt.jar
610
+ -libraryjars /usr/local/java/servlet/servlet.jar
611
+ -printseeds
612
+
613
+ -keep public class * implements javax.servlet.Servlet
614
+ </pre>
615
+ <p>
616
+ Keeping all servlets is very similar to keeping all applets. The servlet API
617
+ is not part of the standard run-time jar, so we're specifying it as a library.
618
+ Don't forget to use the right path name.
619
+ <p>
620
+ We're then keeping all classes that implement the <code>Servlet</code>
621
+ interface. We're using the <code>implements</code> keyword because it looks
622
+ more familiar in this context, but it is equivalent to <code>extends</code>,
623
+ as far as ProGuard is concerned.
624
+ <p>
625
+ The <a href="usage.html#printseeds"><code>-printseeds</code></a> option prints
626
+ out which servlets exactly will be preserved.
627
+ <p>
628
+ If applicable, you should add options for processing <a href="#native">native
629
+ methods</a>, <a href="#callback">callback methods</a>, <a
630
+ href="#enumerations">enumerations</a>, <a href="#serializable">serializable
631
+ classes</a>, <a href="#beans">bean classes</a>, <a
632
+ href="#annotations">annotations</a>, and <a href="#resourcefiles">resource
633
+ files</a>.
634
+
635
+ <h3><a name="scala">Scala applications with the Scala runtime</a></h3>
636
+
637
+ These options shrink, optimize, and obfuscate all public Scala applications in
638
+ <code>in.jar</code>:
639
+ <pre>
640
+ -injars in.jar
641
+ -injars /usr/local/java/scala-2.9.1/lib/scala-library.jar
642
+ -outjars out.jar
643
+ -libraryjars &lt;java.home&gt;/lib/rt.jar
644
+
645
+ -dontwarn scala.**
646
+
647
+ -keepclasseswithmembers public class * {
648
+ public static void main(java.lang.String[]);
649
+ }
650
+
651
+ -keep class * implements org.xml.sax.EntityResolver
652
+
653
+ -keepclassmembers class * {
654
+ ** MODULE$;
655
+ }
656
+
657
+ -keepclassmembernames class scala.concurrent.forkjoin.ForkJoinPool {
658
+ long eventCount;
659
+ int workerCounts;
660
+ int runControl;
661
+ scala.concurrent.forkjoin.ForkJoinPool$WaitQueueNode syncStack;
662
+ scala.concurrent.forkjoin.ForkJoinPool$WaitQueueNode spareStack;
663
+ }
664
+
665
+ -keepclassmembernames class scala.concurrent.forkjoin.ForkJoinWorkerThread {
666
+ int base;
667
+ int sp;
668
+ int runState;
669
+ }
670
+
671
+ -keepclassmembernames class scala.concurrent.forkjoin.ForkJoinTask {
672
+ int status;
673
+ }
674
+
675
+ -keepclassmembernames class scala.concurrent.forkjoin.LinkedTransferQueue {
676
+ scala.concurrent.forkjoin.LinkedTransferQueue$PaddedAtomicReference head;
677
+ scala.concurrent.forkjoin.LinkedTransferQueue$PaddedAtomicReference tail;
678
+ scala.concurrent.forkjoin.LinkedTransferQueue$PaddedAtomicReference cleanMe;
679
+ }
680
+ </pre>
681
+ <p>
682
+ The configuration is essentially the same as
683
+ for <a href="#applications">processing applications</a>, because Scala is
684
+ compiled to ordinary Java bytecode. However, the example processes the Scala
685
+ runtime library as well. The processed jar can be an order of magnitude
686
+ smaller and a few times faster than the original code (for the Scala code
687
+ examples, for instance).
688
+ <p>
689
+ The <a href="usage.html#dontwarn"><code>-dontwarn</code></a> option tells
690
+ ProGuard not to complain about some artefacts in the Scala runtime, the way it
691
+ is compiled by the <code>scalac</code> compiler (at least in Scala 2.9.1 and
692
+ older). Note that this option should always be used with care.
693
+ <p>
694
+ The additional <a href="usage.html#keepoverview"><code>-keep</code></a>
695
+ options make sure that some classes and some fields that are accessed by means
696
+ of introspection are not removed or renamed.
697
+ <p>
698
+ If applicable, you should add options for processing <a href="#native">native
699
+ methods</a>, <a href="#callback">callback methods</a>, <a
700
+ href="#enumerations">enumerations</a>, <a href="#serializable">serializable
701
+ classes</a>, <a href="#beans">bean classes</a>, <a
702
+ href="#annotations">annotations</a>, and <a href="#resourcefiles">resource
703
+ files</a>.
704
+ <h3><a name="native">Processing native methods</a></h3>
705
+
706
+ If your application, applet, servlet, library, etc., contains native methods,
707
+ you'll want to preserve their names and their classes' names, so they can
708
+ still be linked to the native library. The following additional option will
709
+ ensure that:
710
+ <pre>
711
+ -keepclasseswithmembernames class * {
712
+ native &lt;methods&gt;;
713
+ }
714
+ </pre>
715
+ <p>
716
+ Note the use of <a
717
+ href="usage.html#keepclasseswithmembernames"><code>-keepclasseswithmembernames</code></a>.
718
+ We don't want to preserve all classes or all native methods; we just want to
719
+ keep the relevant names from being obfuscated.
720
+ <p>
721
+ ProGuard doesn't look at your native code, so it won't automatically preserve
722
+ the classes or class members that are invoked by the native code. These are
723
+ entry points, which you'll have to specify explicitly. <a
724
+ href="callback">Callback methods</a> are discussed below as a typical example.
725
+
726
+ <h3><a name="callback">Processing callback methods</a></h3>
727
+
728
+ If your application, applet, servlet, library, etc., contains callback
729
+ methods, which are called from external code (native code, scripts,...),
730
+ you'll want to preserve them, and probably their classes too. They are just
731
+ entry points to your code, much like, say, the main method of an application.
732
+ If they aren't preserved by other <code>-keep</code> options, something like
733
+ the following option will keep the callback class and method:
734
+ <pre>
735
+ -keep class mypackage.MyCallbackClass {
736
+ void myCallbackMethod(java.lang.String);
737
+ }
738
+ </pre>
739
+ <p>
740
+ This will preserve the given class and method from being removed or renamed.
741
+
742
+ <h3><a name="enumerations">Processing enumeration classes</a></h3>
743
+
744
+ If your application, applet, servlet, library, etc., contains enumeration
745
+ classes, you'll have to preserve some special methods. Enumerations were
746
+ introduced in Java 5. The java compiler translates enumerations into classes
747
+ with a special structure. Notably, the classes contain implementations of some
748
+ static methods that the run-time environment accesses by introspection (Isn't
749
+ that just grand? Introspection is the self-modifying code of a new
750
+ generation). You have to specify these explicitly, to make sure they aren't
751
+ removed or obfuscated:
752
+ <pre>
753
+ -keepclassmembers enum * {
754
+ public static **[] values();
755
+ public static ** valueOf(java.lang.String);
756
+ }
757
+ </pre>
758
+
759
+ <h3><a name="serializable">Processing serializable classes</a></h3>
760
+
761
+ More complex applications, applets, servlets, libraries, etc., may contain
762
+ classes that are serialized. Depending on the way in which they are used, they
763
+ may require special attention:
764
+ <ul>
765
+
766
+ <li>Often, serialization is simply a means of transporting data, without
767
+ long-term storage. Classes that are shrunk and obfuscated should then
768
+ continue to function fine with the following additional options:
769
+
770
+ <pre>
771
+ -keepclassmembers class * implements java.io.Serializable {
772
+ private static final java.io.ObjectStreamField[] serialPersistentFields;
773
+ private void writeObject(java.io.ObjectOutputStream);
774
+ private void readObject(java.io.ObjectInputStream);
775
+ java.lang.Object writeReplace();
776
+ java.lang.Object readResolve();
777
+ }
778
+ </pre>
779
+ <p>
780
+
781
+ The <a
782
+ href="usage.html#keepclassmembers"><code>-keepclassmembers</code></a>
783
+ option makes sure that any serialization methods are kept. By using this
784
+ option instead of the basic <code>-keep</code> option, we're not
785
+ forcing preservation of <i>all</i> serializable classes, just preservation
786
+ of the listed members of classes that are actually used.</li>
787
+
788
+ <li>Sometimes, the serialized data are stored, and read back later into newer
789
+ versions of the serializable classes. One then has to take care the classes
790
+ remain compatible with their unprocessed versions and with future
791
+ processed versions. In such cases, the relevant classes will most likely
792
+ have <code>serialVersionUID</code> fields. The following options should
793
+ then be sufficient to ensure compatibility over time:
794
+
795
+ <pre>
796
+ -keepnames class * implements java.io.Serializable
797
+
798
+ -keepclassmembers class * implements java.io.Serializable {
799
+ static final long serialVersionUID;
800
+ private static final java.io.ObjectStreamField[] serialPersistentFields;
801
+ !static !transient &lt;fields&gt;;
802
+ private void writeObject(java.io.ObjectOutputStream);
803
+ private void readObject(java.io.ObjectInputStream);
804
+ java.lang.Object writeReplace();
805
+ java.lang.Object readResolve();
806
+ }
807
+ </pre>
808
+ <p>
809
+
810
+ The <code>serialVersionUID</code> and <code>serialPersistentFields</code>
811
+ lines makes sure those fields are preserved, if they are present.
812
+ The <code>&lt;fields&gt;</code> line preserves all non-static,
813
+ non-transient fields, with their original names. The introspection of the
814
+ serialization process and the de-serialization process will then find
815
+ consistent names.</li>
816
+
817
+ <li>Occasionally, the serialized data have to remain compatible, but the
818
+ classes involved lack <code>serialVersionUID</code> fields. I imagine the
819
+ original code will then be hard to maintain, since the serial version UID
820
+ is then computed from a list of features the serializable class. Changing
821
+ the class ever so slightly may change the computed serial version UID. The
822
+ list of features is specified in the section on <a
823
+ href="http://java.sun.com/javase/6/docs/platform/serialization/spec/class.html#4100">Stream
824
+ Unique Identifiers</a> of Sun's <a
825
+ href="http://java.sun.com/javase/6/docs/platform/serialization/spec/serialTOC.html">Java
826
+ Object Serialization Specification</a>. The following directives should at
827
+ least partially ensure compatibility with the original classes:
828
+
829
+ <pre>
830
+ -keepnames class * implements java.io.Serializable
831
+
832
+ -keepclassmembers class * implements java.io.Serializable {
833
+ static final long serialVersionUID;
834
+ private static final java.io.ObjectStreamField[] serialPersistentFields;
835
+ !static !transient &lt;fields&gt;;
836
+ !private &lt;fields&gt;;
837
+ !private &lt;methods&gt;;
838
+ private void writeObject(java.io.ObjectOutputStream);
839
+ private void readObject(java.io.ObjectInputStream);
840
+ java.lang.Object writeReplace();
841
+ java.lang.Object readResolve();
842
+ }
843
+ </pre>
844
+ <p>
845
+
846
+ The new options force preservation of the elements involved in the UID
847
+ computation. In addition, the user will have to manually specify all
848
+ interfaces of the serializable classes (using something like "<code>-keep
849
+ interface MyInterface</code>"), since these names are also used when
850
+ computing the UID. A fast but sub-optimal alternative would be simply
851
+ keeping all interfaces with "<code>-keep interface *</code>".</li>
852
+
853
+ </ul>
854
+ <p>
855
+
856
+ Note that the above options may preserve more classes and class members
857
+ than strictly necessary. For instance, a large number of classes may implement
858
+ the <code>Serialization</code> interface, yet only a small number may actually
859
+ ever be serialized. Knowing your application and tuning the configuration
860
+ often produces more compact results.
861
+
862
+ <h3><a name="beans">Processing bean classes</a></h3>
863
+
864
+ If your application, applet, servlet, library, etc., makes extensive use of
865
+ introspection on bean classes to find bean editor classes, or getter and
866
+ setter methods, then configuration may become painful. There's not much else
867
+ you can do than making sure the bean class names, or the getter and setter
868
+ names don't change. For instance:
869
+ <pre>
870
+ -keep public class mypackage.MyBean {
871
+ public void setMyProperty(int);
872
+ public int getMyProperty();
873
+ }
874
+
875
+ -keep public class mypackage.MyBeanEditor
876
+ </pre>
877
+ <p>
878
+ If there are too many elements to list explicitly, wildcards in class names
879
+ and method signatures might be helpful. This example should encompasses all
880
+ possible setters and getters in classes in the package <code>mybeans</code>:
881
+ <pre>
882
+ -keep class mybeans.** {
883
+ void set*(***);
884
+ void set*(int, ***);
885
+
886
+ boolean is*();
887
+ boolean is*(int);
888
+
889
+ *** get*();
890
+ *** get*(int);
891
+ }
892
+ </pre>
893
+ <p>
894
+ The '<code>***</code>' wildcard matches any type (primitive or non-primitive,
895
+ array or non-array). The methods with the '<code>int</code>' arguments matches
896
+ properties that are lists.
897
+
898
+ <h3><a name="annotations">Processing annotations</a></h3>
899
+
900
+ If your application, applet, servlet, library, etc., uses annotations, you may
901
+ want to preserve them in the processed output. Annotations are represented by
902
+ attributes that have no direct effect on the execution of the code. However,
903
+ their values can be retrieved through introspection, allowing developers to
904
+ adapt the execution behavior accordingly. By default, ProGuard treats
905
+ annotation attributes as optional, and removes them in the obfuscation step.
906
+ If they are required, you'll have to specify this explicitly:
907
+ <pre>
908
+ -keepattributes *Annotation*
909
+ </pre>
910
+ <p>
911
+ For brevity, we're specifying a wildcarded attribute name, which will match
912
+ <code>RuntimeVisibleAnnotations</code>,
913
+ <code>RuntimeInvisibleAnnotations</code>,
914
+ <code>RuntimeVisibleParameterAnnotations</code>,
915
+ <code>RuntimeInvisibleParameterAnnotations</code>, and
916
+ <code>AnnotationDefault</code>. Depending on the purpose of the processed
917
+ code, you could refine this selection, for instance not keeping the run-time
918
+ invisible annotations (which are only used at compile-time).
919
+ <p>
920
+ Some code may make further use of introspection to figure out the enclosing
921
+ methods of anonymous inner classes. In that case, the corresponding attribute
922
+ has to be preserved as well:
923
+ <pre>
924
+ -keepattributes EnclosingMethod
925
+ </pre>
926
+
927
+ <h3><a name="database">Processing database drivers</a></h3>
928
+
929
+ Database drivers are implementations of the <code>Driver</code> interface.
930
+ Since they are often created dynamically, you may want to preserve any
931
+ implementations that you are processing as entry points:
932
+ <pre>
933
+ -keep class * implements java.sql.Driver
934
+ </pre>
935
+ <p>
936
+ This option also gets rid of the note that ProGuard prints out about
937
+ <code>(java.sql.Driver)Class.forName</code> constructs, if you are
938
+ instantiating a driver in your code (without necessarily implementing any
939
+ drivers yourself).
940
+
941
+ <h3><a name="componentui">Processing ComponentUI classes</a></h3>
942
+
943
+ Swing UI look and feels are implemented as extensions of the
944
+ <code>ComponentUI</code> class. For some reason, these have to contain a
945
+ static method <code>createUI</code>, which the Swing API invokes using
946
+ introspection. You should therefore always preserve the method as an entry
947
+ point, for instance like this:
948
+ <pre>
949
+ -keep class * extends javax.swing.plaf.ComponentUI {
950
+ public static javax.swing.plaf.ComponentUI createUI(javax.swing.JComponent);
951
+ }
952
+ </pre>
953
+ <p>
954
+ This option also keeps the classes themselves.
955
+
956
+ <h3><a name="rmi">Processing RMI code</a></h3>
957
+
958
+ Reportedly, the easiest way to handle RMI code is to process the code with
959
+ ProGuard first and then invoke the <code>rmic</code> tool. If that is not
960
+ possible, you may want to try something like this:
961
+ <pre>
962
+ -keepattributes Exceptions
963
+
964
+ -keep interface * extends java.rmi.Remote {
965
+ &lt;methods&gt;;
966
+ }
967
+
968
+ -keep class * implements java.rmi.Remote {
969
+ &lt;init&gt;(java.rmi.activation.ActivationID, java.rmi.MarshalledObject);
970
+ }
971
+ </pre>
972
+ <p>
973
+ The first <code>-keep</code> option keeps all your Remote interfaces and their
974
+ methods. The second one keeps all the implementations, along with their
975
+ particular RMI constructors, if any.
976
+ <p>
977
+ The <code>Exceptions</code> attribute has to be kept too, because the RMI
978
+ handling code performs introspection to check whether the method signatures
979
+ are compatible.
980
+
981
+ <h3><a name="resourcefiles">Processing resource files</a></h3>
982
+
983
+ If your application, applet, servlet, library, etc., contains resource files,
984
+ it may be necessary to adapt their names and/or their contents when the
985
+ application is obfuscated. The following two options can achieve this
986
+ automatically:
987
+ <pre>
988
+ -adaptresourcefilenames **.properties,**.gif,**.jpg
989
+ -adaptresourcefilecontents **.properties,META-INF/MANIFEST.MF
990
+ </pre>
991
+ <p>
992
+ The <a href="usage.html#adaptresourcefilenames">-adaptresourcefilenames</a>
993
+ option in this case renames properties files and image files in the processed
994
+ output, based on the obfuscated names of their corresponding class files (if
995
+ any). The <a
996
+ href="usage.html#adaptresourcefilecontents">-adaptresourcefilecontents</a>
997
+ option looks for class names in properties files and in the manifest file, and
998
+ replaces these names by the obfuscated names (if any). You'll probably want to
999
+ adapt the filters to suit your application.
1000
+
1001
+ <h3><a name="manifestfiles">Processing manifest files</a></h3>
1002
+
1003
+ As illustrated in the previous section, manifest files can be treated like
1004
+ ordinary resource files. ProGuard can adapt obfuscated class names in the
1005
+ files, but it won't make any other changes. If you want anything else, you
1006
+ should apply an external tool. For instance, if a manifest file contains
1007
+ signing information, you should sign the jar again after it has been
1008
+ processed.
1009
+ <p>
1010
+ If you're merging several input jars into a single output jar, you'll have to
1011
+ pick one, typically by specifying <a href="usage.html#filters">filters</a>:
1012
+ <pre>
1013
+ -injars in1.jar
1014
+ -injars in2.jar(!META-INF/MANIFEST.MF)
1015
+ -injars in3.jar(!META-INF/MANIFEST.MF)
1016
+ -outjars out.jar
1017
+ </pre>
1018
+ <p>
1019
+ The filters will let ProGuard copy the manifest file from the first jar and
1020
+ ignore any manifest files in the second and third input jars. Note that
1021
+ ProGuard will leave the order of the files in the jars unchanged; manifest
1022
+ files are not necessarily put first.
1023
+
1024
+ <h3><a name="stacktrace">Producing useful obfuscated stack traces</a></h3>
1025
+
1026
+ These options let obfuscated applications or libraries produce stack traces
1027
+ that can still be deciphered later on:
1028
+ <pre>
1029
+ -printmapping out.map
1030
+
1031
+ -renamesourcefileattribute SourceFile
1032
+ -keepattributes SourceFile,LineNumberTable
1033
+ </pre>
1034
+ <p>
1035
+ We're keeping all source file attributes, but we're replacing their values by
1036
+ the string "SourceFile". We could use any string. This string is already
1037
+ present in all class files, so it doesn't take up any extra space. If you're
1038
+ working with J++, you'll want to keep the "SourceDir" attribute as well.
1039
+ <p>
1040
+ We're also keeping the line number tables of all methods.
1041
+ <p>
1042
+ Whenever both of these attributes are present, the Java run-time environment
1043
+ will include line number information when printing out exception stack traces.
1044
+ <p>
1045
+ The information will only be useful if we can map the obfuscated names back to
1046
+ their original names, so we're saving the mapping to a file
1047
+ <code>out.map</code>. The information can then be used by the <a
1048
+ href="retrace/index.html">ReTrace</a> tool to restore the original stack trace.
1049
+
1050
+ <h3><a name="repackaging">Obfuscating package names</a></h3>
1051
+
1052
+ Package names can be obfuscated in various ways, with increasing levels of
1053
+ obfuscation and compactness. For example, consider the following classes:
1054
+ <pre>
1055
+ mycompany.myapplication.MyMain
1056
+ mycompany.myapplication.Foo
1057
+ mycompany.myapplication.Bar
1058
+ mycompany.myapplication.extra.FirstExtra
1059
+ mycompany.myapplication.extra.SecondExtra
1060
+ mycompany.util.FirstUtil
1061
+ mycompany.util.SecondUtil
1062
+ </pre>
1063
+ <p>
1064
+ Let's assume the class name <code>mycompany.myapplication.MyMain</code> is the
1065
+ main application class that is kept by the configuration. All other class names
1066
+ can be obfuscated.
1067
+ <p>
1068
+ By default, packages that contain classes that can't be renamed aren't renamed
1069
+ either, and the package hierarchy is preserved. This results in obfuscated
1070
+ class names like these:
1071
+ <pre>
1072
+ mycompany.myapplication.MyMain
1073
+ mycompany.myapplication.a
1074
+ mycompany.myapplication.b
1075
+ mycompany.myapplication.a.a
1076
+ mycompany.myapplication.a.b
1077
+ mycompany.a.a
1078
+ mycompany.a.b
1079
+ </pre>
1080
+ <p>
1081
+ The <a
1082
+ href="usage.html#flattenpackagehierarchy"><code>-flattenpackagehierarchy</code></a>
1083
+ option obfuscates the package names further, by flattening the package
1084
+ hierarchy of obfuscated packages:
1085
+ <pre>
1086
+ -flattenpackagehierarchy 'myobfuscated'
1087
+ </pre>
1088
+ <p>
1089
+ The obfuscated class names then look as follows:
1090
+ <pre>
1091
+ mycompany.myapplication.MyMain
1092
+ mycompany.myapplication.a
1093
+ mycompany.myapplication.b
1094
+ myobfuscated.a.a
1095
+ myobfuscated.a.b
1096
+ myobfuscated.b.a
1097
+ myobfuscated.b.b
1098
+ </pre>
1099
+ <p>
1100
+ Alternatively, the <a
1101
+ href="usage.html#repackageclasses"><code>-repackageclasses</code></a> option
1102
+ obfuscates the entire packaging, by combining obfuscated classes into a single
1103
+ package:
1104
+ <pre>
1105
+ -repackageclasses 'myobfuscated'
1106
+ </pre>
1107
+ The obfuscated class names then look as follows:
1108
+ <pre>
1109
+ mycompany.myapplication.MyMain
1110
+ mycompany.myapplication.a
1111
+ mycompany.myapplication.b
1112
+ myobfuscated.a
1113
+ myobfuscated.b
1114
+ myobfuscated.c
1115
+ myobfuscated.d
1116
+ </pre>
1117
+ <p>
1118
+ Additionally specifying the <a
1119
+ href="usage.html#allowaccessmodification"><code>-allowaccessmodification</code></a>
1120
+ option allows access permissions of classes and class members to
1121
+ be broadened, opening up the opportunity to repackage all obfuscated classes:
1122
+ <pre>
1123
+ -repackageclasses 'myobfuscated'
1124
+ -allowaccessmodification
1125
+ </pre>
1126
+ The obfuscated class names then look as follows:
1127
+ <pre>
1128
+ mycompany.myapplication.MyMain
1129
+ myobfuscated.a
1130
+ myobfuscated.b
1131
+ myobfuscated.c
1132
+ myobfuscated.d
1133
+ myobfuscated.e
1134
+ myobfuscated.f
1135
+ </pre>
1136
+ <p>
1137
+ The specified target package can always be the root package. For instance:
1138
+ <pre>
1139
+ -repackageclasses ''
1140
+ -allowaccessmodification
1141
+ </pre>
1142
+ The obfuscated class names are then the shortest possible names:
1143
+ <pre>
1144
+ mycompany.myapplication.MyMain
1145
+ a
1146
+ b
1147
+ c
1148
+ d
1149
+ e
1150
+ f
1151
+ </pre>
1152
+ <p>
1153
+ Note that not all levels of obfuscation of package names may be acceptable for
1154
+ all code. Notably, you may have to take into account that your application may
1155
+ contain <a href="#resourcefiles">resource files</a> that have to be adapted.
1156
+
1157
+ <h3><a name="restructuring">Restructuring the output archives</a></h3>
1158
+
1159
+ In simple applications, all output classes and resources files are merged into
1160
+ a single jar. For example:
1161
+ <pre>
1162
+ -injars classes
1163
+ -injars in1.jar
1164
+ -injars in2.jar
1165
+ -injars in3.jar
1166
+ -outjars out.jar
1167
+ </pre>
1168
+ <p>
1169
+ This configuration merges the processed versions of the files in the
1170
+ <code>classes</code> directory and the three jars into a single output jar
1171
+ <code>out.jar</code>.
1172
+ <p>
1173
+ If you want to preserve the structure of your input jars (and/or wars, ears,
1174
+ zips, or directories), you can specify an output directory (or a war, an ear,
1175
+ or a zip). For example:
1176
+ <pre>
1177
+ -injars in1.jar
1178
+ -injars in2.jar
1179
+ -injars in3.jar
1180
+ -outjars out
1181
+ </pre>
1182
+ <p>
1183
+ The input jars will then be reconstructed in the directory <code>out</code>,
1184
+ with their original names.
1185
+ <p>
1186
+ You can also combine archives into higher level archives. For example:
1187
+ <pre>
1188
+ -injars in1.jar
1189
+ -injars in2.jar
1190
+ -injars in3.jar
1191
+ -outjars out.war
1192
+ </pre>
1193
+ <p>
1194
+ The other way around, you can flatten the archives inside higher level
1195
+ archives into simple archives:
1196
+ <pre>
1197
+ -injars in.war
1198
+ -outjars out.jar
1199
+ </pre>
1200
+ <p>
1201
+ This configuration puts the processed contents of all jars inside
1202
+ <code>in.war</code> (plus any other contents of <code>in.war</code>) into
1203
+ <code>out.jar</code>.
1204
+ <p>
1205
+ If you want to combine input jars (and/or wars, ears, zips, or directories)
1206
+ into output jars (and/or wars, ears, zips, or directories), you can group the
1207
+ <a href="usage.html#injars"><code>-injars</code></a> and <a
1208
+ href="usage.html#outjars"><code>-outjars</code></a> options. For example:
1209
+ <pre>
1210
+ -injars base_in1.jar
1211
+ -injars base_in2.jar
1212
+ -injars base_in3.jar
1213
+ -outjars base_out.jar
1214
+
1215
+ -injars extra_in.jar
1216
+ -outjars extra_out.jar
1217
+ </pre>
1218
+ <p>
1219
+ This configuration puts the processed results of all <code>base_in*.jar</code>
1220
+ jars into <code>base_out.jar</code>, and the processed results of the
1221
+ <code>extra_in.jar</code> into <code>extra_out.jar</code>. Note that only the
1222
+ order of the options matters; the additional whitespace is just for clarity.
1223
+ <p>
1224
+ This grouping, archiving, and flattening can be arbitrarily complex. ProGuard
1225
+ always tries to package output archives in a sensible way, reconstructing the
1226
+ input entries as much as required.
1227
+
1228
+ <h3><a name="filtering">Filtering the input and the output</a></h3>
1229
+
1230
+ If you want even greater control, you can add
1231
+ <a href="usage.html#filters">filters</a> to the input and the output,
1232
+ filtering out zips, ears, wars, jars, and/or ordinary files. For example, if
1233
+ you want to disregard certain files from an input jar:
1234
+ <pre>
1235
+ -injars in.jar(!images/**)
1236
+ -outjars out.jar
1237
+ </pre>
1238
+ <p>
1239
+ This configuration removes any files in the <code>images</code> directory and
1240
+ its subdirectories.
1241
+ <p>
1242
+ Such filters can be convenient for avoiding warnings about duplicate files in
1243
+ the output. For example, only keeping the manifest file from a first input jar:
1244
+ <pre>
1245
+ -injars in1.jar
1246
+ -injars in2.jar(!META-INF/MANIFEST.MF)
1247
+ -injars in3.jar(!META-INF/MANIFEST.MF)
1248
+ -outjars out.jar
1249
+ </pre>
1250
+ <p>
1251
+ Another useful application is speeding up the processing by ProGuard, by
1252
+ disregarding a large number of irrelevant classes in the runtime library jar:
1253
+ <pre>
1254
+ -libraryjars &lt;java.home&gt;/lib/rt.jar(java/**,javax/**)
1255
+ </pre>
1256
+ <p>
1257
+ The filter makes ProGuard disregard <code>com.sun.**</code> classes, for
1258
+ instance , which don't affect the processing of ordinary applications.
1259
+ <p>
1260
+ It is also possible to filter the jars (and/or wars, ears, zips) themselves,
1261
+ based on their names. For example:
1262
+ <pre>
1263
+ -injars in(**/acme_*.jar;)
1264
+ -outjars out.jar
1265
+ </pre>
1266
+ <p>
1267
+ Note the semi-colon in the filter; the filter in front of it applies to jar
1268
+ names. In this case, only <code>acme_*.jar</code> jars are read from the
1269
+ directory <code>in</code> and its subdirectories. Filters for war names, ear
1270
+ names, and zip names can be prefixed with additional semi-colons. All types of
1271
+ filters can be combined. They are orthogonal.
1272
+ <p>
1273
+ On the other hand, you can also filter the output, in order to control what
1274
+ content goes where. For example:
1275
+ <pre>
1276
+ -injars in.jar
1277
+ -outjars code_out.jar(**.class)
1278
+ -outjars resources_out.jar
1279
+ </pre>
1280
+ <p>
1281
+ This configuration splits the processed output, sending <code>**.class</code>
1282
+ files to <code>code_out.jar</code>, and all remaining files to
1283
+ <code>resources_out.jar</code>.
1284
+ <p>
1285
+ Again, the filtering can be arbitrarily complex, especially when combined with
1286
+ grouping input and output.
1287
+
1288
+ <h3><a name="multiple">Processing multiple applications at once</a></h3>
1289
+
1290
+ You can process several dependent or independent applications (or applets,
1291
+ midlets,...) in one go, in order to save time and effort. ProGuard's input and
1292
+ output handling offers various ways to keep the output nicely structured.
1293
+ <p>
1294
+ The easiest way is to specify your input jars (and/or wars, ears, zips, and
1295
+ directories) and a single output directory. ProGuard will then reconstruct the
1296
+ input in this directory, using the original jar names. For example, showing
1297
+ just the input and output options:
1298
+ <pre>
1299
+ -injars application1.jar
1300
+ -injars application2.jar
1301
+ -injars application3.jar
1302
+ -outjars processed_applications
1303
+ </pre>
1304
+ <p>
1305
+ After processing, the directory <code>processed_applications</code> will
1306
+ contain processed versions of application jars, with their original names.
1307
+
1308
+ <h3><a name="incremental">Incremental obfuscation</a></h3>
1309
+
1310
+ After having <a href="#application">processed an application</a>, e.g.
1311
+ ProGuard itself, you can still incrementally add other pieces of code that
1312
+ depend on it, e.g. the ProGuard GUI:
1313
+ <pre>
1314
+ -injars proguardgui.jar
1315
+ -outjars proguardgui_out.jar
1316
+ -injars proguard.jar
1317
+ -outjars proguard_out.jar
1318
+ -libraryjars &lt;java.home&gt;/lib/rt.jar
1319
+ -applymapping proguard.map
1320
+
1321
+ -keep public class proguard.gui.ProGuardGUI {
1322
+ public static void main(java.lang.String[]);
1323
+ }
1324
+ </pre>
1325
+ <p>
1326
+ We're reading both unprocessed jars as input. Their processed contents will go
1327
+ to the respective output jars. The <a
1328
+ href="usage.html#applymapping"><code>-applymapping</code></a> option then
1329
+ makes sure the ProGuard part of the code gets the previously produced
1330
+ obfuscation mapping. The final application will consist of the obfuscated
1331
+ ProGuard jar and the additional obfuscated GUI jar.
1332
+ <p>
1333
+ The added code in this example is straightforward; it doesn't affect the
1334
+ original code. The <code>proguard_out.jar</code> will be identical to the one
1335
+ produced in the initial processing step. If you foresee adding more complex
1336
+ extensions to your code, you should specify the options <a
1337
+ href="usage.html#useuniqueclassmembernames"><code>-useuniqueclassmembernames</code></a>,
1338
+ <a href="usage.html#dontshrink"><code>-dontshrink</code></a>, and <a
1339
+ href="usage.html#dontoptimize"><code>-dontoptimize</code></a> <i>in the
1340
+ original processing step</i>. These options ensure that the obfuscated base
1341
+ jar will always remain usable without changes. You can then specify the base
1342
+ jar as a library jar:
1343
+ <pre>
1344
+ -injars proguardgui.jar
1345
+ -outjars proguardgui_out.jar
1346
+ -libraryjars proguard.jar
1347
+ -libraryjars &lt;java.home&gt;/lib/rt.jar
1348
+ -applymapping proguard.map
1349
+
1350
+ -keep public class proguard.gui.ProGuardGUI {
1351
+ public static void main(java.lang.String[]);
1352
+ }
1353
+ </pre>
1354
+
1355
+ <h3><a name="microedition">Preverifying class files for Java Micro Edition</a></h3>
1356
+
1357
+ Even if you're not interested in shrinking, optimizing, and obfuscating your
1358
+ midlets, as shown in the <a href="#midlets">midlets example</a>, you can still
1359
+ use ProGuard to preverify the class files for Java Micro Edition. ProGuard
1360
+ produces slightly more compact results than the traditional external
1361
+ preverifier.
1362
+ <pre>
1363
+ -injars in.jar
1364
+ -outjars out.jar
1365
+ -libraryjars /usr/local/java/wtk2.5.2/lib/midpapi20.jar
1366
+ -libraryjars /usr/local/java/wtk2.5.2/lib/cldcapi11.jar
1367
+
1368
+ -dontshrink
1369
+ -dontoptimize
1370
+ -dontobfuscate
1371
+
1372
+ -microedition
1373
+ </pre>
1374
+ <p>
1375
+ We're not processing the input, just making sure the class files are
1376
+ preverified by targeting them at Java Micro Edition with the <a
1377
+ href="usage.html#microedition"><code>-microedition</code></a> option. Note
1378
+ that we don't need any <code>-keep</code> options to specify entry points; all
1379
+ class files are simply preverified.
1380
+
1381
+ <h3><a name="upgrade">Upgrading class files to Java 6</a></h3>
1382
+
1383
+ The following options upgrade class files to Java 6, by updating their
1384
+ internal version numbers and preverifying them. The class files can then be
1385
+ loaded more efficiently by the Java 6 Virtual Machine.
1386
+ <pre>
1387
+ -injars in.jar
1388
+ -outjars out.jar
1389
+ -libraryjars &lt;java.home&gt;/lib/rt.jar
1390
+
1391
+ -dontshrink
1392
+ -dontoptimize
1393
+ -dontobfuscate
1394
+
1395
+ -target 1.6
1396
+ </pre>
1397
+ <p>
1398
+ We're not processing the input, just retargeting the class files with the <a
1399
+ href="usage.html#target"><code>-target</code></a> option. They will
1400
+ automatically be preverified for Java 6 as a result. Note that we don't need
1401
+ any <code>-keep</code> options to specify entry points; all class files are
1402
+ simply updated and preverified.
1403
+
1404
+ <h3><a name="deadcode">Finding dead code</a></h3>
1405
+
1406
+ These options list unused classes, fields, and methods in the application
1407
+ <code>mypackage.MyApplication</code>:
1408
+ <pre>
1409
+ -injars in.jar
1410
+ -libraryjars &lt;java.home&gt;/lib/rt.jar
1411
+
1412
+ -dontoptimize
1413
+ -dontobfuscate
1414
+ -dontpreverify
1415
+ -printusage
1416
+
1417
+ -keep public class mypackage.MyApplication {
1418
+ public static void main(java.lang.String[]);
1419
+ }
1420
+ </pre>
1421
+ <p>
1422
+ We're not specifying an output jar, just printing out some results. We're
1423
+ saving some processing time by skipping the other processing steps.
1424
+ <p>
1425
+ The java compiler inlines primitive constants and String constants
1426
+ (<code>static final</code> fields). ProGuard would therefore list such fields
1427
+ as not being used in the class files that it analyzes, even if they <i>are</i>
1428
+ used in the source files. We can add a <a
1429
+ href="usage.html#keepclassmembers"><code>-keepclassmembers</code></a> option
1430
+ that keeps those fields a priori, in order to avoid having them listed:
1431
+ <pre>
1432
+ -keepclassmembers class * {
1433
+ static final % *;
1434
+ static final java.lang.String *;
1435
+ }
1436
+ </pre>
1437
+
1438
+ <h3><a name="structure">Printing out the internal structure of class files</a></h3>
1439
+
1440
+ These options print out the internal structure of all class files in the input
1441
+ jar:
1442
+ <pre>
1443
+ -injars in.jar
1444
+
1445
+ -dontshrink
1446
+ -dontoptimize
1447
+ -dontobfuscate
1448
+ -dontpreverify
1449
+
1450
+ -dump
1451
+ </pre>
1452
+ <p>
1453
+ Note how we don't need to specify the Java run-time jar, because we're not
1454
+ processing the input jar at all.
1455
+
1456
+ <h3><a name="annotated">Using annotations to configure ProGuard</a></h3>
1457
+
1458
+ The traditional ProGuard configuration allows to keep a clean separation
1459
+ between the code and the configuration for shrinking, optimization, and
1460
+ obfuscation. However, it is also possible to define specific annotations,
1461
+ and then annotate the code to configure the processing.
1462
+ <p>
1463
+ You can find a set of such predefined annotations in the directory
1464
+ <code>examples/annotations/lib</code> in the ProGuard distribution.
1465
+ The annotation classes are defined in <code>annotations.jar</code>. The
1466
+ corresponding ProGuard configuration (or meta-configuration, if you prefer)
1467
+ is specified in <code>annotations.pro</code>. With these files, you can start
1468
+ annotating your code. For instance, a java source file
1469
+ <code>Application.java</code> can be annotated as follows:
1470
+ <pre>
1471
+ @KeepApplication
1472
+ public class Application {
1473
+ ....
1474
+ }
1475
+ </pre>
1476
+ <p>
1477
+ The ProGuard configuration file for the application can then be simplified by
1478
+ leveraging off these annotations:
1479
+ <pre>
1480
+ -injars in.jar
1481
+ -outjars out.jar
1482
+ -libraryjars &lt;java.home&gt;/lib/rt.jar
1483
+
1484
+ -include lib/annotations.pro
1485
+ </pre>
1486
+ <p>
1487
+ The annotations are effectively replacing the application-dependent
1488
+ <code>-keep</code> options. You may still wish to add traditional
1489
+ <code>-keep</code> options for processing <a href="#native">native
1490
+ methods</a>, <a href="#enumerations">enumerations</a>, <a
1491
+ href="#serializable">serializable classes</a>, and <a
1492
+ href="#annotations">annotations</a>.
1493
+ <p>
1494
+ The directory <code>examples/annotations</code> contains more examples that
1495
+ illustrate some of the possibilities.
1496
+
1497
+ <hr />
1498
+ <noscript><div><a target="_top" href="../index.html" class="button">Show menu</a></div></noscript>
1499
+ <address>
1500
+ Copyright &copy; 2002-2011
1501
+ <a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>.
1502
+ </address>
1503
+ </body>
1504
+ </html>