scala + processing でアプレット作成
アプレットとしてもアプリケーション(jarをダブルクリックしたら起動する)としても使用できるようにする。
コンパイル
- test.scala
import processing.core._ import processing.core.PConstants._ object Applet extends PApplet { var setupMethod = () => {} override def setup = setupMethod() } import Applet._ trait Main { Applet.setupMethod = setup _ def setup { size(400, 300, JAVA2D) background(255, 0, 0) text("Hello World", 100, 100) } } object ApplicationMain extends Main { def main(args: Array[String]) { PApplet.runSketch(Array("title"), Applet) } } class AppletMain extends java.applet.Applet with Main { override def init { setLayout(null) Applet.init() add(Applet) } }
scalac test.scala
jar化
- test.mf
Manifest-Version: 1.0 Main-Class: ApplicationMain
jar cvfm Test.jar test.mf *.class
ProGuard化
- proguard.jar
http://sourceforge.net/projects/proguard/files/proguard/4.6/
解凍して lib/proguard.jar を作業フォルダにコピーする。
- scala-library.jar
homebrew でインストールした場合は /usr/local/Cellar/scala/2.8.1/libexec/lib/scala-library.jar にある。
他の環境でもscalaのインストール先のどこかにある。
そのままでもいいけど適当にホームディレクトリにコピペしててもいい。
- core.jar
Mac版をダウンロードしてきて Processing.app/Contents/Resources/Java/core.jar にある。
- classes.jar
mac では /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/classes.jar にある。
windows では rt.jar という名前らしい。javaのインストール先で検索かければ出てくると思います。
- test.pro
-dontnote -dontwarn -injars Test.jar -injars /Users/alphaneet/lib/scala-library.jar(!META-INF/MANIFEST.MF,!library.properties) -injars /Users/alphaneet/lib/jar/core.jar(!META-INF/MANIFEST.MF) -libraryjars <java.home>/../Classes/classes.jar -outjars TestOut.jar -keep public class ApplicationMain { public static void main(java.lang.String[]); } -keep public class AppletMain -keep public class * extends processing.core.PGraphics
java -jar proguard.jar @test.pro
scala-library.jar と core.jar と classes.jar は自分の環境のパスに直す。
設定ファイルの書き方についてはここらへんを参照
http://proguard.sourceforge.net/index.html#/manual/usage.html
http://www.scala-lang.org/node/3378