Android, Scala and Proguard



在遇到了许多Android命令行工具的排列问题后,我终于成功地将Scala和Java源代码混合编译成一个可用的apk。

正如许多人建议的那样,我使用proguard通过dex工具来压缩Scala库。问题是:

BUILD SUCCESSFUL
Total time: 1 minute 29 seconds

一分钟半。我们在这里讨论的是具有Hello-World复杂性的应用程序。我不认为我能发展成那样。我要去上冥想课。

proguard配置:

-injars ${out.absolute.dir}/classes:${scala-library.jar}(!META-INF/MANIFEST.MF,!library.properties)
-outjars ${out.absolute.dir}/classes.min.jar
-libraryjars ${android.jar}
-dontwarn
-dontoptimize
-dontobfuscate
-keep public class * extends android.app.Activity

是否有办法加快保护步骤?

Edit:我在一个相当不错的双核,3GB内存的机器上运行这个,在64位Linux之上。运行ant compile (scalac/javac)需要3秒。如上所述,完整的ant install需要1:30。根据输出,这是proguard步骤"冻结",很可能是因为scala/android运行时库的大小。

通过android Ant构建工作可能不是解决这个问题的正确方法。

当前的"最佳建议"是使用SBT和

  • proguard (https://github.com/siasia/xsbt-proguard-plugin)和
  • android (https://github.com/jberkel/android-plugin)

插件。

ProGuard收缩Scala 2.9.1库比Scala 2.8.1库需要更长的时间(54秒vs. 13秒,8.5 MB vs. 6.2 MB)。要么是库类的结构发生了根本性的变化,要么是一些新类导致了过多的计算。我必须弄清楚ProGuard或它的配置是否可以针对这种情况进行改进。现在,您可能可以使用Scala 2.8.1。

我假设你的ProGuard配置也包含Android和Scala所需的选项,如ProGuard手册中所述。如果你正在使用常规的Android构建过程,输入(classes, libs)和库(android.jar)已经在Ant构建文件中为你指定了,你不需要在ProGuard配置文件中再次指定它们。阅读它们两次只会花费时间,并产生许多警告(您已经完全关闭了它们——有选择地关闭它们更安全)。

如果你的手机是root用户,你可以直接在手机上安装scala库,这样你就不需要proguard步骤了:

https://github.com/jrudolph/scala-android-libs

最新更新