编辑:
我这样做的新方法是使用我的 Eclipse 插件:https ://github.com/banshee/AndroidProguardScala (自述文件有安装说明和指向正常 Eclipse 更新站点的指针)。
旧答案仍然有效,但新方法更好。
【老办法】我的做法:
- 使用普通的 Android/eclipse 工具来创建 Java 项目。
- 添加包含 Scala 代码的第二个项目。这样我就可以保留生成的代码以供将来参考(我是 Android 和 Scala 的新手)。本项目可以参考android.jar。
- scala 项目生成一个用于 java 项目的 jar 文件
- 使用 proguard 剥离库。我相信这避免了对 2.7 中使用的 scala-android.jar 的需要
不过,我没有将它用于比 hello, world 更雄心勃勃的事情,所以把它当作更多的提示。
在 scala 项目中,我添加了一个构建器(Builder > New),它只是一个名为 pguard 的 shell 脚本,位于项目的根目录中,其中包含:
#!/bin/sh
cd $1
PROGUARD=$HOME/dev/proguard/lib/proguard.jar
LIBS=
OUTPUT=lib/proguard.jar
rm -f $OUTPUT
AJAR=/Users/jamesmoore/dev/android-sdk-mac_86/platforms/android-7/android.jar
# java -jar $PROGUARD -injars 'bin:lib/scala-library.jar(!META-INF/MANIFEST.MF,!library.properties)' -outjar $OUTPUT -libraryjars @proguard.txt
java -Xmx1g -jar $PROGUARD -injars 'bin:lib/scala-library.jar(!META-INF/MANIFEST.MF,!library.properties)' -outjar $OUTPUT -libraryjars $AJAR @proguard.txt
构建器将位置设置为:
${build_project}/pguard
工作目录和参数都设置为
${build_project}
同样在 scala 项目的根目录中,有一个 proguard 参数文件 @proguard.txt:
-dontwarn
-dontoptimize
-dontobfuscate
-dontskipnonpubliclibraryclasses
-dontskipnonpubliclibraryclassmembers
-keepattributes Exceptions,InnerClasses,Signature,Deprecated,
SourceFile,LineNumberTable,*Annotation*,EnclosingMethod
-keep public class com.banshee.** {
public protected *;
}
当然,您需要更改 -keep 参数以保留您自己的代码。
在 java 项目中,我添加了由 scala 项目生成的 jar 文件(我在上面的脚本中使用 lib/proguard.jar)。
但是,不要将 scala 项目作为必需项目添加到 java 项目的构建路径中。这将在 jar 文件之外添加 scala 类文件并混淆 dex(因为它会同时获得 .class 文件和 jar 中的相同内容)。据我所知,Eclipse 将在工作区中构建所有内容,因此当您点击 go 按钮时,两个项目都会构建。