Android + Scala + Intellij 13

时间:2014-05-16 13:37:28

标签: android scala intellij-idea

Android是很棒的平台。 Scala是很棒的语言。 Intellij Idea是一款出色的IDE。

他们如何一起工作?

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

3 个答案:

答案 0 :(得分:26)

是的,他们可以。

<强>先决条件: 已安装Scala SDK。已安装Scala Intellij插件。已启用Android Intellij插件。

不需要SBT和第三方插件。 没有Gradle。 Gradle支持尚未与Scala插件兼容。如果是,请通知我。

  1. 创建新项目 在Intellij中>新项目&gt; Android:应用程序模块&gt; ...名称项目,选择API级别,按建议创建MyActivity&gt;完成
  2. 创建Scala库: 打开项目结构&gt;平台设置&gt;全球图书馆&gt;新的全球图书馆&gt; Java&gt;浏览Scala SDK / lib&gt;选择scala-library.jar [可选择添加指向文档和来源的链接]
  3. 创建Scala编译器库: 打开项目结构&gt;新的全球图书馆&gt; Java&gt;浏览Scala SDK / lib&gt;选择scala-library.jar,scala-compiler.jar,scala-reflect.jar
  4. 将Scala添加到项目模块: 打开项目结构&gt;模块&gt;展开[您的主要模块]&gt; +添加&gt; Scala&gt;选择&#34;编译器库&#34;之前添加的(应列在下拉列表中)
  5. 将Scala库添加到项目模块: 打开项目结构&gt;模块&gt;选择[您的模块]:依赖关系&gt; +添加&gt;图书馆&gt;选择&#34; Scala-lib&#34; (之前添加到全球图书馆)
  6. 添加proguard (最近发现不再需要Proguard进行测试) 将以下内容添加到proguard-project.txt&gt; Scala Proguard 打开项目结构&gt;模块&gt;展开[您的主要模块]&gt; Android:Proguard&gt;启用&#34;运行Proguard&#34; &GT;添加你的proguard-project.txt(有默认的Android SDK android-proguard.txt)
  7. 创建Scala活动类: (注意:您已经有模板创建的MyActivity Java版本:/ src / [your_package] / [MyActivity.class])。 正确点击/ src / [your_package]&gt;新&gt; Scala类&gt;将其命名为[MyActivity]&gt;好。 将来自java MyActivity.class的所有代码复制新创建的MyActivity.scala&gt; Intellij建议&#34;转换来自Java的代码&#34; &GT;好。 现在您拥有完整功能的MyActivity.scala。 删除 java MyActivity.class(没有安全删除选项)&gt;检查仍然链接到MyActivity的AndroidManifest.xml。
  8. <强>享受: 在模拟器或设备中运行您的应用程序。 如果出现问题(像往常一样),请检查您的步骤。想想自己。请求帮助。

答案 1 :(得分:7)

我使用此插件gradle-android-scala-plugin和当前配置成功使用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 *;
}

答案 2 :(得分:0)

有关此问题的更多意见,请参阅this discussion