Android + Scala + Intellij 13

Android是伟大的平台。 斯卡拉是伟大的语言。 Intellij Idea是伟大的IDE。

他们如何能够一起工作?

注意:这是一个自我回答。 但如果你有更多的信息,请在这里分享。

Solutions Collecting From Web of "Android + Scala + Intellij 13"

是的他们可以。

先决条件:安装Scala SDK。 斯卡拉Intellij插件安装。 启用Android Intellij插件。

不需要SBT和第三方插件。 没有Gradle。 Gradle支持与Scala插件不兼容。 告诉我,如果是。

  1. 创build新项目:在Intellij>新build项目> Android:应用程序模块> …名称项目,selectAPI级别,按build议创buildMyActivity>完成
  2. 创buildScala库:打开项目结构>平台设置>全局库>新build全局库> Java>浏览Scala SDK / lib>selectscala-library.jar [可选地添加链接到文档和来源]
  3. 创buildScala编译器库:打开项目结构>新build全局库> Java>浏览Scala SDK / lib>selectscala-library.jar,scala-compiler.jar,scala-reflect.jar
  4. 将Scala添加到项目模块:打开项目结构>模块>展开[您的主模块]> +添加> Scala>select之前添加的“编译器库”(应该在下拉列表中列出)
  5. 添加Scala库到项目模块:打开项目结构>模块>select[你的模块]:依赖> +添加>库>select“Scala-lib”(以前添加到全局库)
  6. 添加proguard (最近发现不再需要Proguard进行testing)将以下内容添加到您的proguard-project.txt> Scala Proguard中 。 打开项目结构>模块>展开[你的主模块]> Android:Proguard>启用“运行Proguard”>添加你的proguard-project.txt(具有默认的Android SDK android-proguard.txt)
  7. 创buildScala活动类:( 注意:您已经拥有由template:/src/[your_package]/[MyActivity.class]创build的MyActivity的Java版本)。 右键单击/ src / [your_package]>新build> Scala类>将其命名为[MyActivity]>确定。 java MyActivity.class中的所有代码复制到新创build的MyActivity.scala> Intellijbuild议“从Java转换代码”>确定。 现在你已经有了完整的MyActivity.scalafunction。 删除 java MyActivity.class(没有安全删除选项)>检查AndroidManifest.xml仍然链接到MyActivity。
  8. 享受:在模拟器或设备上运行你的应用程序。 如果出现问题(如往常一样),请检查您的步骤。 比想想你自己。 比请求帮助。

我用这个插件Gradle-android-scala-plugin和当前configuration成功使用Scala 2.11.7 + Android Studio + Gradle:

的build.gradle

buildscript { repositories { jcenter() mavenCentral() maven { url "http://saturday06.github.io/gradle-android-scala-plugin/repository/snapshot" } } dependencies { classpath 'com.android.tools.build:gradle:1.0.1' classpath 'jp.leafytree.gradle:gradle-android-scala-plugin:1.3.2' classpath "org.scala-lang:scala-library:2.11.7" // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } } allprojects { repositories { jcenter() } } 

应用程序/的build.gradle

 apply plugin: 'com.android.application' apply plugin: "jp.leafytree.android-scala" android { compileSdkVersion 22 buildToolsVersion "19.1.0" defaultConfig { applicationId "com.example.adray.myapplication" minSdkVersion 15 targetSdkVersion 19 versionCode 1 versionName "1.0" } lintOptions { abortOnError false } sourceSets { main { scala { srcDir "src/main/scala" // default: "src/main/scala" } } androidTest { scala { srcDir "src/androidTest/scala" // default: "src/androidTest/scala" } } } buildTypes { release { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } debug { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.github.satyan:sugar:1.3' compile 'org.scala-lang:scala-library:2.11.7' compile 'com.google.android.gms:play-services:7.5.0' compile 'com.android.support:appcompat-v7:22.2.0' } repositories { mavenCentral() jcenter() } 

proguard-rules.pro

 -dontoptimize -dontobfuscate -dontpreverify -dontwarn scala.** -dontwarn android.support.v4.app.** -dontwarn android.support.v4.view.** -dontwarn android.support.v4.widget.** -ignorewarnings # temporary workaround; see Scala issue SI-5397 -keep class scala.collection.SeqLike { public protected *; } 

请参阅此讨论以获取关于此问题的更多意见。