當我的injar jar文件是來自插件程序集通過sbt assembly
命令的胖罐子時,我也有同樣的問題。 此問題的解決方案不是使用fat jar,而是使用從scala和其他java/scala庫生成的類來獲取瘦身jar文件。
在我的Mac(OS X 10.10)上,我有這個proguard文件(名爲your.pro)。
-injar classes
-injar /usr/local/Cellar/scala/2.11.5/libexec/lib/scala-library.jar(!META-INF/MANIFEST.MF)
-outjar main.jar
-libraryjar /System/Library/Frameworks/JavaVM.framework/Versions/1.6/Classes/classes.jar
-dontwarn
-dontnote
-ignorewarnings
-optimizationpasses 2
-optimizations !code/allocation/variable
-keep,allowoptimization,allowshrinking class * { *; }
-keepattributes SourceFile,LineNumberTable
-keepclasseswithmembers public class * { public static void main(java.lang.String[]); }
這是目錄結構。
.
├── classes
│ ├── HelloWorld$.class
│ ├── HelloWorld$delayedInit$body.class
│ ├── HelloWorld.class
│ └── META-INF
│ └── MANIFEST.MF
├── src
│ └── hello.scala
└── your.pro
hello.scala如下:
object HelloWorld extends App
{
println("Hello, world")
}
你可以在classes目錄中的類文件與scalac src/hello.scala -d classes
。應該添加MANIFEST文件來告訴哪個是主類。小心最後的空白行。
Manifest-Version: 1.0
Main-Class: HelloWorld
... blank line should be here ...
這個classes文件是從scala生成的。 與proguard @your.pro
,我可以得到工作的jar文件。
我上傳在https://dl.dropboxusercontent.com/u/10773282/share/2015/scala_class.zip
我也碰到過這個問題。我是Proguard的新手 – harschware