使用Scala 2.8 Trunk构建目标Android

Kev*_*ght 14 android scala scala-2.8

在android上使用Scala的权威参考资料似乎在这里:http://www.scala-lang.org/node/160

不幸的是,所有关于在Android上使用scala的引用都是基于Scala 2.7并且引用了一个自定义构建android-library.jar,其中有几个神秘的引用,暗示了android的更高版本不需要这个自定义构建(I' m使用2.1/API v7)

那么......在Android项目中使用Scala 2.8需要哪些步骤?最好使用eclipse和Google为该IDE提供的Android工具.

Jam*_*ore 11

编辑:

我这样做的新方法是使用我的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更有野心的东西,但是把它作为更多的一些提示.

在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
Run Code Online (Sandbox Code Playgroud)

构建器的位置设置为:

${build_project}/pguard
Run Code Online (Sandbox Code Playgroud)

并且工作目录和参数都设置为

${build_project}
Run Code Online (Sandbox Code Playgroud)

同样在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 *;
}
Run Code Online (Sandbox Code Playgroud)

当然,您需要更改-keep参数以保留自己的代码.

在java项目中,我添加了scala项目生成的jar文件(我在上面的脚本中使用了lib/proguard.jar).

但是,不要将scala项目添加为java项目构建路径中的必需项目.除了jar文件之外,这将添加scala类文件并混淆dex(因为它将同时获取.class文件和jar中的相同内容).据我所知,Eclipse将在工作区中构建所有内容,因此当您点击go按钮时,两个项目都会构建.