1b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang# 2b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang# This ProGuard configuration file illustrates how to process Scala 3b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang# applications, including the Scala runtime. 4b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang# Usage: 5b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang# java -jar proguard.jar @scala.pro 6b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang# 7b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang 8b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang# Specify the input jars, output jars, and library jars. 9b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang 10b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang-injars in.jar 11b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang-injars /usr/local/java/scala-2.9.1/lib/scala-library.jar 12b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang#-injars /usr/local/java/scala-2.9.1/lib/scala-compiler.jar(!META-INF/MANIFEST.MF) 13b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang#-injars /usr/local/java/scala-2.9.1/lib/jline.jar(!META-INF/MANIFEST.MF) 14b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang-outjars out.jar 15b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang 16b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang-libraryjars <java.home>/lib/rt.jar 17b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang#-libraryjars /usr/local/java/ant/lib/ant.jar 18b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang#... 19b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang 20b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang# Ignore some compiler artefacts. 21b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang 22b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang-dontwarn scala.** 23b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang 24b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang# Save the obfuscation mapping to a file, so you can de-obfuscate any stack 25b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang# traces later on. Keep a fixed source file attribute and all line number 26b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang# tables to get line numbers in the stack traces. 27b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang# You can comment this out if you're not interested in stack traces. 28b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang 29b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang-printmapping out.map 30b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang-renamesourcefileattribute SourceFile 31b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang-keepattributes SourceFile,LineNumberTable 32b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang 33b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang# Preserve all annotations. 34b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang 35b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang-keepattributes *Annotation* 36b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang 37b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang# You can print out the seeds that are matching the keep options below. 38b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang 39b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang#-printseeds out.seeds 40b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang 41b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang# Preserve all public applications. 42b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang 43b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang-keepclasseswithmembers public class * { 44b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang public static void main(java.lang.String[]); 45b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang} 46b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang 47b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang# Preserve some classes and class members that are accessed by means of 48b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang# introspection. 49b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang 50b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang-keep class * implements org.xml.sax.EntityResolver 51b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang 52b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang-keepclassmembers class * { 53b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang ** MODULE$; 54b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang} 55b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang 56b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang-keepclassmembernames class scala.concurrent.forkjoin.ForkJoinPool { 57b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang long eventCount; 58b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang int workerCounts; 59b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang int runControl; 60b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang scala.concurrent.forkjoin.ForkJoinPool$WaitQueueNode syncStack; 61b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang scala.concurrent.forkjoin.ForkJoinPool$WaitQueueNode spareStack; 62b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang} 63b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang 64b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang-keepclassmembernames class scala.concurrent.forkjoin.ForkJoinWorkerThread { 65b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang int base; 66b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang int sp; 67b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang int runState; 68b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang} 69b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang 70b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang-keepclassmembernames class scala.concurrent.forkjoin.ForkJoinTask { 71b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang int status; 72b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang} 73b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang 74b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang-keepclassmembernames class scala.concurrent.forkjoin.LinkedTransferQueue { 75b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang scala.concurrent.forkjoin.LinkedTransferQueue$PaddedAtomicReference head; 76b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang scala.concurrent.forkjoin.LinkedTransferQueue$PaddedAtomicReference tail; 77b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang scala.concurrent.forkjoin.LinkedTransferQueue$PaddedAtomicReference cleanMe; 78b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang} 79b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang 80b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang# Preserve some classes and class members that are accessed by means of 81b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang# introspection in the Scala compiler library, if it is processed as well. 82b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang 83b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang#-keep class * implements jline.Completor 84b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang#-keep class * implements jline.Terminal 85b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang 86b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang#-keep class scala.tools.nsc.Global 87b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang 88b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang#-keepclasseswithmembers class * { 89b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang# <init>(scala.tools.nsc.Global); 90b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang#} 91b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang 92b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang#-keepclassmembers class * { 93b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang# *** scala_repl_value(); 94b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang# *** scala_repl_result(); 95b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang#} 96b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang 97b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang# Preserve all native method names and the names of their classes. 98b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang 992270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom-keepclasseswithmembernames,includedescriptorclasses class * { 100b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang native <methods>; 101b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang} 102b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang 103b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang# Preserve the special static methods that are required in all enumeration 104b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang# classes. 105b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang 1062270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom-keepclassmembers,allowoptimization enum * { 107b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang public static **[] values(); 108b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang public static ** valueOf(java.lang.String); 109b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang} 110b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang 111b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang# Explicitly preserve all serialization members. The Serializable interface 112b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang# is only a marker interface, so it wouldn't save them. 113b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang# You can comment this out if your application doesn't use serialization. 114b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang# If your code contains serializable classes that have to be backward 115b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang# compatible, please refer to the manual. 116b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang 117b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang-keepclassmembers class * implements java.io.Serializable { 118b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang static final long serialVersionUID; 119b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang static final java.io.ObjectStreamField[] serialPersistentFields; 120b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang private void writeObject(java.io.ObjectOutputStream); 121b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang private void readObject(java.io.ObjectInputStream); 122b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang java.lang.Object writeReplace(); 123b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang java.lang.Object readResolve(); 124b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang} 125b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang 126b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang# Your application may contain more items that need to be preserved; 127b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang# typically classes that are dynamically created using Class.forName: 128b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang 129b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang# -keep public class mypackage.MyClass 130b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang# -keep public interface mypackage.MyInterface 131b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang# -keep public class * implements mypackage.MyInterface 132b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang 133