当我的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